Programare modulară

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 14 februarie 2022; verificările necesită 2 modificări .

Programarea modulară  este organizarea unui program ca o colecție de mici blocuri independente numite module, a căror structură și comportament respectă anumite reguli. [1] Utilizarea programării modulare facilitează testarea programului și găsirea erorilor. Subsarcinile dependente de hardware pot fi strict separate de alte subsarcini, ceea ce îmbunătățește portabilitatea programelor create.

Un modul  este o bucată completă funcțional a unui program . În multe limbi (dar nu neapărat) este emis ca un fișier separat cu codul sursă sau o parte continuă numită a acestuia. Unele limbi permit împachetarea modulelor .

Modularitatea codului programului

Principiul modularității este un mijloc de simplificare a sarcinii de proiectare a software-ului (SW) și de distribuire a procesului de dezvoltare între echipele de dezvoltare. La împărțirea software-ului în module, fiecare modul specifică funcționalitatea pe care o implementează, precum și legături către alte module. [2] Comoditatea utilizării unei arhitecturi modulare constă în capacitatea de a actualiza (înlocui) modulul fără a fi nevoie să schimbi restul sistemului.

Rolul modulelor poate fi jucat de structuri de date , biblioteci de funcții , clase , servicii și alte unități software care implementează anumite funcționalități și oferă o interfață pentru aceasta.

Codul programului este adesea împărțit în mai multe fișiere, fiecare dintre acestea fiind compilat separat de celelalte. Această modularitate a codului poate reduce semnificativ timpul de recompilare pentru modificările aduse doar unui număr mic de fișiere sursă și simplifică dezvoltarea echipei . Este, de asemenea, capacitatea de a înlocui componente individuale (cum ar fi fișierele jar , bibliotecile so sau dll) ale produsului software final, fără a fi nevoie de a reconstrui întregul proiect (de exemplu, dezvoltarea de pluginuri pentru un program deja terminat).

O metodă de scriere a programelor modulare este programarea orientată pe obiecte . OOP oferă un grad ridicat de modularitate prin proprietăți precum încapsularea , polimorfismul și legarea tardivă .

Sistem modular de module

În ciuda faptului că programarea modulară nu este legată de detaliile unui anumit limbaj (și chiar și în absența unui suport explicit din partea limbajului poate fi folosită cu suficientă disciplină din partea programatorilor), majoritatea limbilor își împing propriul sistem de module. la nivelul superior, de parcă portarea sistemului de module.de la o limbă la alta ar fi imposibilă [3] .

În 2000, Xavier Leroy a propus să facă sistemele de module modulare, adică parametrizate prin descrierea unui nucleu specific al limbajului cu propriul sistem de tip [3] . Ca exemplu, el a demonstrat o implementare generalizată a limbajului de module ML (ca cel mai dezvoltat sistem de module cunoscut în acest moment) și exemple de instanțiere a acestuia în limbajul tradițional ML pentru acesta și în limbajul C.

Implementarea lui Leroy este ea însăși construită folosind limbajul modulului ML , și anume ca un functor parametrizat prin date despre nucleul limbajului și o descriere a mecanismului său de verificare a consistenței tipului . Aceasta înseamnă că atunci când scrieți un compilator pentru o anumită limbă, este suficient să descrieți nucleul limbajului și să îl transmiteți functorului dat (ca funcție de bibliotecă) - rezultatul va fi un compilator pentru extinderea unui limbaj cunoscut cu un sistem a modulelor ML .

Istoria conceptului de modul

Istoria conceptului de module ca unități de compilare datează de la Fortran II și Cobol , adică de la sfârșitul anilor 1950 [4] [5] . În 1976, a apărut o publicație care a dezvoltat conceptul de modularitate - despre limba Mesa , care a fost dezvoltat la Xerox PARC . În 1977, omul de știință Niklaus Wirth s-a familiarizat cu acest concept în detaliu , discutând cu dezvoltatorii de la Xerox PARC. [6] Aceste idei au fost folosite de Wirth pentru a crea limbajul Modula-2 , care a fost publicat în 1977 [7] .

Termenul „modul” în programare a început să fie folosit în legătură cu introducerea principiilor modulare în crearea programelor. În anii 1970, un modul era o procedură sau o funcție scrisă după anumite reguli. De exemplu: „modulul trebuie să fie simplu, închis (independent), vizibil (de la 50 la 100 de linii), implementând o singură funcție de sarcină, având un punct de intrare și un punct de ieșire”.

D. Parnas ( David Parnas ) în 1972 a fost primul care a formulat mai mult sau mai puțin clar principalele proprietăți ale unui modul de program : „Pentru a scrie un modul, ar trebui să existe suficiente cunoștințe minime despre textul altuia.” Astfel, în conformitate cu definiția, un modul ar putea fi orice procedură (funcție) separată atât de cel mai de jos nivel al ierarhiei (nivel de implementare), cât și de cel mai înalt nivel, la care apar doar apeluri către alte proceduri de modul. [opt]

Astfel, Parnassus a fost primul care a prezentat conceptul de ascunderea informațiilor în programare .  Cu toate acestea, singurele construcții sintactice care au existat în limbajele anilor 70, cum ar fi procedura și funcția, nu puteau oferi ascunderea de informații fiabile, din cauza utilizării pe scară largă a variabilelor globale.

