Модуларно програмирање

Модуларно програмирање је софтверски дизајнирана техника коју карактерише претварање функционалности програма у слободне, заменљиве модуле, тако да сваки садржи оно што је неопходно за извршавање само једног аспекта жељене функционалности.

Приступ модулу изражава елементе који су неопходни и потребни модулу. Елементи дефинисани у приступу модула се могу детектовати од стране других модула. Имплементација подразумева код који је одговарајући елементима који су дефинисани у приступу. Модуларно програмирање је уско повезано са структуралним програмирањем и објектно оријентисаним програмирањем, тако што им је заједнички циљ поједностављење конструкција великих софтверских програма и система, свођењем на мање делове, а такође су повезани својим датумом порекла које датира из 1960-их. Док је, историјски гледано, употреба ових услова била недоследна, данас се модуларно програмирање односи на разлагање целог програма на делове, структурално програмирање се односи на минимално коришћење кода структуралне контроле тока, док се објектно оријентисано програмирање базира на коришћењу информација објеката, врсти структуре података.

У објектно оријентисаном програмирању, коришћење приступа као архитектонски изум за прављење модула назива се Приступачно-базирано програмирање.

Терминологија уреди

Термин паковање се понекад користи уместо модула (као у Дарту, Гоу и Јави). У другим имплементацијама, има посебно значење; У Пајтону паковање представља колекцију модула, док је у Јави 9 која тек треба да изађе, планирано да се убаци нови концепт модула (колекција паковања са унапређеном контролом приступа).

Термин паковање има и других значења у софтверу. Компонента има сличан концепт, али углавном је типичан за виши ниво; компонента је део једног целог софтверског система, док је модул део индивидуалног програма. Скала термина модул драстично варира од програма до програма; У пајтону је то веома мала скала где је сваки фајл-модул, док је у Јави 9 планирано да то буде велика скала, где је модул колекција паковања, што је у ствари колекција фајлова.

Неки термин за модул је јединица, која се користи у Паскалу.

Програски језици, подржавање уреди

Програмски језици који подржавају модуларни концепт су: Ада, Алгол, Блиц Бејзик, Кобол, D, Дарт, Ерланг, F ,Фортан, Гоу, Хаскел, IBM систем/360, Асемблер, IBM контрола језика(CL), IBM RPG, Јава,[а], Матлаб, Модула, Модула 2, Модула 3, Морфо, NEWP, Оберон, Оберон 2, објектив C, OCaml, неколико деривата из Паскала,(компонентни Паскал, објектни Паскал, Турбо Паскал, UCSD Паскал), Перл, PL/I, Основе, Пајтон, Руби[2] и ВЕБ-днк.

Очигледан пример програма који немају подршку за модуле су C , C++[3] и Паскал (у оригиналном облику). Од 2014, C++ садржи модуле;[4] модули су додати у Објектив C у iOS7-у (2013); и Паскал је замењен Модулом и Обероном, што подразумева модуле са почетка и деривате које садрже модуле. ЈаваСкрипт нема ни један уграђен концепт модула; али библиотеке као нпр. ноде.јс(node.js) чине модуле као имплементиране функције у ЈаваСкрипт-у.

Модуларно програмирање се може извршити чак и ако програмски језик не садржи експлицитну синтатичку карактеристику која подржава именовање модула. На пример, IBM систем такође користи модуле током програмирања у ИЛЕ(ILE)-у.

Кључни аспекти уреди

Са модуларним програмирањем, бриге су подељене тако да модули врше логички дискретне функције, интерагујући кроз добро дефинисан приступ. Честа форма модула је Ациклични усмерени граф(ДАГ); у овом случају је циклична зависност између модула виђена као индикатор да би то требало да буде један једини модул. У овом случају модули могу бити уређени хијерархијски; где је најнижи члан модула независан у односу на друге модуле, док хијерархијски највиши модули зависе од нижих. Партикуларни програм или библиотека, је модул највишег нивоа своје сопствене хијерархије, али може бити виђен као нижи модул неког сложенијег програма, библиотеке или система.

Када се креира модуларни систем, уместо монолитне апликације (где је најамња компонента целина), више мањих модула је писано одвојено тако да, када се споје граде извршни апликациони програм. Ово је такође састављено одвојено уз помоћ одвојене компилације, а затим линковано уз помоћ едитора Линкова. Тачно у време компајлер може извести део конструкције у лету у периоду извршавања програма.

Ово чини модуларно дизајниране системе, ако су исправно направљени, много више употребљивијим него монолитан дизајн, од којих сви (или многи) овакви модули могу бити поново коришћени (без промене) у другим пројектима. Ово такође олакшава 'разбијање' пројеката на неколико мањих пројеката. Теоретички, модуларизовани софтверски пројекат ће бити лакше састављен од стране већих тимова, док чланови који нису део тима креирају цео систем, или морају да знају систем као целину. Они се могу фокусирати само на мање задатке (тврди се да је ово супротно од кључне претпоставке Митског човека-месец, омогућавајући тако додавање више девелопера у софтверске пројетке-без даљег прављења).

