Suunnittelumallit ja kehykset
- Kurssi: Ohjelmointitekniikka:Java, kevät 2005
- Opintopiiri: Ryhmä rämä
- Opintopiirin jäsenten nimet:
- Thompson Coon, Jon
- Hela, Ilkka
- Palviainen, Markus
- Forsgren, Jukka
- Piuva, Tero
- Päiväys 4.1.2005
Suunnittelumallit
Suunnittelumalli (Design Pattern):
= tapa suunnitella ohjelmiston osa tietyn usein esiintyvän ongelman ratkaisemiseksi.
Suunnittelumalli koskee yleensä muutamia luokkia ja niiden välisiä suhteita. Ovat tavallisesti sovellusalueesta riippumattomia, mutta voi myös olla johonkin
tiettyyn sovellusalueeseen liittyvä malli.
Suunnittelumallin soveltamistaso voi vaihdella aina detaljitason mallista kokonaisen arkkitehtuuritason kuvaamaan malliin. Soveltamisen tulisi aina lähteä tietyn ongelman
identifioinnista, siis pelkästään se, että sovelluksessa on käytetty suunnittelumalleja, ei tee siitä välttämättä laadukasta.
Suunnittelumalli annetaan yleensä dokumenttina, joka voi sisältää esim. mallin tarkoituksen, mahdolliset sovelluskohteet, rakenteen (esim. UML), edut ja haitat, sovellusesimerkit.
Mallijärjestelmä (pattern language):
Kokoelma malleja, joiden avulla voidaan rakentaa kokonaisuus..
Antisuunnittelumallit (antipattern):
Epätoivottavat suunnitteluratkaisut.
Auttavat virheellisen ratkaisumallin havaitsemista koodissa.
Pieni Oliokirja jakaa kolmeen ryhmään tarkoituksensa perusteella:
- Luontimalli (creational pattern):
Esimerkkinä Abstract factory – Malli tarjoaa liittymän, jonka avulla voidaan luoda toisiinsa liittyvien olioiden perheitä tuntematta näiden olioiden konkreettisiä perusluokkia. - Rakennemalli (Structural pattern):
Esimerkkinä Kooste – Mallin avulla voidaan olio esittää hierarkisesti toisista olioista koostuvana siten, että koosteolioita ja niiden osaolioita voidaan käsitellä samalla tavalla. - Käyttäytymismalli (Behavioral pattern):
Esimerkkinä Strategia – Malli määrittelee vaihtokelpoisen algoritmien perheen siten, että kukin algoritmi on suljettu omaan luokkaansa. Malli antaa mahdollisuuden vaihtaa dynaamisesti asiakkaan käyttämää algoritmia perheen sisällä.
Kehykset
Ohjelmistokehys (framework):
= Kiinteästi toisiinsa liittyvien luokkien ja /tai rajapintojen kokoelmaa, joka toteuttaa tietyn ohjelmistoperheen perusarkkitehtuurin.
Kehyksen tarkoituksena on saavuttaa korkea uudelleenkäytön aste. Pyritään uudelleenkäyttämään kokonaisia sovellus- tai komponenttiperhettä yksittäisten luokkien
tai rutiinien sijaan.
Kehyksestä saadaan yksittäinen sovellus tai komponentti erikoistamalla. Tätä varten kehyksellä on erikoistamisrajapinta, joka kertoo, mitkä osat kehyksessä
ovat muunneltavia (muunneltavat osat kerrotaan yleensä dokumentoinnissa). Kehyksellä on tavallisesti myös palvelurajapinta.
Jos kehystyksen erikoisuus vastaa täydellistä sovellusta, niin tällöin puhutaan sovelluskehyksestä (application framework). Sovelluskehys on siis ohjelmisto, joka
sisältää tietyn tyyppisten sovellusten perusratkaisut. Esimerkkinä sovelluskehyksistä on AWT.
Javassa erikoistaminen voidaan toteuttaa esim. periyttämisellä, rajapinnoilla tai Java 1.5:n uutena ominaisuutena: geneerisillä luokilla.
Kehyksillä ja suunnittelumalleilla on läheinen yhteys. Nimittäin monien suunnittelumallien päämääränä on lisätä ohjelmiston joustavuutta ja yleisyyttä. Siksi
nämä suunnittelumallit ovat usein käyttökelpoisia ratkaisuja kehysarkkitehtuureissa. Esim. Tarkkailija.
Suunnittelumalleja on käytetty myös kehysten dokumentoimiseen – Ne selittävät miksi kehyksessä on käytetty tiettyjä suunnitteluratkaisuja.
Teksti otettu pääosin lähteestä