Modulaarinen ohjelmointi

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 14. helmikuuta 2022 tarkistetusta versiosta . tarkastukset vaativat 2 muokkausta .

Modulaarinen ohjelmointi  on ohjelman järjestämistä kokoelmaksi pieniä itsenäisiä lohkoja, joita kutsutaan moduuleiksi ja joiden rakenne ja käyttäytyminen noudattavat tiettyjä sääntöjä. [1] Modulaarisen ohjelmoinnin käyttö helpottaa ohjelman testaamista ja virheiden etsimistä. Laitteistoriippuvaiset osatehtävät voidaan erottaa tiukasti muista alitehtävistä, mikä parantaa luotujen ohjelmien siirrettävyyttä.

Moduuli  on toiminnallisesti täydellinen ohjelman osa . Monilla kielillä (mutta ei suinkaan välttämättä) se julkaistaan ​​erillisenä tiedostona lähdekoodin tai sen nimetyn jatkuvan osan kanssa . Jotkut kielet sallivat moduulien pakkaamisen .

Ohjelmakoodin modulaarisuus

Modulaarisuusperiaate on keino yksinkertaistaa ohjelmistojen (SW) suunnittelua ja jakaa kehitysprosessia kehitystiimien kesken. Kun ohjelmisto jaetaan moduuleiksi, kukin moduuli määrittelee toteuttamansa toiminnot sekä linkit muihin moduuleihin. [2] Modulaarisen arkkitehtuurin käyttömukavuus piilee mahdollisuudessa päivittää (korvaa) moduuli ilman, että muuta järjestelmää tarvitsee muuttaa.

Moduulien roolia voivat olla tietorakenteet , funktiokirjastot , luokat , palvelut ja muut ohjelmistoyksiköt, jotka toteuttavat joitain toimintoja ja tarjoavat siihen käyttöliittymän .

Ohjelmakoodi on usein jaettu useisiin tiedostoihin, joista jokainen on käännetty erillään muista. Tämä koodin modulaarisuus voi merkittävästi lyhentää uudelleenkäännösaikaa vain muutamiin lähdetiedostoihin tehtyjen muutosten yhteydessä ja yksinkertaistaa tiimin kehittämistä . Se on myös mahdollisuus korvata lopullisen ohjelmistotuotteen yksittäisiä komponentteja (kuten jar-tiedostoja , so- tai dll-kirjastoja) ilman, että koko projektia tarvitsee rakentaa uudelleen (esimerkiksi lisäosien kehittäminen jo valmiille ohjelmalle).

Yksi tapa kirjoittaa modulaarisia ohjelmia on olio-ohjelmointi . OOP tarjoaa korkean modulaarisuuden ominaisuuksien, kuten kapseloinnin , polymorfismin ja myöhäisen sitoutumisen , ansiosta .

Modulaarinen moduulijärjestelmä

Huolimatta siitä, että modulaarista ohjelmointia ei ole sidottu tietyn kielen yksityiskohtiin (ja jopa ilman nimenomaista kielen tukea voidaan käyttää ohjelmoijien riittävällä kurinalaisella puolella), useimmat kielet työntävät omaa moduulijärjestelmäänsä. huipputasolle, ikään kuin moduulijärjestelmän siirtäminen kielestä toiselle olisi mahdotonta [3] .

Vuonna 2000 Xavier Leroy ehdotti moduulijärjestelmien tekemistä modulaariseksi, toisin sanoen parametrisoimaan kielen tietyn ytimen kuvauksella omalla tyyppijärjestelmällään [3] . Esimerkkinä hän esitteli ML-moduulikielen yleistetyn toteutuksen (tällä hetkellä tunnetuimpana moduulijärjestelmänä) ja esimerkkejä sen ilmentämisestä perinteiseen ML -kieleen ja C -kieleen .

Leroyn toteutus on itsessään rakennettu ML-moduulikielellä , nimittäin funktiona , joka parametroidaan kielen ydintä koskevilla tiedoilla ja sen tyyppiyhdenmukaisuuden tarkistusmekanismin kuvauksella . Tämä tarkoittaa, että kun kirjoitetaan kääntäjä tietylle kielelle, riittää kuvailla kielen ydin ja välittää se tietylle funktiolle (kirjastofunktiona) - tuloksena on kääntäjä tunnetun kielen laajentamiseksi järjestelmällä ML-moduuleista .