Историја уреди

Модуларно програмирање, у форми подсистема (нарочито за I/O) и софтверске библиотеке, датира још из периода раних софтверских система, када је коришћен за поновну употребу кода. Модуларно програмирање по себи, са циљем модуларности, је развијен крајем 60-их и раним 70-им као програмирање увелико, а као аналогно томе је програмирање у мало као концепт структуралног програмирања (1960-е). Израз 'Модуларно програмирање' датира барем још од Националног Симпозијума Модуларног програмирања, организован на Информационом и Системском институту у Јулу 1968 од стране Лерија Константина; други кључни концепти су били скривање информација и растављање информација.

Модули нису имали оригиналну спецификацију за АЛГОЛ68(1968), али су били уграђени као екстензије у ранијим имплементацијама АЛГОЛ68-Р(1970) и АЛГОЛ68-Ц(1970) а касније формализоване.[5] Један од првих програма направљених за почетак модуларно програмирања је био Модула(1975), направљен од стране Никлауса Вирта. Још један од првих модуларних програма је био МЕСА(MESA)(1970) направљен од стране ПАРК компаније, Виртх је направио Месу слично оригиналном Модулу, Модулу 2 (1978), што је утицало на развијање каснијих програма, практично као наследнике, нпр. Модула 3(1980). Модули користе тачкаста-квалификована имена, као нпр. M.a да би изразили објекат a из модула M, подударајући се са конотацијом о приступу поља записа (и слично томе за атрибуте и методе објеката) и сада је распрострањен тј. налази се у C#, Дарту, Го-у, Јави, Пајтону.. Модуларно програмирање је постало распрострањено од 1980-их година; Оригинални програмски језик Паскал (1970) није садржао у себи модуле, али касније верзије, посебно УЦСД Паскал(1978) и Турбо Паскал(1983) су их имале у форми јединица , и тако је Паскал утицао на Аду(1980). Продужени Паскал ИСО 10206:1990 је била ближа Модулу 2. Стандард МЛ(1986)[6] има један од најкомплетнијих модуларних система укључујући параметаризоване модуле за повезивање између модула.

У 1980-им и 1990-им је Модуларно програмирање остало у сенци или бивало измешано са објектно оријентисаним програмирањем, практично појавом и полуларизацијом C++ и Јаве, ово је такође значило пропаст за Модула 3, која је имала модуле али не и објекте. На пример C фамилија програмских језика садржи објекте и класе у C++((Оригинално C са класама, 1980 и Објективни C(1983) који подржава модуле старије од 30 година. Јава (1995) подржава модуле у форми паковања, тако да је примарна јединица кода у ствари класа. Како год, Пајтон (1991) је користио оба модула и објекта од почетка, користећи модуле као примарне јединице кода и паковања као веће јединице. И Перл 5 има уграђену опцију за оба модула и објекта, са широким дијапазоном модула који су изашли у ЦПАН-у.

Модуларно програмирање је данас распротрањено, и виртуално се налази у свим важнијим програмским језицима од 1990-их. Релативна битност модула варира од програма до програма, и у класама-базираним, објектно оријетнисаним програмима још увек постоји преклапање и кофузија са класама као јединици организације и инкапсулизације, али су оба добро-утврђена као различити концепти.

Види још уреди

Напомене уреди

  1. ^ Термин Паковање је коришћен за аналогију модула у ЈЛС(JLS);[1] — видети Јава паковање. "Модули", као примери колекције паковања, су планирани за Јаву 9 као део пројекта Пројекат Јигсав; ово се раније звало суперпаковање и било је планирано за Јаву 7

Референце уреди

  1. ^ James Gosling, Bill Joy, Guy Steele, Gilad Bracha (2005). The Java Language Specification, Third Edition. ISBN 978-0-321-24678-3.  Текст „pages” игнорисан (помоћ). In the Introduction, it is stated "Chapter 7 describes the structure of a program, which is organized into packages similar to the modules of Modula." The word "module" has no special meaning in Java.
  2. ^ Class: Module (Ruby 2.0.0)
  3. ^ C & C++ do, however, allow separate compilation and declarative interfaces to be specified using header files
  4. ^ N4047: A Module System for C++, by Gabriel Dos Reis, Mark Hall, Gor Nishanov
  5. ^ Lindsey, Charles H. (1976). „Proposal for a Modules Facility in ALGOL 68” (PDF). ALGOL Bulletin (39): 20—29. Архивирано из оригинала (PDF) 3. 3. 2016. г. Приступљено 15. 11. 2015. 
  6. ^ MacQueen, David (1984). „Modules for Standard ML, LFP '84 Proceedings of the 1984 ACM Symposium on LISP and functional programming Pages 198-207”.