Modularno programiranje

S Vikipedije, slobodne enciklopedije

Modularno programiranje je softverski dizajnirana tehnika koju karakteriše pretvaranje funkcionalnosti programa u slobodne, zamenljive module, tako da svaki sadrži ono što je neophodno za izvršavanje samo jednog aspekta željene funkcionalnosti.

Pristup modulu izražava elemente koji su neophodni i potrebni modulu. Elementi definisani u pristupu modula se mogu detektovati od strane drugih modula. Implementacija podrazumeva kod koji je odgovarajući elementima koji su definisani u pristupu. Modularno programiranje je usko povezano sa strukturalnim programiranjem i objektno orijentisanim programiranjem, tako što im je zajednički cilj pojednostavljenje konstrukcija velikih softverskih programa i sistema, svođenjem na manje delove, a takođe su povezani svojim datumom porekla koje datira iz 1960-ih. Dok je, istorijski gledano, upotreba ovih uslova bila nedosledna, danas se modularno programiranje odnosi na razlaganje celog programa na delove, strukturalno programiranje se odnosi na minimalno korišćenje koda strukturalne kontrole toka, dok se objektno orijentisano programiranje bazira na korišćenju informacija objekata, vrsti strukture podataka.

U objektno orijentisanom programiranju, korišćenje pristupa kao arhitektonski izum za pravljenje modula naziva se Pristupačno-bazirano programiranje.

Terminologija[uredi | uredi izvor]

Termin pakovanje se ponekad koristi umesto modula (kao u Dartu, Gou i Javi). U drugim implementacijama, ima posebno značenje; U Pajtonu pakovanje predstavlja kolekciju modula, dok je u Javi 9 koja tek treba da izađe, planirano da se ubaci novi koncept modula (kolekcija pakovanja sa unapređenom kontrolom pristupa).

Termin pakovanje ima i drugih značenja u softveru. Komponenta ima sličan koncept, ali uglavnom je tipičan za viši nivo; komponenta je deo jednog celog softverskog sistema, dok je modul deo individualnog programa. Skala termina modul drastično varira od programa do programa; U pajtonu je to veoma mala skala gde je svaki fajl-modul, dok je u Javi 9 planirano da to bude velika skala, gde je modul kolekcija pakovanja, što je u stvari kolekcija fajlova.

Neki termin za modul je jedinica, koja se koristi u Paskalu.

Prograski jezici, podržavanje[uredi | uredi izvor]

Programski jezici koji podržavaju modularni koncept su: Ada, Algol, Blic Bejzik, Kobol, D, Dart, Erlang, F ,Fortan, Gou, Haskel, IBM sistem/360, Asembler, IBM kontrola jezika(CL), IBM RPG, Java,[a], Matlab, Modula, Modula 2, Modula 3, Morfo, NEWP, Oberon, Oberon 2, objektiv C, OCaml, nekoliko derivata iz Paskala,(komponentni Paskal, objektni Paskal, Turbo Paskal, UCSD Paskal), Perl, PL/I, Osnove, Pajton, Rubi[2] i VEB-dnk.

Očigledan primer programa koji nemaju podršku za module su C , C++[3] i Paskal (u originalnom obliku). Od 2014, C++ sadrži module;[4] moduli su dodati u Objektiv C u iOS7-u (2013); i Paskal je zamenjen Modulom i Oberonom, što podrazumeva module sa početka i derivate koje sadrže module. JavaSkript nema ni jedan ugrađen koncept modula; ali biblioteke kao npr. node.js(node.js) čine module kao implementirane funkcije u JavaSkript-u.

Modularno programiranje se može izvršiti čak i ako programski jezik ne sadrži eksplicitnu sintatičku karakteristiku koja podržava imenovanje modula. Na primer, IBM sistem takođe koristi module tokom programiranja u ILE(ILE)-u.

Ključni aspekti[uredi | uredi izvor]

Sa modularnim programiranjem, brige su podeljene tako da moduli vrše logički diskretne funkcije, interagujući kroz dobro definisan pristup. Česta forma modula je Aciklični usmereni graf(DAG); u ovom slučaju je ciklična zavisnost između modula viđena kao indikator da bi to trebalo da bude jedan jedini modul. U ovom slučaju moduli mogu biti uređeni hijerarhijski; gde je najniži član modula nezavisan u odnosu na druge module, dok hijerarhijski najviši moduli zavise od nižih. Partikularni program ili biblioteka, je modul najvišeg nivoa svoje sopstvene hijerarhije, ali može biti viđen kao niži modul nekog složenijeg programa, biblioteke ili sistema.

Kada se kreira modularni sistem, umesto monolitne aplikacije (gde je najamnja komponenta celina), više manjih modula je pisano odvojeno tako da, kada se spoje grade izvršni aplikacioni program. Ovo je takođe sastavljeno odvojeno uz pomoć odvojene kompilacije, a zatim linkovano uz pomoć editora Linkova. Tačno u vreme kompajler može izvesti deo konstrukcije u letu u periodu izvršavanja programa.

