Metode modularnog programiranja na str. Modularno programiranje. Koncept modularnog programiranja

Modularno programiranje je način programiranja u kojem je cijeli program razbijen na grupu komponenti koje se nazivaju moduli, od kojih svaka ima svoju kontroliranu veličinu, jasnu svrhu i detaljan interfejs sa vanjskim okruženjem. Jedina alternativa modularnosti je monolitan program, što je, naravno, nezgodno. Stoga je najzanimljivije pitanje u proučavanju modularnosti definicija kriterija za podjelu na module.

Uvijek mi je korisno učiti alternativne metode programiranje oličeno na drugim jezicima. John Hayes radi u Laboratoriji za primijenjenu fiziku na Univerzitetu Johns Hopkins. Gotovo dvije decenije razvija ugrađene sisteme za svemirske letjelice.

Modularno programiranje. stil programiranja koji kompletan program je podijeljen u skup komponenti koje se nazivaju moduli, od kojih svaka ima veličinu kojom se može upravljati, ima dobro definiranu svrhu i ima dobro definirano sučelje za korištenje drugih modula. Budući da je jedina alternativa - potpuno monolitni programi - neodrživa, stvar nije u tome da li programi treba da budu modularni, već koji kriterijumi treba da se koriste za njihovo dekomponovanje u module. Ovo je pokrenuo David Parnassus, koji je sugerirao da je jedan od glavnih kriterija taj da se informacije kriju.

Koncepti modularnog programiranja. Modularno programiranje se zasniva na tri glavna koncepta:

Princip uskraćivanja informacija Parnas. Svaka komponenta skriva jednu dizajnersku odluku, odnosno modul služi za skrivanje informacija. Pristup dizajnu programa je da se prvo razvije lista dizajnerskih odluka koje je posebno teško donijeti ili će se vjerovatno promijeniti. Zatim se definišu zasebni moduli od kojih svaki implementira jedno od navedenih rješenja.

Prije toga, dekompozicija se obično izvodila na ad hoc osnovi, ili ponekad na osnovu "koraka" ukupne obrade koju je program trebao izvršiti, a dobijale su se samo marginalne koristi. Nedavno je mnogo pažnje posvećeno dekompoziciji na osnovu upotrebe apstraktnih tipova podataka i upotrebe objekata ili orijentacije objekata; takva dekompozicija može ostati u skladu sa principima skrivanja informacija.

Saznajte više o stilovima citiranja. Stranica vam pruža mogućnost povezivanja na referentne unose i članke u skladu sa zajedničkim stilovima Udruženja savremeni jezik, The Chicago Guide to Style i American Psychological Association. Zatim kopirajte i zalijepite tekst u svoju bibliografiju ili listu citiranih djela. Budući da svaki stil ima svoje nijanse oblikovanja koje se mijenjaju tokom vremena, a nisu sve informacije dostupne za svaki link ili članak, stranica ne može jamčiti da će svaki citat koji kreira.

Cowanov aksiom modularnosti. Modul je nezavisna programska jedinica koja služi za obavljanje neke specifične funkcije programa i za komunikaciju sa ostatkom programa. Softverska jedinica mora ispunjavati sljedeće uslove:

organizacija blokova, tj. mogućnost pozivanja programske jedinice iz blokova bilo kojeg stepena ugniježđenja;

Stoga je najbolje koristiti citate web stranice kao početnu tačku prije nego što provjerite stil u odnosu na vašu školu ili publikaciju i najnovije informacije dostupne na tim stranicama. Stoga se obavezno pridržavajte ovih smjernica kada uređujete svoju bibliografiju ili listu citiranih djela. Međutim, često je važan datum pretrage. . Tokom godina, naglasak u razvoju softvera se pomjerio sa razvoja procedura na organiziranje podataka. Između ostalog, ovo odražava povećanje veličine programa.

sintaksička izolacija, odnosno isticanje modula u tekstu sintaksičkim elementima;

semantička nezavisnost, odnosno nezavisnost od mesta pozivanja programske jedinice;

općenitost podataka, odnosno prisutnost vlastitih podataka koji se pohranjuju uz svaki pristup;

potpunost definicije, odnosno nezavisnost programske jedinice.

