Modulær programmering

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 14. februar 2022; checks kræver 2 redigeringer .

Modulær programmering  er organiseringen af ​​et program som en samling af små uafhængige blokke kaldet moduler, hvis struktur og adfærd adlyder visse regler. [1] Brugen af ​​modulær programmering gør det nemmere at teste programmet og finde fejl. Hardwareafhængige underopgaver kan adskilles strengt fra andre underopgaver, hvilket forbedrer portabiliteten af ​​de oprettede programmer.

Et modul  er et funktionelt komplet fragment af et program . På mange sprog (men på ingen måde nødvendigvis) udgives den som en separat fil med kildekode eller en navngivet kontinuerlig del af den. Nogle sprog tillader moduler at blive pakket .

Modularitet af programkode

Princippet om modularitet er et middel til at forenkle opgaven med at designe software (SW) og fordele udviklingsprocessen blandt udviklingsteams. Når softwaren opdeles i moduler, specificerer hvert modul den funktionalitet, det implementerer, samt links til andre moduler. [2] Bekvemmeligheden ved at bruge en modulær arkitektur ligger i evnen til at opdatere (erstatte) modulet uden at skulle ændre resten af ​​systemet.

Modulernes rolle kan spilles af datastrukturer , funktionsbiblioteker , klasser , tjenester og andre softwareenheder, der implementerer en vis funktionalitet og giver en grænseflade til den.

Programkode er ofte opdelt i flere filer, som hver er kompileret separat fra de andre. Denne modularitet af koden kan reducere rekompileringstiden betydeligt for ændringer foretaget på kun et lille antal kildefiler og forenkler teamudvikling . Det er også muligheden for at erstatte individuelle komponenter (såsom jar-filer , so eller dll-biblioteker) i det endelige softwareprodukt, uden at det er nødvendigt at genopbygge hele projektet (f.eks. udvikling af plugins til et allerede færdigt program).

En metode til at skrive modulære programmer er objektorienteret programmering . OOP giver en høj grad af modularitet gennem egenskaber som indkapsling , polymorfi og sen binding .

Modulopbygget system af moduler

På trods af det faktum, at modulær programmering ikke er bundet til detaljerne i et bestemt sprog (og selv i mangel af eksplicit støtte fra sproget kan bruges med tilstrækkelig disciplin fra programmørernes side), skubber de fleste sprog deres eget modulsystem til det øverste niveau, som om portering af modulsystemet fra et sprog til et andet ville være umuligt [3] .

I 2000 foreslog Xavier Leroy at gøre modulsystemer modulære, det vil sige parametriserede ved beskrivelsen af ​​en specifik kerne af sproget med sit eget typesystem [3] . Som et eksempel demonstrerede han en generaliseret implementering af ML-modulsproget (som det mest udviklede system af moduler kendt i øjeblikket) og eksempler på dets instansiering i det traditionelle ML -sprog for det og i C -sproget .

Leroys implementering er i sig selv bygget ved hjælp af ML-modulets sprog , nemlig som en funktion parametriseret af data om sprogets kerne og en beskrivelse af dets typekonsistenskontrolmekanisme . Det betyder, at når du skriver en compiler til et bestemt sprog, er det nok at beskrive kernen af ​​sproget og videregive det til den givne funktion (som en biblioteksfunktion) - resultatet vil være en compiler til at udvide et kendt sprog med et system af ML-moduler .

Historien om modulkonceptet

Historien om begrebet moduler som kompileringsenheder går tilbage til Fortran II og Cobol , det vil sige til slutningen af ​​1950'erne [4] [5] . I 1976 udkom en publikation, der udviklede begrebet modularitet - om Mesa , som blev udviklet hos Xerox PARC . I 1977 stiftede videnskabsmanden Niklaus Wirth nærmere bekendtskab med dette koncept og talte med udviklere hos Xerox PARC. [6] Disse ideer blev brugt af Wirth til at skabe Modula-2 sproget , som blev udgivet i 1977 [7] .

Begrebet "modul" i programmering begyndte at blive brugt i forbindelse med indførelsen af ​​modulære principper i oprettelsen af ​​programmer. I 1970'erne var et modul en procedure eller funktion skrevet efter bestemte regler. For eksempel: "modulet skal være enkelt, lukket (uafhængigt), synligt (fra 50 til 100 linjer), kun implementere én opgavefunktion, have ét input og ét outputpunkt."

D. Parnas ( David Parnas ) i 1972 var den første, der mere eller mindre klart formulerede et programmoduls hovedegenskaber : "For at skrive et modul, skal der være nok minimal viden om teksten i et andet." I overensstemmelse med definitionen kan et modul således være en hvilken som helst separat procedure (funktion) af både det laveste niveau i hierarkiet (implementeringsniveauet) og det højeste niveau, hvor kun opkald til andre modulprocedurer forekommer. [otte]

Således var Parnassus den første til at fremsætte begrebet information, der gemmer sig i programmering .  Imidlertid kunne de eneste syntaktiske konstruktioner, der fandtes i 70'ernes sprog, såsom procedure og funktion, ikke give pålidelig informationsskjul på grund af den udbredte brug af globale variabler.

