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 .
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 .
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 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."
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.
Ordbøger og encyklopædier | |
---|---|
I bibliografiske kataloger |
|