Skup povezanih procedura sa podacima kojima upravljaju često se naziva modulom. Paradigma programiranja postaje ovakva. Odlučite koje module želite; Podijelite program tako da podaci budu skriveni unutar modula. Ova paradigma je poznata i kao princip skrivanja podataka. Tamo gdje ne postoji grupisanje procedura sa srodnim podacima, dovoljan je proceduralni stil programiranja. Osim toga, metode za razvoj "dobrih procedura" sada se primjenjuju na svaku proceduru u modulu. Najčešći primjer modula je definicija steka.

programiranje sklopa Tseytin. Moduli su blokovi softvera od kojih se program gradi. Postoje tri osnovna preduslova za modularno programiranje:

· nastojanje da se izdvoji samostalna jedinica programskog znanja. U idealnom slučaju, svaka ideja (algoritam) treba biti uokvirena kao modul;

Minimiziranje broja proslijeđenih parametara

Ovo su glavna pitanja koja treba riješiti. Uvjerite se da je prikazu steka dostupno samo preko ovog korisničkog sučelja. Provjerite je li stek inicijaliziran prije prve upotrebe. . Druge upotrebe ovih imena neće ometati niti izazvati zabunu.

Definicija steka može se dati u posebno kompajliranom dijelu programa. Pošto su podaci samo jedna od stvari koje se mogu „skriti“, pojam skrivanja podataka trivijalno se proširuje na pojam skrivanja informacija; tj. imena funkcija, tipova itd. također može biti lokalno za modul.

· potreba za organizacionom podjelom velikih razvoja;

Mogućnost paralelnog izvođenja modula (u kontekstu paralelnog programiranja).

Definicije i primjeri modula. Evo nekoliko dodatnih definicija modula.

· Modul je zbirka komandi kojoj se može pristupiti po imenu.

Sljedeći odjeljci koriste različite stekove da bi ilustrirali različite stilove programiranja. Obično stavljamo deklaracije koje specificiraju sučelje za modul u datoteku pod nazivom koja označava njegovu namjeravanu upotrebu. Grafički fragmenti programa mogu se prikazati na sljedeći način. Odvojena kompilacija je problem u svim stvarnim programima. Strogo govoreći, upotreba zasebne kompilacije nije pitanje jezika, već je pitanje kako najbolje koristiti određenu implementaciju jezika.

Međutim, ovo je od velike praktične važnosti. Najbolji pristup je maksimizirati modularnost, logički predstaviti modularnost jezičkih karakteristika, a zatim koristiti fizičku modularnost kroz datoteke za efikasnu odvojenu kompilaciju. Kada je program dizajniran kao skup modula, ti moduli moraju uzeti u obzir rukovanje greškama. Koji modul je odgovoran za rukovanje greškama? Često modul koji detektuje grešku ne zna šta da preduzme. Akcija oporavka ovisi o modulu koji je pozvao operaciju, a ne modulu koji je naišao na grešku dok je pokušavao izvršiti operaciju.

· Modul je skup programskih izraza koji ima granične elemente i identifikator (moguće agregat).

Funkcionalna specifikacija modula treba da uključuje:

sintaksičku specifikaciju njegovih ulaza, koja bi trebala omogućiti izgradnju sintaksički ispravne reference na njega u korištenom programskom jeziku;

Kako programi rastu, a posebno kada se biblioteke široko koriste, važni su standardi za rukovanje greškama. Da bi to učinila, implementacija će ponovo izgraditi stek poziva funkcije prema potrebi da se vrati u kontekst tog pozivaoca. Dakle, bacanje djeluje kao povratak na više nivoa.

Korištenje mehanizama za rukovanje izuzecima može učiniti rukovanje greškama redovnijim i čitljivijim. Razvoj softver je vrlo anestezijska faza ciklusa razvoja softvera. Ljepota srca, vještina uma i praktično razmišljanje pomiješani su sa sistemskim ciljem implementacije dizajna.

· opis semantike funkcija koje izvršava modul za svaki od njegovih ulaza.

Vrste modula. Postoje tri glavne vrste modula:

1) "Mali" (funkcionalni) moduli koji implementiraju, po pravilu, jednu određenu funkciju. Osnovni i najjednostavniji modul u gotovo svim programskim jezicima je procedura ili funkcija.

Proces dizajna nije jednostavan, već složen, glomazan i frustrirajući s mnogo krivina na putu uspješnog dizajna. Strukturirano programiranje Modularni dizajn odozgo prema dolje Dizajn odozdo prema gore Dizajniranje objektno orijentiranog programiranja. Svrha razvoja Programa je.