Dette problem kunne kun løses ved at udvikle en ny syntaktisk konstruktion, der ikke er påvirket af globale variabler. Et sådant design blev skabt og kaldt et modul. I første omgang blev det antaget, at ved implementering af komplekse softwaresystemer, skulle modulet bruges sammen med procedurer og funktioner som en konstruktion, der kombinerer og pålideligt skjuler detaljerne i implementeringen af ​​en specifik delopgave.

Antallet af moduler i komplekset bør således bestemmes af dekomponeringen af ​​opgavesættet i uafhængige delopgaver. I ekstreme tilfælde kan et modul endda bruges til kun at omslutte én procedure i det, hvis det er nødvendigt, at den lokale handling, det udfører, garanteres at være uafhængig af indflydelsen fra andre dele af programmet under eventuelle ændringer.

For første gang blev en specialiseret syntaktisk konstruktion af modulet foreslået af N. Wirth i 1975 og inkluderet i hans nye sprog Modula. Hvor stærkt sprogets egenskaber ændrer sig, når modulmekanismen indføres, vidnes om af følgende bemærkning af N. Wirth, som han har fremsat om det senere Modula-2 sprog: "Moduler er det vigtigste træk, der adskiller Modula-2. sprog fra sin forgænger Pascal."

Implementering i programmeringssprog

Sprog, der formelt understøtter konceptet med moduler: IBM S/360 Assembler , Cobol , RPG , PL/1 , Ada , D , F  (engelsk) , Fortran , Haskell , Blitz BASIC , OCaml , Pascal , ML , Modula-2 , Oberon , Component Pascal , Zonnon , Erlang , Perl , Python og Ruby . IBM-systemet brugte "moduler" fra RPG- , Cobol- og CL -sprogene, da det blev programmeret i ILE-miljøet.

Modulær programmering kan udføres, selv når programmeringssprogets syntaks ikke understøtter eksplicit navngivning af moduler.

Softwareværktøjer kan oprette moduler af kildekode, der er repræsenteret som dele af grupper - bibliotekskomponenter - der er kompileret med et linkerprogram .

Standard Pascal giver ikke mekanismer til separat kompilering af programdele med deres efterfølgende samling før udførelse. Det er ganske forståeligt, at udviklerne af kommercielle Pascal-kompilere ønsker at inkludere værktøjer i sproget, der øger dets modularitet. [9]

Et modul i Pascal er en selvkompileret programenhed, der omfatter forskellige komponenter i deklarationsafsnittet (typer, konstanter, variabler, procedurer og funktioner) og muligvis nogle eksekverbare sætninger fra den initierende del. [ti]

Med hensyn til deres organisation og karakter af brug i programmet, er Pascal-moduler tæt på pakkemoduler (PACKAGE) i Ada-programmeringssproget. I dem, såvel som i Ada-pakker, er en vis "synlig" grænsefladedel eksplicit allokeret, hvor beskrivelser af globale typer, konstanter, variabler er koncentreret, og også titlerne på procedurer og funktioner er givet. Udseendet af objekter i grænsefladedelen gør dem tilgængelige for andre moduler og hovedprogrammet. Organerne af procedurer og funktioner er placeret i den eksekverbare del af modulet, som kan skjules for brugeren.

Moduler er et fantastisk værktøj til at udvikle applikationsbiblioteker og et kraftfuldt værktøj til modulær programmering. En vigtig egenskab ved moduler er, at compileren placerer deres programkode i et separat hukommelsessegment. Segmentlængden kan ikke overstige 64 KB, men antallet af samtidig anvendte moduler er kun begrænset af den tilgængelige hukommelse, som giver dig mulighed for at oprette store programmer.

Se også

Noter

  1. http://vit-prog.narod.ru/page/TRPP/section_1/subject_1.3.htm Arkiveret 22. oktober 2013 på Wayback Machine
  2. MODULAR PROGRAMMERING - Visuel ordbog . Hentet 18. april 2013. Arkiveret fra originalen 19. april 2013.
  3. 12 Leroy, 2000 .
  4. En kort historie om FORTRAN
  5. COBOL-underprogrammer . Hentet 23. oktober 2009. Arkiveret fra originalen 5. maj 2009.
  6. Niklaus Wirth. A Brief History of Modula and Lilith Arkiveret 20. januar 2007 på Wayback Machine , oversat fra engelsk. med kommentarer i teksten af ​​R. Bogatyrev
  7. Historien om Modula-2 og Oberon . Hentet 22. oktober 2009. Arkiveret fra originalen 1. juni 2012.
  8. D. L. Parnas. Om de kriterier, der skal bruges til at dekomponere systemer i moduler  //  Kommunikation af ACM. - 1972. - Bd. 15 , nr. 12 . - doi : 10.1145/361598.361623 .
  9. http://www.pascal.helpov.net/index/pascal_modules_programming Arkiveret 21. oktober 2013 på Wayback Machine
  10. Pavlovskaya Tatyana Alexandrovna. Pascal-programmeringssproget (uddannelseskursus) (ikke tilgængeligt link) . Hentet 21. oktober 2013. Arkiveret fra originalen 21. oktober 2013. 

Litteratur