Moduulikonseptin historia

Moduulien käsitteen käännösyksiköinä historia juontaa juurensa Fortran II :een ja Coboliin eli 1950-luvun lopulle [4] [5] . Vuonna 1976 ilmestyi julkaisu, jossa kehitettiin modulaarisuuden käsite - Mesa , joka kehitettiin Xerox PARCissa . Vuonna 1977 tiedemies Niklaus Wirth tutustui tähän konseptiin yksityiskohtaisesti keskustelemalla Xerox PARCin kehittäjien kanssa. [6] Wirth käytti näitä ideoita luodakseen Modula-2- kielen , joka julkaistiin vuonna 1977 [7] .

Ohjelmoinnissa termiä "moduuli" alettiin käyttää modulaaristen periaatteiden käyttöönoton yhteydessä ohjelmien luomisessa. 1970-luvulla moduuli oli tiettyjen sääntöjen mukaan kirjoitettu menettely tai toiminto. Esimerkiksi: "moduulin tulee olla yksinkertainen, suljettu (riippumaton), näkyvä (50 - 100 riviä), toteuttaa vain yksi tehtävätoiminto, jolla on yksi tulo ja yksi lähtöpiste."

D. Parnas ( David Parnas ) vuonna 1972 muotoili ensimmäisenä enemmän tai vähemmän selkeästi ohjelmamoduulin pääominaisuudet : "Yhden moduulin kirjoittamiseen tarvitaan tarpeeksi vähän tietoa toisen tekstistä." Moduuli voisi siis määritelmän mukaan olla mikä tahansa erillinen proseduuri (toiminto) sekä hierarkian alimmalla tasolla (toteutustasolla) että ylimmällä tasolla, jolla tapahtuu vain kutsuja muille moduuliproseduureille. [kahdeksan]

Siten Parnassus esitti ensimmäisenä käsitteen ohjelmointiin piiloutuvasta tiedosta .  Ainoat 70-luvun kielillä olemassa olevat syntaktiset rakenteet, kuten menettely ja funktio, eivät kuitenkaan pystyneet tarjoamaan luotettavaa tiedon piilottamista globaalien muuttujien laajan käytön vuoksi.

Tämä ongelma voitaisiin ratkaista vain kehittämällä uusi syntaktinen rakenne, johon globaalit muuttujat eivät vaikuta. Tällainen suunnittelu luotiin ja sitä kutsuttiin moduuliksi. Aluksi oletettiin, että monimutkaisia ​​ohjelmistojärjestelmiä toteutettaessa moduulia tulisi käyttää prosessien ja toimintojen ohella rakenteena, joka yhdistää ja piilottaa luotettavasti tietyn alitehtävän toteutuksen yksityiskohdat.

Siten kompleksin moduulien lukumäärä tulisi määrittää jakamalla tehtäväjoukko itsenäisiksi osatehtäviksi. Äärimmäisessä tapauksessa moduulia voidaan käyttää jopa vain yhden proseduurin liittämiseen siihen, jos on välttämätöntä, että sen suorittama paikallinen toiminto on taatusti riippumaton ohjelman muiden osien vaikutuksista mahdollisissa muutoksissa.

N. Wirth ehdotti ensimmäistä kertaa moduulin syntaktista rakennetta vuonna 1975, ja se sisällytettiin uuteen kieleensä Modulaan. Kuinka voimakkaasti kielen ominaisuudet muuttuvat, kun moduulimekanismi otetaan käyttöön, osoittaa seuraava N. Wirthin huomautus myöhemmästä Modula-2-kielestä: "Moduulit ovat tärkein ominaisuus, joka erottaa Modula-2:n. kieli edeltäjästään Pascalista."

Toteutus ohjelmointikielillä

Kielet, jotka tukevat muodollisesti moduulikonseptia: IBM S/360 Assembler , Cobol , RPG , PL/1 , Ada , D , F  (englanti) , Fortran , Haskell , Blitz BASIC , OCaml , Pascal , ML , Modula-2 , Oberon , Component Pascal , Zonnon , Erlang , Perl , Python ja Ruby . IBM-järjestelmä käytti "moduuleja" RPG- , Cobol- ja CL -kielistä, kun se ohjelmoitiin ILE-ympäristössä.

