Фрејмворк — разлика између измена

Садржај обрисан Садржај додат
м Бот: исправљена двострука преусмерења у Софтверски оквир
ознака: промењено одредиште преусмерења
Спашавам 1 извора и означавам 0 мртвим.) #IABot (v2.0.8
Ред 1:
У [[Програмирање|програмирању]], '''софтверски оквир''' је апстракција у којој омогућавање генералних софтверских функција могу бити селективно мењане додатним кодом написаним од стране корисника, и тиме омогућавајући софтвер који је спефицичан за апликације. Софтверски оквир је универзалано софтверско окружење које може бити коришћено изнова и које омогућава одређену функционалност као део веће [[Софтверска платформа|софтверске платформе]] да олакша развој [[Апликације|апликација]], производа и решења. Софтверски оквири могу укључивати подршку програма, компајлере, библиотеке кода, скупове алатки и -{[[API]]}- који све укупно доносе различите [[Компонентно оријентисано програмирање|компоненте]] да омогуће развој пројекта или решења.
#Преусмери [[Софтверски оквир]]
 
Оквири садрже кључно препознатљиве могућности које их одвајају од нормалних библиотека:
* ''[[Инверзија контроле]]'': У оквиру, за разлику од библиотека или нормалних апликација корисника, свеобухватно програмско [[управљање током]] није наређивано од стране саговорника, већ од стране оквира.<ref>{{Citation|url = http://www.riehle.org/computer-science/research/dissertation/diss-a4.pdf|last=Riehle|first=Dirk|title = Framework Design: A Role Modeling Approach|publisher = [[ETH Zurich|Swiss Federal Institute of Technology]]|year=2000|postscript = <!--none-->}}</ref>
* ''подразумевано понашање'': Оквир има подразумевано понашање. Ово подразумевано понашање мора бити неко корисно понашање а не скуп бескорисних потпрограма.
* '' [[растегљивост]]: ''Оквир може бити проширен од стране корисника обично селективним обарањем или специјализованим кодом корисника да омогући специфичне функционалности.
* ''непроменљиви код оквира'': Код оквира, генерално, не треба мењати, прихватајући екстензије од стране корисника. Другим речима, корисници могу проширити оквир, али не треба мењати његов код.
 
== Образложење ==
Дизајнери софтверских оквира циљају да олакшају софтверски развој омогућавајући дизајнерима и програмерима да одвоје своје време на упознавање софтверских захтева уместо на детаље вишестандардног нижег нивоа које доприносе систем који ради, и тиме смањујући свеобухватно време развоја.<ref>{{Cite web|url = http://docforge.com/wiki/Framework|title = Framework|accessdate = 15. 12. 2008|work = DocForge|archive-date = 07. 10. 2018|archive-url = https://web.archive.org/web/20181007003315/http://www.docforge.com/wiki/Framework|url-status = dead}}</ref> На пример, тим који користи [[оквир веб прилога]] да направи банкарски веб сајт се може фокусирати на писање кода који се посебно односи на банкарство уместо на механику захтева и управљања.
 
Оквири често додају величини програма, феномен назван "[[code bloat]]". Звог апликацијских захтева корисника, и такмичарски и комплементарни оквири понекад се појаве заједно у производу. Даље, звог комплексности АПИ-а, намењено смањење у свеовухватном времену развоја можда не може бити постигнуто због потребе за додатним временом на учење коришћења оквира; ова критика је очито валидна када посебни или нови оквир је први пут сусретнут од стране развојног тима. Ако се такав оквир не искористи у следећим задацима посла, уложено време у учењу оквира може коштати више него код који је посебно написан, а познат пројектном тиму; многи програмери чувају копије корисног boilerplate-а за честе потребе.
 
Какогод, када се оквир коначно научи, будући пројекти могу бити брже и лакше завршени; концепт оквира је да се направи скуп једна-величина-која-одговара-свима решења, и са присношћу, производња кода би логично требало да се догоди. Не постоје тврдње око величине кода која је евентуално уграђена са извозом производа, нити око њене ефикасности и концизности. Коришћење било ког библиотекарског решења неопходно повлачи са собом додатке и некоришћена спољна средства осим ако је програм везник компајлера и објекта правећи тесни (мали, потпуно контролисани, и одређени) извршни модул.
 
Проблем се наставља, али вишедекадно индустријско искуство је показало да најефективнији оквири су заправо они који еволуирају из рефакторинга честог кода на пословном нивоу, уместо коришћења "једна-величина-која-одговара-свима" оквира направљеним од стране трећих лица за генералне намене. Пример тога би био како корисничко сучеље у таквом пакету апликације као канцеларија расте да има чест изглед, осећај, и атрибуте и методе размене података, као већ што су једном различити скупови апликације порасли обједињени у један скуп који је тешњи и мањи; новији/еволуирани скуп који може бити производ који дели алатку интегралних библиотека и корисничких сучеља.
 
Овај тренд у полемици доноси битан проблем око оквира. Прављење оквира који је елегантан, против оног који се користи искључиво за решавање проблема, је и даље уметност више него наука. "Програмска елеганција" имплицира јасноћу, концизност, и мало расипања (додатне или стране функционалности, од које већина је дефинисане од стране корисника). За оне оквире који дефинишу код, на пример "елеганција" би имплицирала прављење кода који је чист и читљив просечном програмеру (и тиме је читљиво могуће уређивати њим), против оног који највише генерише само исправан код. Проблем елеганције је разлог зашто су само неколико софтверскикх оквира издржали тест времена: најбољи оквири су били у могућности да еволуирају грациозно као подножна технологија на којој су напредно направљени. Чак и тамо, еволуирајући, многи такви пакети ће задржати старе могућности надимајући коначан програм као што су другачије замењене методе задржане у паралели са новијим методама.
 
== Примери ==
Софтверски оквири овично садрже знатна вођења домаћинства и код алатке да би помогли у бут-стрепу корисничких апликација, али генерално се фокусирајући на специфичне проблеме домена, као што су:
* Уметничко цртање, композиција музике, и механички [[Dizajniranje računarom|CAD]]<ref>{{Citation|doi = 10.1145/98188.98197|last= Vlissides|first= J M|last2 = Linton|first2 = M A|year=1990|title = Unidraw: a framework for building domain-specific graphical editors|journal = ACM Transactions of Information Systems|volume = 8|issue = 3|postscript = <!--none-->|pages=237–268}}</ref><ref>{{Citation|last = Johnson|first = R E|year=1992|title = Documenting frameworks using patterns|publisher = ACM Press|journal = Proceedings of the Conference on Object Oriented Programming Systems Languages and Applications|postscript = <!--none-->|pages=63–76}}</ref>
* Апликације модела финансирања<ref>{{Citation|last= Birrer|first= A|first2 = T|last2 = Eggenschwiler|year=1993|work = Frameworks in the financial engineering domain: an experience report|publisher = [[Springer-Verlag]]|title = Proceedings of the European conference on object-oriented programming|pages=21–35}}</ref>
* Апликације модела система Земље<ref>{{Citation|last= Hill|first= C|first2 = C|last2 = DeLuca|first3 = V|last3 = Balaji|first4 = M|last4 = Suarez|first5 = A|last5 = da Silva|title = Architecture of the Earth System Modeling Framework ([[ESMF]])|journal = Computing in Science and Engineering|year=2004|postscript = <!--none-->|pages=18–28}}</ref>
* [[Sistemi za podršku odlučivanju|Системи за подршку у одлучивању]]<ref>{{Citation|last = Gachet|first = A|year=2003|title = Software Frameworks for Developing Decision Support Systems – A New Component in the Classification of DSS Development Tools|journal = Journal of Decision Systems|volume = 12|issue = 3|postscript = <!--none-->|pages=271–281}}</ref>
* [[Мултимедијални оквир]] - Репродукција медијских фајлова
* [[Ajaks (programiranje)|Ajax оквир]] / [[JavaScript оквир]]
* [[Оквир веб прилога]]
* [[Posredni softver|Посредни софтвер]]
* [[Cactus оквир]] - Научно рачунање високих перформанси
* [[Оквир апликације]] - Генералне апликације [[Grafički korisnički interfejs|ГКИ]]
* [[Enterprise Architecture оквир]]
* [[Oracle Application Development оквир]]
 
== Архитектура ==
Према Прију,<ref>{{Citation|title = Meta Patterns: A Means for Capturing the Essentials of Reusable Object-Oriented Design|last=Pree|first=W|journal = Proceedings of the 8th European Conference on Object-Oriented Programming|year=1994|publisher = [[Springer-Verlag]]|pages=150–162}}</ref> софтверски оквири се састоје из ''залеђених делова'' и''врућих делова''. ''Залеђени делови'' дефинишу свеобухватну архитектуру програмског система, мислећи се на основне компоненте и везе између њих. Оне остају непромењене (замрзнуте) и било ком делу оквира апликације. ''Врући делови'' представљају оне делове где програмери који користе оквир да додају свој код да додају функционалност специфичну за свој пројекат.
 
У окружењу [[Објектно-оријентисано програмирање|објектно-оријентисаног програмирања]], оквир се састоји из апстрактних и конкретних класа. Примери таквих оквира се састоје из компоновања и [[Наслеђивање (објектно-оријентисано програмирање)|наслеђивања]] већ постојећих класа.<ref>{{Citation|last = Buschmann|first = F|year=1996|title = Pattern-Oriented Software Architecture Volume 1: A System of Patterns. Chichester|publisher = [[John Wiley & Sons|Wiley]]|isbn=978-0-471-95869-7|postscript = <!--none-->}}</ref>
 
Приликом развоја конкретног програмског система са софтверским оквиром, програмери искоришћавају вруће делове у складу са специфичним потребама и неопходности система. Софтверски оквири се ослањају на [[Холивудски принцип]]: "Не зовите нас, ми ћемо вас звати."<ref>{{Citation|last = Larman|first = C|year=2001|title = Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and the Unified Process|isbn=978-0-13-092569-5|publisher = [[Prentice Hall]]|edition = 2nd|postscript = <!--none-->}}</ref> Ово значи да кориснички дефинисане класе (на пример, нове поткласе), добијају поруке из већ дефинисаних оквира класа. Програмери обично рукују са овим имплементирајући апстрактних метода наслеђивања.
 
== Види још ==
* [[Класа (рачунарска наука)]]
* [[Пројектни узорци|Пројектни узорци (рачунарска наука)]]
* [[Не понављај се]]
* [[Имплицитно призивање]]
* [[Парадигме програмирања]]
 
== Референце ==
{{reflist|30em}}
 
== Спољашње везе ==
* [https://web.archive.org/web/20160507234030/http://www.elegantcoding.com/2011/07/software-frameworks-resistance-isnt.html Software Frameworks: Resistance isn’t Futile]
* [http://davis.lbl.gov/home/scidac/node8.html Approach to Software Framework Design]
* [https://web.archive.org/web/20150923211506/http://www.cse.wustl.edu/~schmidt/PDF/HPL.pdf Applying Patterns and Frameworks to Develop Object-Oriented Communication Software]
{{Commonscat|Software frameworks}}
 
[[Категорија:Софтверска архитектура]]
[[Категорија:Пројектни узорци]]
[[Категорија:Објектно-оријентисано програмирање]]