Această problemă ar putea fi rezolvată doar prin dezvoltarea unei noi construcții sintactice care să nu fie afectată de variabile globale. Un astfel de design a fost creat și numit modul. Inițial, s-a presupus că atunci când se implementează sisteme software complexe, modulul ar trebui să fie utilizat împreună cu procedurile și funcțiile ca o construcție care combină și ascunde în mod fiabil detaliile implementării unei anumite subsarcini.

Astfel, numărul de module din complex ar trebui să fie determinat de descompunerea sarcinilor stabilite în subsarcini independente. În cazul extrem, un modul poate fi folosit chiar pentru a include o singură procedură în el, dacă este necesar ca acțiunea locală pe care o efectuează să fie garantată a fi independentă de influența altor părți ale programului, în cazul oricăror modificări.

Pentru prima dată, o construcție sintactică specializată a modulului a fost propusă de N. Wirth în 1975 și inclusă în noul său limbaj Modula. Cât de puternic se schimbă proprietățile limbajului atunci când este introdus mecanismul modulului, este evidențiată de următoarea remarcă a lui N. Wirth, făcută de el despre limbajul de mai târziu Modula-2: „Modulele are the most important feature that distingus the Modula-2. limbajul predecesorului său Pascal”.

Implementare în limbaje de programare

Limbi care suportă formal conceptul de module: IBM S/360 Assembler , Cobol , RPG , PL/1 , Ada , D , F  (engleză) , Fortran , Haskell , Blitz BASIC , OCaml , Pascal , ML , Modula-2 , Oberon , Componenta Pascal , Zonnon , Erlang , Perl , Python și Ruby . Sistemul IBM a folosit „module” din limbajele RPG , Cobol și CL atunci când a fost programat în mediul ILE.

Programarea modulară se poate face chiar și atunci când sintaxa limbajului de programare nu acceptă denumirea explicită a modulelor.

Instrumentele software pot crea module de cod sursă care sunt reprezentate ca părți ale grupurilor - componente de bibliotecă - care sunt compilate cu un program de legătură .

Pascal standard nu oferă mecanisme pentru compilarea separată a părților programului cu asamblarea lor ulterioară înainte de execuție. Este destul de de înțeles că dezvoltatorii de compilatoare comerciale Pascal doresc să includă instrumente în limbaj care să-i sporească modularitatea. [9]

Un modul în Pascal este o unitate de program autocompilată care include diverse componente ale secțiunii de declarații (tipuri, constante, variabile, proceduri și funcții) și, eventual, câteva instrucțiuni executabile ale părții inițiatoare. [zece]

În ceea ce privește organizarea și natura utilizării în program, modulele Pascal sunt apropiate de modulele pachet (PACKAGE) ale limbajului de programare Ada. În ele, precum și în pachetele Ada, este alocată în mod explicit o parte de interfață „vizibilă”, în care sunt concentrate descrieri ale tipurilor globale, constantelor, variabilelor și, de asemenea, sunt date titlurile procedurilor și funcțiilor. Apariția obiectelor în partea de interfață le face disponibile altor module și programului principal. Corpurile de proceduri și funcții sunt situate în partea executabilă a modulului, care poate fi ascunsă de utilizator.

Modulele sunt un instrument excelent pentru dezvoltarea bibliotecilor de aplicații și un instrument puternic pentru programarea modulară. O caracteristică importantă a modulelor este că compilatorul își plasează codul programului într-un segment de memorie separat. Lungimea segmentului nu poate depăși 64 KB, dar numărul de module utilizate concomitent este limitat doar de memoria disponibilă, ceea ce vă permite să creați programe mari.

Vezi și

Note

  1. http://vit-prog.narod.ru/page/TRPP/section_1/subject_1.3.htm Arhivat 22 octombrie 2013 la Wayback Machine
  2. PROGRAMARE MODULARĂ - Dicționar vizual . Consultat la 18 aprilie 2013. Arhivat din original pe 19 aprilie 2013.
  3. 12 Leroy, 2000 .
  4. O scurtă istorie a FORTRAN
  5. Subprograme COBOL . Consultat la 23 octombrie 2009. Arhivat din original la 5 mai 2009.
  6. Niklaus Wirth. A Brief History of Modula and Lilith Arhivat 20 ianuarie 2007 la Wayback Machine , tradus din engleză. cu comentarii în textul lui R. Bogatyrev
  7. Istoria lui Modula-2 și Oberon . Consultat la 22 octombrie 2009. Arhivat din original la 1 iunie 2012.
  8. D. L. Parnas. Despre criteriile de utilizat în descompunerea sistemelor în module  //  Comunicațiile ACM. - 1972. - Vol. 15 , nr. 12 . - doi : 10.1145/361598.361623 .
  9. http://www.pascal.helpov.net/index/pascal_modules_programming Arhivat 21 octombrie 2013 la Wayback Machine
  10. Pavlovskaia Tatyana Alexandrovna. Limbajul de programare Pascal (curs de formare) (link indisponibil) . Consultat la 21 octombrie 2013. Arhivat din original pe 21 octombrie 2013. 

Literatură