Modulaarinen ohjelmointi voidaan tehdä myös silloin, kun ohjelmointikielen syntaksi ei tue moduulien nimeämistä.

Ohjelmistotyökalut voivat luoda lähdekoodimoduuleja, jotka esitetään ryhmien osina – kirjastokomponentteina – jotka on käännetty linkkiohjelmalla .

Vakio Pascal ei tarjoa mekanismeja ohjelman osien erilliseen kääntämiseen ja niiden myöhempään kokoonpanoon ennen suoritusta. On täysin ymmärrettävää, että kaupallisten Pascal-kääntäjien kehittäjät haluavat sisällyttää kieleen työkaluja, jotka lisäävät sen modulaarisuutta. [9]

Pascalin moduuli on itse käännetty ohjelmayksikkö, joka sisältää ilmoitusosion eri komponentteja (tyypit, vakiot, muuttujat, menettelyt ja funktiot) ja mahdollisesti aloitusosan suoritettavia käskyjä. [kymmenen]

Pascal-moduulit ovat organisaatioltaan ja ohjelman käytön luonteeltaan lähellä Ada-ohjelmointikielen pakettimoduuleja (PACKAGE). Niissä, kuten myös Ada-paketeissa, on eksplisiittisesti allokoitu jokin "näkyvä" käyttöliittymäosa, johon on keskitetty globaalien tyyppien, vakioiden, muuttujien kuvaukset sekä myös proseduurien ja funktioiden otsikot. Objektien ulkonäkö käyttöliittymäosassa tekee ne muiden moduulien ja pääohjelman käytettävissä. Proseduurien ja funktioiden rungot sijaitsevat moduulin suoritettavassa osassa, joka voidaan piilottaa käyttäjältä.

Moduulit ovat loistava työkalu sovelluskirjastojen kehittämiseen ja tehokas työkalu modulaariseen ohjelmointiin. Tärkeä moduulien ominaisuus on, että kääntäjä sijoittaa niiden ohjelmakoodin erilliseen muistisegmenttiin. Segmentin pituus ei saa ylittää 64 kilotavua, mutta samanaikaisesti käytettävien moduulien määrää rajoittaa vain käytettävissä oleva muisti, jonka avulla voit luoda suuria ohjelmia.

Katso myös

Muistiinpanot

  1. http://vit-prog.narod.ru/page/TRPP/section_1/subject_1.3.htm Arkistoitu 22. lokakuuta 2013 Wayback Machinessa
  2. MODULAARINEN OHJELMOINTI - Visuaalinen sanakirja . Haettu 18. huhtikuuta 2013. Arkistoitu alkuperäisestä 19. huhtikuuta 2013.
  3. 12 Leroy, 2000 .
  4. FORTRANin lyhyt historia
  5. COBOL-aliohjelmat . Haettu 23. lokakuuta 2009. Arkistoitu alkuperäisestä 5. toukokuuta 2009.
  6. Niklaus Wirth. Modulan ja Lilithin lyhyt historia Arkistoitu 20. tammikuuta 2007 Wayback Machinessa , käännetty englannista. R. Bogatyrevin tekstissä olevilla kommenteilla
  7. Modula-2:n ja Oberonin historia . Haettu 22. lokakuuta 2009. Arkistoitu alkuperäisestä 1. kesäkuuta 2012.
  8. D. L. Parnas. Kriteereistä, joita käytetään järjestelmien jakamisessa moduuleiksi  //  ACM:n tietoliikenne. - 1972. - Voi. 15 , ei. 12 . - doi : 10.1145/361598.361623 .
  9. http://www.pascal.helpov.net/index/pascal_modules_programming Arkistoitu 21. lokakuuta 2013 Wayback Machinessa
  10. Pavlovskaja Tatjana Aleksandrovna. Pascal-ohjelmointikieli (koulutuskurssi) (linkki ei saatavilla) . Haettu 21. lokakuuta 2013. Arkistoitu alkuperäisestä 21. lokakuuta 2013. 

Kirjallisuus