380 likes | 496 Views
2.6 Modulaarisuus. Modulaarisuus tarkoittaa algoritmien suunnittelussa sitä, että algoritmi jaetaan pieniksi hyvin määritellyiksi paloiksi eli moduuleiksi. Tässä jakamisessa voidaan käyttää asteittaisen tarkentamisen menetelmää. Modulaarisuus-käsitteen
E N D
2.6 Modulaarisuus Modulaarisuus tarkoittaa algoritmien suunnittelussa sitä, että algoritmi jaetaan pieniksi hyvin määritellyiksi paloiksi eli moduuleiksi. Tässä jakamisessa voidaan käyttää asteittaisen tarkentamisen menetelmää. Modulaarisuus-käsitteen ymmärtäminen on osa suunnittelumenetelmän ymmärtämistä, eikä siten välttämättä liity mihinkään ohjelmointikieleen.
2.6.1. Abstraktiot Uusia asiakokonaisuus: puutteellinen käsitteellinen malli • Luotu malli = abstraktio • Mallin tuottaminen = abstrahointi • Abstraktio on siis tarkasteltavan asianyksin- kertainen ja (usein) epätarkka malli. • Abtraktion tulee kuitenkin olla riittävä, mutta ei välttämättä täydellinen kuvaus tarkasteltavan asian tai ilmiön rakenteesta, ominaisuuksista ja käyttäytymisestä.
2.6.1. Abstraktiot … Abstraktiivinen ajattelu = kyky nähdä metsä puilta.
2.6.1. Abstraktiot … Abstraktiotaso: mitkä kohteen yksityiskohdat ja ominaisuudet on piilotettu mallin sisälle ja mitkä näkyvät ulospäin. Abstraktioon tehdään liittymiä, joiden kautta ulkomaailman kanssa "kommunikoidaan". Ulkoisen maailman kannalta abstraktio = sille määritellyt liittymät.
2.6.1. Abstraktiot … Abstraktioita tietojen- käsittelytieteessä: • Koneabstraktio • Kontrolliabstraktio • Tietoabstraktio.
Koneabstraktio (suoritusmalli) • kuvaa koneen loogista toimintaa • luo pohjan ohjelmointikielen käskyjen ja laskun tilan määrittelylle • laskun tila mahdollistaa koneen tarkastelun käsitteellisessä mielessä.
Kontrolliabstraktio • yleisiä ohjelmointikielistä riippumattomia rakenteita, mm. peräkkäisyys, valinta ja toisto.
2.6.1 Abstraktiot … • Tietoabstraktio • kuvaa tiedon rakenteen ja sen operaatiot • mahdollistaa näiden esittämisen ohjelmointikielen keinoin • kapseloi tiedon rakenteen ja operaatiot siten, että • ulkomaailma pääsee käsiksi abstraktioon vain operaatioiden kautta
2.6.2 Moduulit • Eri ohjelmointikielissä moduulista käytetään nimitystä • proseduuri (procedure) • rutiini (routine) • alirutiini (subr.) • funktio (function) • aliohjelma (subprogram) • Moduulin käyttöä sanotaan moduulin kutsuksi(call).
moduulit… • moduulit tulisi suunnitella niin, että ne olisivat mahdollisimman riippumattomia toisistaan • algoritmin pitäisi olla myös ihmiselle ymmärrettävä voidaan vakuuttautua algoritmin virheettömyydestä ja algoritmia voidaan myöhemmin muuttaa • modulaarisuus mahdollistaa ristiriitaisten tavoitteiden saavuttamisen: sellaisen kuvaustavan, joka olisi sekä robotin/tietokoneen että ihmisen helposti ymmärrettävissä
moduulit …. Moduulien rajauksessa huomioonotettavia seikkoja: • tehtäväkokonaisuus: yksi osatehtävä / moduuli • luonnollisuus • sopiva abstraktiotaso: alimoduulit keskenään suunnilleen samalla abstraktiotasolla
moduulit… Modulaarisuuden etuja: • selkeys • luotettavuus • entistä helpompi ylläpito • yleiskäyttöisyys eli kierrätys
Moduulien yleiskäyttöisyydestä • Siirrettävyys: moduulia voidaan käyttää aina silloin kun sama osatehtävä esiintyy algoritmissa. • Korvattavuus: moduuli voidaan helposti korvata toisella, esimerkiksi entistä tehokkaammalla moduulilla
2.6.3 Parametrit Parametrisointi lisää moduulin yleiskäyttöi- syyttä. Parametrien kautta moduulille annetaan syöttötietoja ja joskus välitetään ulos myös käsittelyn tuloksia. Vaikea asia ymmärtää, mutta loppujen lopuksi helpottaa (myös) ohjelmoijan työtä.
Parametrit… Esimerkkejä parametrien käytöstä: parametrit n, x ja y: Moduuli ’pane n lusikallista x-jauhetta astiaan y’. Ota x-jauhepurkki esiin. REPEAT nTIMES pane lusikallinen x-jauhetta astiaan y. Pane x-jauhepurkki pois.
Parametrit... Esimerkkejä parametrien käytöstä: Moduuli ’pane lusikallinen x-jauhetta astiaan y’. Ota lusikkaan x-jauhetta. Kaada lusikassa oleva jauhe astiaan y.
Parametrit... Esimerkkimoduulin käyttötilanteita: • ’Pane kolme lusikallista kaakaojauhetta astiaan kuppi’ • ’Pane kaksi lusikallistakahvijauhetta astiaan kuppi’ • ’Pane kymmenenlusikallista tapettiliisteri-jauhetta astiaan vesiämpäri’
Parametrit... Moduulin määrittelyssä esiintyviä parametreja sanotaanmuodollisiksi parametreiksi. Ne ovat muuttujia ja saavat alkuarvonsa moduulia käytettäessä eli kutsuttaessa.
Moduulien yleiskäyttöisyydestä… Moduulin kutsua suoritettaessa (siis käytettäessä moduulia) kutsussa olevia parametreja sanotaan todellisiksi.
Yleiskäyttöinen moduuli on kuin musta laatikko: tulokset syöttö-tiedot moduuli Moduuli
Yleiskäyttöinen moduuli on kuin musta laatikko: Esimerkki: moduuli nimetoikein korjaa kirjoitusvirheitä (isot/pienet kirj.,) parametrina nimilista MATTI PekkA lIISA maIJa PaiVi Matti Pekka Liisa Maija Päivi nimetoikein
2.6.4 Proseduurit ja funktiot Yleisessä tapauksessa moduulissa on m syöttö- ja n tulosparametria: syöttö-parametreja m kpl tulos-parametreja n kpl Moduuli x … …
Proseduurit ja funktiot... Moduuleja on kahdenlaisia: • proseduurit • funktiot Kun tulosparametreja ei ole (n=0), kyseessä on proseduuri(-tyyppinen moduuli). Kun tulosparametreja on yksi (n=1), kyseessä on funktio(-tyyppinen moduuli). Moduuli x
Funktio Funktiomoduuli vastaa matemaattista funktiota. Esimerkiksi funktio f(x)=3x-1 palauttaa eri x:n (syöttöparametri) arvoilla aina yhden tuloksen (tulos- parametrin). Esim. f(0) = -1, f(10)=29 jne. Moduuli x
Funktio Funktiotyyppinen moduuli onkin kehitetty lähinnä matemaattisia sovelluksia varten. Funktiomoduulia käytetään lausekkeen osana, esim. sqrt-funktio laskee neliöjuuren: esim m:=12-sqrt(5) Moduuli x syöttöparametri funktion kutsu
Funktio Sqrt on siis moduuli. Se on abstraktio neliöjuuren ottamisesta. sqrt juurrettava neliöjuuri Moduuli x
Proseduuri Proseduurin tuottamat tulokset välittyvät yleensä takaisin syöttöparametrienkautta tai ns. sivuvaikutuksina. Tyypillinen sivuvaikutus on proseduurin tekemä tulostustoimenpide. Moduuli x
Funktion määrittely Yleinen muoto: MODULE mod. nimi (mp1,…, mpN) RETURNS palautusarvo moduulin runko ENDMODULE mp1,…, mpN ovat muodolliset parametrit otsikko moduulin käskyt Moduuli x
Funktion määrittely Yleinen muoto: MODULE moduulin nimi (mp1,…, mpN) RETURNS palautusarvo moduulin runko ENDMODULE Funktiomoduulin rungossa on oltava ns. RETURN-lause. Se palauttaa funktion tuloksen ja on muotoa: RETURNlauseke otsikko moduulin käskyt Moduuli x
Proseduurin määrittely Yleinen muoto: MODULE moduulin nimi (mp1,…, mpN) moduulin runko ENDMODULE mp1,…, mpN ovat muodolliset parametrit otsikko moduulin käskyt Moduuli x
Ohjelman rakenteesta Ohjelma muodostuu yhdestä tai useammasta moduulista. Autonominen modulaarisuus: moduulit voivat viitata toisiinsa vapaasti. Hierarkkinen modulaarisuus: moduulit tietynlaisessa hierarkiassa toisiinsa nähden. Moduuli x
Esimerkkimoduuleja n! Kertomamoduuli: MODULE kertoma(n) RETURNS n-kertoma k:=1 WHILE n > 1 DO k:=k*n n:=n-1 ENDWHILE RETURN k ENDMODULE Moduuli x Return lopettaa moduulin suorituksen ja palauttaa lopputuloksen
Esimerkkimoduuleja... Kertomamoduulin kutsuja: x:=kertoma(0) tulosta (kertoma(0)) tulosta(x*kertoma(4)+kertoma(kertoma(2))) käskyä suoritettaessa käydään toteutta-massa kertoma-moduuli, syöttöparametrin arvona on 0. tulosta-moduulin syöttöparametrina on 0! käskyä suoritettaessa käydään toteuttamassa kertoma-moduuli kolme kertaa, syöttöparametreina arvot 4, 2! ja 2 (=2!).
Esimerkkimoduuleja... Kertoma-moduuli Kertoma 6 720 Kertoma 4 24 Moduuli x Kertoma 2 2
Kilpikonnagrafiikkaa • neliö • kolmio http://www.bfoit.org/Intro_to_Programming/TG.html
2.6.5 Yhteenveto • Moduulit soveltuvat luonnollisella tavalla asteittain tarkentuvaan menetelmään • Moduuli on suuremman algoritmin komponentti. Komponentteihin jako yksinkertaistaa ja nopeuttaa ohjelmien suunnitteluprosessia • Moduulit selkeyttävät algoritmeja ja helpottavat niiden ymmärtämistä. Algoritmien muuntelu helpottuu.
2.6.5 Yhteenveto … • Moduulien oikeellisuuden tarkastelu helpottuu, koska algoritmia voidaan tarkastella ja testata paloittain. • Kun algoritmin osaksi liitetään valmis moduuli, riittää kun tiedetään mitä moduuli tekee, ei tarvitse tietää sitä miten se ratkaisun tekee. Ulkoinen kuvaus riittää ! MODULE neliö (sivu)
2.6.5 Yhteenveto … • Kerran suunniteltua moduulia voidaan käyttää hyväksi missä tahansa algoritmissa, jossa vastaava (osa)tehtävä esiintyy uusiokäyttöä. • Moduulit voidaan koota kirjastoiksi