Ovo čini modularno dizajnirane sisteme, ako su ispravno napravljeni, mnogo više upotrebljivijim nego monolitan dizajn, od kojih svi (ili mnogi) ovakvi moduli mogu biti ponovo korišćeni (bez promene) u drugim projektima. Ovo takođe olakšava 'razbijanje' projekata na nekoliko manjih projekata. Teoretički, modularizovani softverski projekat će biti lakše sastavljen od strane većih timova, dok članovi koji nisu deo tima kreiraju ceo sistem, ili moraju da znaju sistem kao celinu. Oni se mogu fokusirati samo na manje zadatke (tvrdi se da je ovo suprotno od ključne pretpostavke Mitskog čoveka-mesec, omogućavajući tako dodavanje više developera u softverske projetke-bez daljeg pravljenja).

Istorija[uredi | uredi izvor]

Modularno programiranje, u formi podsistema (naročito za I/O) i softverske biblioteke, datira još iz perioda ranih softverskih sistema, kada je korišćen za ponovnu upotrebu koda. Modularno programiranje po sebi, sa ciljem modularnosti, je razvijen krajem 60-ih i ranim 70-im kao programiranje uveliko, a kao analogno tome je programiranje u malo kao koncept strukturalnog programiranja (1960-e). Izraz 'Modularno programiranje' datira barem još od Nacionalnog Simpozijuma Modularnog programiranja, organizovan na Informacionom i Sistemskom institutu u Julu 1968 od strane Lerija Konstantina; drugi ključni koncepti su bili skrivanje informacija i rastavljanje informacija.

Moduli nisu imali originalnu specifikaciju za ALGOL68(1968), ali su bili ugrađeni kao ekstenzije u ranijim implementacijama ALGOL68-R(1970) i ALGOL68-C(1970) a kasnije formalizovane.[5] Jedan od prvih programa napravljenih za početak modularno programiranja je bio Modula(1975), napravljen od strane Niklausa Virta. Još jedan od prvih modularnih programa je bio MESA(MESA)(1970) napravljen od strane PARK kompanije, Virth je napravio Mesu slično originalnom Modulu, Modulu 2 (1978), što je uticalo na razvijanje kasnijih programa, praktično kao naslednike, npr. Modula 3(1980). Moduli koriste tačkasta-kvalifikovana imena, kao npr. M.a da bi izrazili objekat a iz modula M, podudarajući se sa konotacijom o pristupu polja zapisa (i slično tome za atribute i metode objekata) i sada je rasprostranjen tj. nalazi se u C#, Dartu, Go-u, Javi, Pajtonu.. Modularno programiranje je postalo rasprostranjeno od 1980-ih godina; Originalni programski jezik Paskal (1970) nije sadržao u sebi module, ali kasnije verzije, posebno UCSD Paskal(1978) i Turbo Paskal(1983) su ih imale u formi jedinica , i tako je Paskal uticao na Adu(1980). Produženi Paskal ISO 10206:1990 je bila bliža Modulu 2. Standard ML(1986)[6] ima jedan od najkompletnijih modularnih sistema uključujući parametarizovane module za povezivanje između modula.

U 1980-im i 1990-im je Modularno programiranje ostalo u senci ili bivalo izmešano sa objektno orijentisanim programiranjem, praktično pojavom i polularizacijom C++ i Jave, ovo je takođe značilo propast za Modula 3, koja je imala module ali ne i objekte. Na primer C familija programskih jezika sadrži objekte i klase u C++((Originalno C sa klasama, 1980 i Objektivni C(1983) koji podržava module starije od 30 godina. Java (1995) podržava module u formi pakovanja, tako da je primarna jedinica koda u stvari klasa. Kako god, Pajton (1991) je koristio oba modula i objekta od početka, koristeći module kao primarne jedinice koda i pakovanja kao veće jedinice. I Perl 5 ima ugrađenu opciju za oba modula i objekta, sa širokim dijapazonom modula koji su izašli u CPAN-u.

Modularno programiranje je danas rasprotranjeno, i virtualno se nalazi u svim važnijim programskim jezicima od 1990-ih. Relativna bitnost modula varira od programa do programa, i u klasama-baziranim, objektno orijetnisanim programima još uvek postoji preklapanje i kofuzija sa klasama kao jedinici organizacije i inkapsulizacije, ali su oba dobro-utvrđena kao različiti koncepti.

Vidi još[uredi | uredi izvor]

Napomene[uredi | uredi izvor]

  1. ^ Termin Pakovanje je korišćen za analogiju modula u JLS(JLS);[1] — videti Java pakovanje. "Moduli", kao primeri kolekcije pakovanja, su planirani za Javu 9 kao deo projekta Projekat Jigsav; ovo se ranije zvalo superpakovanje i bilo je planirano za Javu 7

Reference[uredi | uredi izvor]

  1. ^ James Gosling, Bill Joy, Guy Steele, Gilad Bracha (2005). The Java Language Specification, Third Edition. ISBN 978-0-321-24678-3.  Tekst „pages” ignorisan (pomoć). 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. Arhivirano iz originala (PDF) 3. 3. 2016. g. Pristupljeno 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”.