A moduláris programozás egy program felépítése kis független blokkok, úgynevezett modulok gyűjteményeként, amelyek felépítése és viselkedése bizonyos szabályoknak megfelel. [1] A moduláris programozás használata megkönnyíti a program tesztelését és a hibakeresést. A hardverfüggő részfeladatok szigorúan elkülöníthetők a többi részfeladattól, ami javítja a létrehozott programok hordozhatóságát.
A modul egy program funkcionálisan teljes töredéke . Sok nyelven (de semmiképpen sem feltétlenül) külön fájlként adják ki forráskóddal vagy annak egy megnevezett folyamatos részével. Egyes nyelvek lehetővé teszik a modulok becsomagolását .
A modularitás elve a szoftvertervezés (SW) feladatának leegyszerűsítését és a fejlesztési folyamat fejlesztőcsapatok közötti elosztását jelenti. Amikor a szoftvert modulokra bontja, mindegyik modul meghatározza az általa megvalósított funkcionalitást, valamint hivatkozásokat más modulokra. [2] A moduláris architektúra használatának kényelme abban rejlik, hogy frissíteni (cserélni) a modult anélkül, hogy a rendszer többi részét módosítani kellene.
A modulok szerepét adatstruktúrák , függvénykönyvtárak , osztályok , szolgáltatások és egyéb szoftveregységek tölthetik be, amelyek valamilyen funkcionalitást valósítanak meg és interfészt biztosítanak hozzá.
A programkód gyakran több fájlra van felosztva, amelyek mindegyikét külön fordítják le a többitől. A kódnak ez a modularitása jelentősen csökkentheti az újrafordítási időt a csak kis számú forrásfájlon végrehajtott módosítások esetén, és leegyszerűsíti a csapatfejlesztést . Lehetőség van a végső szoftvertermék egyes összetevőinek (például jar fájlok , so vagy dll könyvtárak) cseréjére is anélkül, hogy a teljes projektet újra kellene építeni (például bővítményeket kell fejleszteni egy már kész programhoz).
A moduláris programok írásának egyik módja az objektumorientált programozás . Az OOP nagyfokú modularitást biztosít olyan tulajdonságok révén, mint a tokozás , a polimorfizmus és a késői kötés .
Annak ellenére, hogy a moduláris programozás nem kötődik egy adott nyelv részleteihez (és még a nyelv kifejezett támogatása hiányában is a programozók kellő fegyelmezettségével használható), a legtöbb nyelv saját modulrendszerét tolja ki. a legfelső szintre, mintha a modulrendszer áthelyezése egyik nyelvről a másikra lehetetlen lenne [3] .
Xavier Leroy 2000- ben javasolta a modulrendszerek modulárissá tételét, azaz paraméterezését a nyelv meghatározott magjának leírásával, saját típusrendszerrel [3] . Példaként bemutatta az ML modulnyelv általánosított megvalósítását (mint a jelenleg ismert legfejlettebb modulrendszert), valamint példákat annak a hagyományos ML nyelvre, illetve a C nyelvre való példányosítására .
A Leroy implementációja maga az ML modulnyelv felhasználásával épül fel , nevezetesen a nyelv magjáról szóló adatokkal és a típuskonzisztencia -ellenőrző mechanizmus leírásával paraméterezett funktorként . Ez azt jelenti, hogy amikor egy fordítóprogramot írunk egy adott nyelvhez, elég leírni a nyelv magját, és átadni az adott funktornak (mint könyvtári függvény) - az eredmény egy fordító lesz egy ismert nyelv rendszerrel történő kiterjesztésére. az ML modulok közül .
A modulok, mint fordítási egységek fogalmának története a Fortran II -ig és a Cobol -ig nyúlik vissza , vagyis az 1950-es évek végére [4] [5] . 1976-ban megjelent egy kiadvány, amely kidolgozta a modularitás fogalmát - a Mesa , amelyet a Xerox PARC fejlesztett ki . 1977-ben Niklaus Wirth tudós részletesen megismerkedett ezzel a koncepcióval a Xerox PARC fejlesztőivel beszélgetve. [6] Ezeket az ötleteket használta Wirth a Modula-2 nyelv létrehozásához , amelyet 1977-ben adtak ki [7] .
A "modul" kifejezést a programozásban a moduláris elvek bevezetése kapcsán kezdték használni a programok létrehozásában. Az 1970-es években a modul bizonyos szabályok szerint megírt eljárás vagy függvény volt. Például: "a modul legyen egyszerű, zárt (független), látható (50-100 soros), csak egy feladatfunkciót valósít meg, egy bemeneti és egy kimeneti ponttal."
D. Parnas ( David Parnas ) 1972-ben volt az első, aki többé-kevésbé egyértelműen megfogalmazta egy programmodul főbb tulajdonságait : „Egy modul megírásához elegendő minimális tudásra van szükség a másik szövegéről.” Így a definíció szerint egy modul lehet a hierarchia legalsó szintjének (implementációs szintnek) és a legmagasabb szintjének bármely különálló eljárása (funkciója), amelyen csak más moduleljárások hívásai fordulnak elő. [nyolc]
Így a Parnassus volt az első, aki felvetette a programozásban rejtőzködő információ fogalmát . A 70-es évek nyelveiben létező egyetlen szintaktikai konstrukciók, mint például az eljárás és a függvény azonban a globális változók széles körben elterjedt használata miatt nem tudtak megbízható információrejteni.
Ezt a problémát csak egy új szintaktikai konstrukció kidolgozásával lehetne megoldani, amelyet nem befolyásolnak a globális változók. Egy ilyen kialakítást készítettek, és modulnak nevezték el. Kezdetben azt feltételezték, hogy az összetett szoftverrendszerek implementálásakor a modult eljárásokkal és funkciókkal együtt olyan konstrukcióként kell használni, amely egyesíti és megbízhatóan elrejti egy adott részfeladat megvalósításának részleteit.
Így a komplex modulok számát a feladatsor független részfeladatokra bontásával kell meghatározni. Extrém esetben akár csak egy eljárást is be lehet zárni egy modulba, ha szükséges, hogy az általa végrehajtott helyi művelet minden változtatás mellett garantáltan független legyen a program egyéb részeinek befolyásától.
Első alkalommal N. Wirth javasolta a modul speciális szintaktikai felépítését 1975-ben, és beépítette új nyelvű Modulába. Hogy mennyire erősen változnak a nyelv tulajdonságai a modulmechanizmus bevezetésekor, azt bizonyítja N. Wirth következő megjegyzése, amelyet a későbbi Modula-2 nyelvről tett: "A modulok a legfontosabb jellemzők, amelyek megkülönböztetik a Modula-2-t. nyelve elődjétől, Pascaltól."
A modulok koncepcióját formálisan támogató nyelvek: IBM S/360 Assembler , Cobol , RPG , PL/1 , Ada , D , F (angol) , Fortran , Haskell , Blitz BASIC , OCaml , Pascal , ML , Modula-2 , Oberon , Component Pascal , Zonnon , Erlang , Perl , Python és Ruby . Az IBM rendszer az RPG , Cobol és CL nyelvek "moduljait" használta, amikor az ILE környezetben programozták.
A moduláris programozás akkor is elvégezhető, ha a programozási nyelv szintaxisa nem támogatja a modulok kifejezett elnevezését.
A szoftvereszközök olyan forráskód-modulokat hozhatnak létre, amelyek csoportok – könyvtári komponensek – részeként jelennek meg, és amelyeket egy linker programmal fordítanak le .
A szabványos Pascal nem biztosít mechanizmusokat a programrészek külön fordítására, majd a végrehajtás előtti összeállításukra. Teljesen érthető, hogy a kereskedelmi Pascal fordítók fejlesztői olyan eszközöket szeretnének beletenni a nyelvbe, amelyek növelik a modularitást. [9]
A Pascal modul egy önállóan összeállított programegység, amely tartalmazza a deklarációs szakasz különféle összetevőit (típusok, konstansok, változók, eljárások és függvények), és esetleg a kezdeményező rész néhány végrehajtható utasítását. [tíz]
A Pascal modulok felépítésüket és a programban való felhasználás jellegüket tekintve közel állnak az Ada programozási nyelv csomagmoduljaihoz (PACKAGE). Ezekben és az Ada csomagokban is kifejezetten le van foglalva valamilyen "látható" interfész rész, amelyben a globális típusok, konstansok, változók leírásai koncentrálódnak, valamint az eljárások és függvények címei is megadva vannak. Az objektumok megjelenése az interfész részben elérhetővé teszi őket más modulok és a fő program számára. Az eljárások és függvények törzsei a modul végrehajtható részében helyezkednek el, amely elrejthető a felhasználó elől.
A modulok nagyszerű eszközt jelentenek az alkalmazáskönyvtárak fejlesztéséhez és hatékony eszközt a moduláris programozáshoz. A modulok fontos jellemzője, hogy a fordító a programkódjukat külön memóriaszegmensben helyezi el. A szegmens hossza nem haladhatja meg a 64 KB-ot, de az egyidejűleg használt modulok számát csak a rendelkezésre álló memória korlátozza, ami lehetővé teszi nagy programok létrehozását.
Szótárak és enciklopédiák | |
---|---|
Bibliográfiai katalógusokban |
|