Zamjena starog sistema: Novi sistem se koristi za zamjenu starog sistema jer su troškovi održavanja visoki u starom sistemu i nizak nivo efikasnost. Potreba za organizacijom: novi sistem se razvija i instalira na zahtjev organizacija i radnih grupa.

2) "Prosjek" (informativno) moduli koji po pravilu implementiraju više operacija ili funkcija na istoj strukturi podataka (informacijski objekt), koja se izvan ovog modula smatra nepoznatom. Primjeri "srednjih" modula u programskim jezicima:

a) zadaci u programskom jeziku Ada;

b) klaster u CLU programskom jeziku;

Materijal sa PIE.Wiki

Produktivnost: Instaliran je novi sistem za poboljšanje produktivnosti kompanije ili organizacije. Konkurencija: Novi sistem se odnosi i na status. U doba žestoke konkurencije, ako se organizacija ne može nositi s modernom tehnologijom, ne može se suočiti s konkurencijom.

Održavanje: Potreban je novi sistem za održavanje statusa organizacije. Ovo je prvi pristup programiranju koji se široko koristio na početku. Profesor Edsberg Wiebe Dijkstra motiviše termin "strukturirano programiranje". Često se na njega gleda kao na "lako" programiranje jer ga programeri izbjegavaju. Program je podijeljen u nekoliko osnovnih struktura. Ove strukture se nazivaju građevni blokovi.

c) klase programskih jezika C++ i Java.

3) "Veliki" (logički) moduli, kombinujući skup "srednjih" ili "malih" modula. Primjeri "velikih" modula u programskim jezicima:

a) modul u programskom jeziku Modula-2;

b) paketi u programskim jezicima Ada i Java.

Kit karakteristike modula predložio Myers [Myers 1980]. Sastoji se od sljedećih dizajnerskih karakteristika:

Ovaj modul sadrži programske izraze jedan po jedan. Ovo je vrlo jednostavan strukturirani modul za programiranje. Izbor ili uslovna struktura: Program ima niz uslova, od kojih se bira ispravan uslov za rešavanje problema. Ponavljanje ili struktura petlje: proces ponavljanja ili ponavljanja operacija ponavljanja bloka nekoliko puta kada se uvjet podudara, ako se uvjet ne podudara, proces petlje se završava.

Problem se može lako opisati pomoću dijagrama toka, a dijagram toka se može lako kodirati u program jer je priroda metode slična dijagramu toka. Testiranje i otklanjanje grešaka je jednostavno jer se testiranje i otklanjanje grešaka može obaviti na modularan način. Lako se modificira i održava.

  • Program se lako kodira pomoću modula.
  • Niska cijena razvoja programa.
  • Veće performanse, kvalitetniji softverski proizvodi.
Potrebno je više memorijskog prostora.

1) veličina modula;

U modulu mora postojati 7 (+/-2) konstrukcija (na primjer, iskazi za funkcije ili funkcije za paket). Ovaj broj je uzet na osnovu ideja psihologa o prosječnom baferu radne memorije čovjeka. Simboličke slike u ljudskom mozgu kombinuju se u "komadiće" - skupove činjenica i odnosa između njih, memorisane i izvučene kao celina. U svakom trenutku, osoba može obraditi najviše 7 komada.

Kada je broj modula izvan određenog raspona, performanse programa nisu zadovoljavajuće. Kada proučavamo filozofiju obrazovanja, koncept modulacije se može razumjeti bez ikakve dvosmislenosti. René Descartes iz Francuske dao je koncept rekonstrukcije našeg znanja po komadima. Ovaj komad nije ništa drugo nego kontekstni modul za programiranje modema.

U modularnom pristupu, veliki program je podijeljen na mnogo malih, diskretnih komponenti koje se nazivaju moduli. Programski jezik koristi različite nazive za ovo. To je logički odvojiv dio programa. Moduli su nezavisni i lako upravljivi. Generalno, moduli sa 20-50 linija smatraju se dobrim modulima, kako se linije povećavaju, kontrola modula postaje teška.

Modul (funkcija) ne smije prelaziti 60 linija. Kao rezultat toga, može se postaviti na jednu stranicu ispisa ili lako pogledati na ekranu monitora.

2) snagu (povezivost) modula;

Postoji hipoteza globalnih podataka, koja kaže da su globalni podaci štetni i opasni. Ideja globalnih podataka diskredituje samu sebe na isti način kao i ideja goto operatora. Lokalitet podataka olakšava čitanje i razumijevanje modula, kao i njihovo lako uklanjanje iz programa.

