6
Oliomallinnuksen perusteet
(Kirja: luku 14, 15 ja 16)

Kuva 11. Vaatimusmäärittely

Kuva 12. Analyysi

Kuva 13. Analyysi

Kuva 14. Suunnittelu

Kuva 15. Suunnittelu

Kuva 16. Suunnittelu

Kuva 17. Dokumentointi
- Abstraktissa mielessä oliolla on oma identiteetti
(tunniste), sisäinen rakenne ja suhde ympäristöönsä
- Teknisessä mielessä olio on ohjelman rakenteen
perusyksikkö, joka ei ole puhtaasti toiminnallinen (kuten aliohjelma) tai puhtaasti tietoa
sisällyttävä (kuten tietue), vaan se sisältää nämä molemmat aspektit.
- Olio tallettaa kuvaamansa ja käsittelemänsä tiedot
omiin sisäisiin tietokenttiin, joita kutsutaan attribuuteiksi.
- Attribuuttien arvojen yhdistelmiä kutsutaan olion
tiloiksi.
- Kukin olio sisältää joukon attribuutteja
käsitteleviä operaatioita eli metodeja.
- Olion attribuutteja ja metodeja kutsutaan olion
piirteiksi.
- Luokassa määritellään olion piirteet (attribuutit
ja metodit).
- Olio on luokan ilmentymä. Jokaisella luokan
ilmentymällä on samat attribuutit ja metodit, vain attribuuttien arvot
vaihtelevat.
- Attribuutit ja metodit voivat olla myös
luokkakohtaisia. Tällöin kyseinen piirre on saman luokan olioille
yhteinen.

Kuva 18. Esimerkki luokasta
(Pohjonen)

Kuva 19. Esimerkki luokan
ilmentymistä (olioista), (Pohjonen)
- Periytyminen on tärkeä olio-ohjelmoinnin käsite ja
koodin uudelleenkäytön mekanismi.
- Periytymisellä tarkoitetaan tilannetta, jossa
aliluokka perii kaikki yliluokan ominaisuudet.
- Kun luokka perii jonkin olemassa olevan luokan
piirteet, syntyy puumainen luokkahierarkia.
- Periytymisessä kaikki yläluokkaan tehdyt muutokset
periytyvät alaluokkiin. Tämä helpottaa koodin uudelleenkäyttöä.

Kuva 20. Esimerkki periytymisestä
(Pohjonen)
- Aliluokkien kyky muuttaa perittyjä ominaisuuksia
-> monimuotoisuuden käsite.
- Toiminnallisesti erilaiset metodit samalla nimellä
(yksi funktio, monta tulkintaa).
- Olio voi pyytää toista oliota suorittamaan jonkin
metodin, ilman että sen tarvitsee tietää, mihin luokkaan toinen olio
kuuluu. (ks. esimerkki s. 150).
- Monimuotoisuutta tarvitaan olioiden viestinvälityksessä
periytymisen ja luokkien välisten suhteiden vuoksi.
- Luokkien tunnistamisessa voidaan käyttää
crc-tekniikkaa:
- ryhmä, jossa 4-6 hlöä
- crc-kortit jaetaan henkilöille
- sessiossa keskitytään yhteen ongelmaan kerrallaan
- session askeleet:
- luokkien tunnistamisessa etsitään Use case
-kuvauksista substantiiveja
- lisätään luokkille vastuut, etsitään ylä- ja
alaluokat sekä attribuutit
- Luokkakaavio on oliomenetelmien keskeisin
kuvastapa, jonka varaan muut oliomallinnuksen kuvaukset pitkälti
rakentuvat
- Luokkakaavio kuvaa sovelluksen luokat, niiden
sisällön ja luokkien väliset suhteet.
- Ks. Kirjastojärjestelmän luokkakaavio kirja s. 166.
- Suhteet kuvaavat luokkien välisiä
viestintä-polkuja.
- Suhteita on kolmentyyppisiä: assosiaatio, kooste ja
riippuvuus.
- Assosiaatio on kaksisuuntainen luokkien välinen
linkki (viiva, joka yhdistää luokat). Assosiaatio edustaa sellaista
luokkien välistä suhdetta, jolla on tietty pysyvyys.
- Kooste esittää kokonaisuuksia ja osia. Koosteita on
kahdenlaisia:
- aggregation, joka on heikko koosterakenne.
Heikossa koosterakenteessa osa voi olla olemassa myös ilman
kokonaisuutta.

- composition, joka on vahva koosterakenne. Vahvassa
koosterakenteessa osa ei voi olla olemassa ilman kokonaisuutta; jos
kokonaisuus tuhotaan, osatkin tuhotaan.