Moduli se otklanjaju grešaka i testiraju odvojeno i kombinuju da bi se stvorio sistem. Gornji modul se naziva root ili boss modul, koji naplaćuje upravljanje svim podmodulima od vrha do dna. Upravljanje je odozgo prema dolje, a ne odozdo prema gore. Evaluacija simulacije naziva se povezivanje i povezanost. Kombinacija modula označava broj relacija između modula i odnos modula, što pokazuje odnos između podataka ili elemenata unutar modula.

Veliki program je podijeljen na mnogo malih modula ili potprograma ili funkcija ili procedura od vrha do dna. Prvo, program za nadzor je identificiran za kontrolu drugih pomoćnih modula. Glavni moduli su podijeljeni na podmodule, podmoduli na podmodule. Dekompozicija modula se nastavlja kada se ne postigne željeni nivo modula.

Povezivost (snaga) modul (kohezija) - mjera nezavisnosti njegovih dijelova. Što je veća povezanost modula - to bolje, više veza u odnosu na ostatak programa skriva u sebi. U nastavku se mogu razlikovati vrste povezivanja.

funkcionalan povezanost. Modul sa funkcionalnom vezom implementira jednu specifičnu funkciju i ne može se podijeliti na 2 modula s istim tipom povezivanja.

Najprije se testira gornji modul, a zatim se podmoduli spajaju jedan po jedan i testiraju. Ovim pristupom dizajn počinje od dna i kreće se u koracima prema gore. Prvo se razvijaju i testiraju moduli donjeg sloja, razvijaju se moduli drugog nivoa i kombinuju sa nižim slojem, a moduli se kombinuju. Razvoj softvera ne koristi samo metode odozgo prema dolje ili odozdo prema gore. Mnogi dizajneri preporučuju hibridni tip pristupa, u kojem se koriste pristupi odozgo prema dolje i odozdo prema gore. Dakle, dizajn i testiranje su se odvijali odozdo prema gore. . U objektno orijentiranom programiranju, program je podijeljen na skup objekata.

dosljedan povezanost. Modul s takvom vezom može se podijeliti na uzastopne dijelove koji obavljaju nezavisne funkcije, ali zajednički implementiraju jednu funkciju. Na primjer, isti modul se može koristiti prvo za evaluaciju, a zatim za obradu podataka.

Informativno(komunikativna) povezanost. Informacijski spojeni modul je modul koji izvodi više operacija ili funkcija na istoj strukturi podataka (informacijski objekt) koji se smatra nepoznatim izvan tog modula. Ova informacijska povezanost se koristi za implementaciju apstraktnih tipova podataka.

Obratimo pažnju na činjenicu da su sredstva za specificiranje informacijski jakih modula bila odsutna u ranim programskim jezicima (na primjer, FORTRAN, pa čak i u originalnoj verziji Pascal jezik). I tek kasnije, u programskom jeziku Ada, pojavio se paket - sredstvo za određivanje informacijski izdržljivog modula.

3) spajanje modula sa drugim modulima;

Kvačilo(coupling) - mjera relativne nezavisnosti modula od drugih modula. Nezavisni moduli se mogu modificirati bez modifikacije drugih modula. Što je slabija sprega modula, to bolje. Razmislite različite vrste kvačilo.

Nezavisna moduli su idealno kućište. Moduli ne znaju ništa jedan o drugom. Možete organizirati interakciju takvih modula tako što ćete znati njihov interfejs i prema tome preusmjeriti izlazne podatke jednog modula na ulaz drugog modula. Postizanje takvog spajanja je teško i nepotrebno, jer je spajanje podataka (parametarsko spajanje) prilično dobro.

Kvačilo prema(parametrijski) je konkatenacija, kada se podaci prosljeđuju modulu kao vrijednosti njegovih parametara, ili kao rezultat njegovog poziva drugom modulu za izračunavanje neke funkcije. Ova vrsta ulančavanja implementirana je u programskim jezicima kada se govori o funkcijama (procedurama). Dvije varijante ove veze određene su prirodom podataka.

· Lanac na jednostavnim elementima podataka.

· Ulančavanje po strukturi podataka. U ovom slučaju, oba modula moraju biti svjesna interne strukture podataka.

4) rutina (idempotencija, nezavisnost od prethodnih poziva) modula.

rutina- ovo je nezavisnost modula od prethodnih poziva (iz istorije). Pozvaćemo rutinu modula ako rezultat njenog rada zavisi samo od broja prosledjenih parametara (a ne od broja poziva).

Modul bi u većini slučajeva trebao biti rutinski, ali postoje i slučajevi u kojima bi modul trebao čuvati povijest. Pri izboru stepena rutine modula koriste se tri preporuke.

· U većini slučajeva radimo modulsku rutinu, tj. nezavisno od prethodnih poziva.

· Module zavisne od historije treba koristiti samo kada je to potrebno za ulančavanje podataka.

· Specifikacija modula koji zavisi od istorije treba jasno da artikuliše ovu zavisnost tako da korisnici mogu predvideti ponašanje takvog modula.

Modularno programiranje radi po principu "zavadi pa vladaj". Vrijedi razvrstati.

Modularno programiranje uključuje organiziranje programa kao zbirke nezavisnih blokova. mala velicina, koji se obično nazivaju modulima, čije su ponašanje i struktura potpuno podređeni dobro definiranim principima. Vrijedi razdvojiti upotrebu koncepta "modula" kada se misli na sintaksičko programiranje i kada se radi o jedinici cijepanja velikog programa na nekoliko blokova koji se mogu implementirati kako u obliku procedura tako i u primjeni modularnog programiranja. moguće je pojednostaviti i blagovremeno otkriti greške. Možete strogo odvojiti hardverski zavisne zadatke od drugih podzadataka, što će poboljšati mobilnost kreiranih programa. Vremenski kritični moduli mogu se preurediti zasebno, što uvelike pojednostavljuje proces i čini efikasnost mnogo većom. Osim toga, modularno programiranje je mnogo lakše razumjeti jer se moduli mogu efikasno koristiti kao gradivni blokovi u drugim programima.

Sam izraz "modul" počeo se koristiti u programiranju u vezi sa uvođenjem modularnog principa pri pisanju programa. Sedamdesetih godina, modul je bio funkcija ili procedura koja je napisana prema određenim pravilima. Pošto u to vreme nije bilo opšte priznatih zahteva, svaka procedura čija je veličina bila do pedeset redova nazivala se modulom. Parnas je formirao prve specifične zahtjeve za modul: „Za formiranje jednog modula trebalo bi biti dovoljno minimalno znanje o sadržaju drugog“. Ispostavilo se da je Parnas prvi formirao koncept skrivanja informacija u programiranju. Njegova definicija nas dovodi do činjenice da se svaka posebna procedura, i najniži i najviši nivo hijerarhije, može nazvati modulom. Pouzdano skrivanje informacija nije se moglo osigurati korištenjem konstrukata koji su postojali u to vrijeme, jer su bili podložni jakom utjecaju globalnih varijabli, a njihovo ponašanje u složenim programima je vrlo teško predvidjeti. Bilo je potrebno napraviti konstrukt izolovan od ovih varijabli. Upravo je ona nazvana modulom, a na njegovoj osnovi je rođeno modularno programiranje.

U početku se pretpostavljalo da se implementacija složenih softverskih sistema može izvesti pomoću modula zajedno sa funkcijama i procedurama kao konstruktom koji kombinuje i skriva detalje implementacije određenog podzadatka. Ali Turbo Pascal nije u potpunosti implementirao modularni princip programiranja. Ovom jeziku u potpunosti nedostaje podrška za interne module, uvoz nije implementiran dovoljno fleksibilno, jer ne dozvoljava uvoz objekata iz nekih drugih modula. Kombinovani uticaj ove okolnosti sa činjenicom da sa širenjem personalni računari krug programera značajno se proširio, što je smanjilo prosječan nivo teorijskog znanja, dovelo do toga da su se pri razvoju aplikacija koristili moduli kao sredstvo za kreiranje problematičnih biblioteka funkcija i procedura. Samo kvalifikovani programeri su koristili punu snagu ove jezičke konstrukcije za operacije na strukturiranju svih objekata.

Ako Pascal module posmatrate sa stanovišta programera, onda njihov broj treba odrediti dekomponovanjem zadatka na niz podzadataka koji su nezavisni jedan od drugog. U ekstremnom slučaju, modul se može koristiti da se u njega ugradi samo jedna procedura, ako se traži da lokalna radnja koju izvodi bude potpuno nezavisna od utjecaja drugih dijelova programa kada se izvrše promjene u kodu projekta.