- Riippuvuus, joka on heikko suhde. Riippuvuus
ilmaisee clientin ja supplierin välisen suhteen (katkoviiva ja nuolen
kärki osoittaa clientista supplieriin).

- Kardinaliteetti kertoo, kuinka monta objektia
esiintyy luokkien välisessä suhteessa.
- Kardinaliteetti merkitään suhteen molempiin päihin.
- Siirtyminen oliosta toiseen voidaan kuvata
navigoinnilla, piirtämällä nuolenkärki suhdetta kuvaavan viivan päähän.


Kuva 21. Esimerkki luokkien
välisistä suhteista ja kardinaliteeteista
- Sekvenssikaavio kuvaa tietyn toiminnon tai
tapahtumasarjan siihen osallistuvien olioiden ja niiden vuorovaikutuksen
kannalta.
- Sekvenssikaaviossa korostuu olioiden välinen
vuorovaikutus.
- Sekvenssikaavioilla yhdistetään use caset
(käyttötapaukset) ja luokkakaavio.
- Jokaisesta käyttötapauksesta laaditaan
sekvenssikaavio.
- Sekvenssikaaviossa luokat kuvataan pystyviivoina ja
tapahtumat (palvelupyynnöt) niiden välisinä vaakasuorina nuolina.
- Aika kulkee ylhäältä alas: ylempänä oleva tapahtuma
edeltää alempana olevaa.
- Tapahtumat eli nuolet ovat luokkien kuvaamien
olioiden toisilleen lähettämiä metodikutsuja.
- Kontrollin omistus voidaan esittää paksunnettuna
jaksona, aktivaatiopalkkina.

Kuva 22. Esim. analyysivaiheen
sekvenssikaaviosta
6.12
Dynaaminen mallintaminen – tilakaaviot
- Tilakaavio kuvaa yhden olioluokan täydellisen
käyttäytymisen muista olioista riippumattomasti.
- Tilakaavio korostaa yhden olion reagoimista ulkoa
tuleviin tapahtumiin.
- Tilakaavio koostuu tiloista ja niiden välisistä
siirtymistä.
- Tilat kuvataan pyöristettyinä suorakaiteina ja
siirtymät niiden välisinä nuolina.

Kuva
23. Esimerkki tilakaaviosta
Oliomallinnusprosessin vaiheet
ovat
- Vaatimusten määrittely
- Analyysi
- Suunnittelu
Vaatimusten määrittely
- Vaatimusten määrittelyvaiheessa kartoitetaan
järjestelmän päätoiminnot. Vaatimusmäärittely suoritetaan use casejen
(käyttötapausten) avulla.
- Tietojen kartoitus voidaan tehdä esim. haastatteluilla
tai käyttämällä avoriihiä.
- Use case:ien pohjalta laaditaan käyttötapauskaavio,
joka kuvaa järjestelmän toimintojen ja ympäristön väliset suhteet.
Analyysi
- Luokkakaaviolla mallinnetaan järjestelmän
staattinen malli, joka sisältää luokkien tunnistamisen, attribuuttien
määrittelyn ja luokkien välisen riippuvuuden selvittämisen.
- Sekvenssikaaviolla mallinnetaan järjestelmään
dynaaminen malli. Sekvenssikaaviot laaditaan kuvaamalla kunkin use casen
määrittelemän toiminnallisuuden edellyttämä luokkien välinen
kanssakäyminen.
- Laaditaan tilakaaviot luokille, joille on
tunnistettavissa sisäistä tilakäyttäytymistä.
- Sekvenssikaavio ja tilakaavio ovat toisistaan
voimakkaasti riippuvia: niiden kuvaaman toiminnan ja vuorovaikutuksen
täytyy olla yhtäpitäviä.
- Analyysivaiheen mallit kuvaavat pääasiassa
järjestelmän liiketoimintaluokat ja niiden keskinäiset suhteet.
Suunnittelu
- Suunnitteluvaihe aloitetaan yleensä käyttöliittymän
suunnittelulla.
- Käyttöliittymän suunnittelussa keskeinen tehtävä on
näyttöjen suunnittelulla.
- Kun käyttöliittymä on suunniteltu, voidaan
analyysivaiheen luokkakaavio laajentaa suunnittelun luokkakaavioksi,
tuomalla siihen mukaan mm. käyttöliittymän luokat, lisäämällä loput
ohjausluokat ja luokkien attribuutit ja metodit.
- Luokkakaaviota ja sekvenssikaaviota hiotaan
keskenään niin kauan kunnes tasapaino kuvausten välille on löytynyt.