Luokka- ja oliokaaviot Jari Ojasti Nokia email : jari.ojasti@nokia.com puh : 040 5926 32 Miten toteuttaisin softalla... Procedure for determining employee holidays, (Pressman, p. 620): Executive order 0358 provided in the case of an employee whose work week varied from the normal Monday through Friday work week, that Labor Day and Thanksgiving Day each were to be observed on the next succeeding workday when the holiday fell on a day outside the employee s regular basic work week. Now, when Labor Day, Thanksgiving Day or any of the new Monday holidays are outside an employee s basic workweek, the immediately preceding workday will be his holiday when the non-workday on which the holiday falls is the second non-workday or the nonworkday designated as the employee s day off in lieu of Saturday. When the non-workday on which the holiday falls is the first nonworkday or the non-workday designated as the employee s day off in lieu of Sunday, the holiday observance is moved to the next succeeding workday. So what happens when a payday is on a holiday?
Kartta hyväksyntä määrittely suunnittelu suunnittelu mod. testaus integrointi sys. testaus Ylläpito koodaus (toteutus) tuotteenhallinta dokumentointi koulutus menetelmät projektinhallinta, laatujärjestelmä vaatimustenhallinta työkalut Sisältö luokka- ja oliokaavio osana UML:ia käsitteitä luokkakaavio luokkakaaviot olionäkökulmasta notaatio esimerkkejä luokkakaavioista ja eri yhteystyypeistä assosiaatio periytyminen koostuminen liittymistyypit roolit oliokaavio harjoituksia 2
UML kaavioesitystavat staattinen ja dynaaminen rakenne oliokaaviot, luokkakaaviot Käyttötapauskaaviot järjestelmän korkean tason toiminnallisuus Sijoittelukaaviot Oliokaaviot Sekvenssikaaviot Yhteistyökaaviot Komponenttikaaviot Luokkakaaviot Tilakaaviot Aktiviteettikaaviot staattinen ja dynaaminen rakenne dynaaminen käyttäytyminen Käsitteitä Olio (object) on ohjelman jäsentelyn perusyksikkö, tietojen ja palveluiden kokonaisuus. Oliolla on viite (reference), yksilöivä tunniste. Kahdella eri oliolla on eri viite, vaikka ne olisivat toistensa kopioita. Ohjelman suoritusaikana olio on keskusmuistista tehty tilanvaraus (jolla on sisäinen pysyvä viite, yksilöllinen numero eli object-id, joka toisissa ohjelmointikielissä on olion muistiosoite, Javassa tyyppiä viite). Luokka (class) on olioiden tyyppi. Attribuutti (attribute) on luokassa määritelty olion ominaisuutta esittävä tieto. Attribuuttien arvojen yhdistelmää kutsutaan olion tilaksi (state). Palvelun suoritus voi muuttaa olion tilaa. Ohjelman toteutuksen kannalta attribuutti on luokassa määritelty kenttä. Luokan attribuutten ja palveluiden kokoelmaa kutsutaan luokan piirteiksi 3
Luokkakaavio kuvaa järjestelmän luokat ja niiden väliset suhteet käytetään staattisen rakenteen kuvaamiseen luokat sekä niiden väliset suhteet assosiaatio periytyminen koostuminen roolit yhdestä moneen, monesta yhteen Luokkakaaviot olionäkökulmasta olioiden piirteet määritellään olion luokassa (class) jokaisella oliolla on yksikäsitteinen luokka, jonka mukaan olio on luotu olio on siis luokan ilmentymä (instance) luokka kertoo, mitä attribuutteja ja operaatioita sen ilmentymillä on: jokaisella luokan ilmentymällä on samat attribuutit ja operaatiot, vain arvot vaihtelevat 4
Luokkakaavion piirrosmerkit Elementit Suhteet Luokka Nimi Riippuvuus Assosiaatio rooli 0.. Kommentti Kooste Yleistys (Periytyminen) Toteutus Copyright Kai Koskimies 2000 Luokka tarkemmin Ihminen Si lm ienvari HiustenVari Pituus Paino AnnaPituus () AnnaPaino() Luokan nimi Luokan attribuutit Luokan operaatiot 5
Notaatio luokat niiden väliset yhteydet luokan atribuutit operaatiot asiakas nimi osoite uusi tilaatuote() tekee 0.. tilaus yhteyksiin liittyviä lukumääräsuhteita Luokkakaavioesimerkkejä Kurssi.. Opettaja Ohjain Kohde palauta() varaa() otakäyttöön() hallinnoi KohdeHallinto palautakohde(kohde, Varasto) varaakohde(kohde) otakäyttöönkohde(kohde) Varasto HenkilöAuto rekisterinumero huolla(int km) palauta() Talleta huoltoinformaatio (palauta kutsuu) ParkkiAlue Copyright Kai Koskimies 2000 6
Assosiaatio eli liittyminen assosiaatio kuvaa olioiden välistä pysyvää linkkiä assosiaation nimi kirjoitetaan yhteyden päälle oliot, jotka osallistuvat assosiaatioon, voivat osallistua siihen tietyissä rooleissa. Roolit kerrotaan luokkasymboolin yhteydessä Luokka +rooli2 yhteyden nimi +rooli Luokka2 0.. As ia kas +tilaaja omistaa +tilattava Tilaus 0.. Assosiaatioiden tyypit Luok ka Luokka3 Luokka5 Luokka7 Luokka9.... 0..0 0.. 0.. Luok ka2 Luokka4 Luokka6 Luokka8 Luokka0 Luokan olioon voi liittyä ainoastaan yksi luokan 2 olio. Luokan 3 olioon voi liittyä yksi tai useampia luokan 4 olioita. Luokan 5 olioon ei voi liittyä yhtään luokkaan 6 kuuluvaa oliota. Luokan 7 olioon voi liittyä nolla tai yksi luokkaan 8 kuuluva olio. Luokan 9 olioon voi liittyä nolla tai useampia luokan 0 olioita. 7
Luokkakaavioesimerkkejä (2) yritys osasto 0.... henkilö korttikasa sijaintipöydällä lisääpäälle() otaalta() otapäältä() kortti arvo maa kuvapuolinäkyvissä 0.. käännä() pöytäpakka käännäpäältä() otaalta() käsipakka sekoita() käsi korttejaaluksi lajittele() Copyright I. Haikala 2000 Aggregaatti eli koostuminen avoin salmiakki kuvastaa koosterakennetta. Avoin koosterakenne voi kuitenkin purkautua hajoittamatta rakennetta. musta salmiakki kuvastaa koosterakennetta, joka on hyvin tiivis. Osilla on sama elinaika kuin kokonaisuudella. Aggregaattiyhteys valitaan, jos pääluokka ei voi olla olemassa ilman aggregaattiluokkaa Jääkaappi tilavuus Ovi Sähköjohto 8
Periytyminen Periytyminen tarkoittaa luokan A piirteiden siirtymistä jollekin toiselle luokalle B. Tällöin sanotaan, että: A on B:n yliluokka Hen kilö B on A:n aliluokka A Mies Nainen B Luokkakaavioesimerkkejä (3) Nappula 0.. käyttää 0.. Pelaaja omistaa 0.. 0.. Aarre sijaitsee {ordered} pelaa Noppa kuuluu Peli Erikoispaikka peittää 0.. 2 päättyy Paikka koostuu Kartta Lappu Lentoreitti seuraa Copyright Kai Koskimies 2000 9
Nappula Pelaaja väri: Integer käyttää 0.. siirry(p: Paikka) 0.. vaikuta(p: Pelaaja) annapaikka(): Paikka 0.. Noppa heitä(): Integer sijaitsee nimi: String rahat: Integer onkolentopaikalla(): Boolean onkorahaa(): Boolean annapaikka(): Paikka siirry(p: Paikka) onkovoittaja(): Boolean onkoaarre(): Boolean luovutaaarre(): Aarre otaaarre(a: Aarre) maksu() vuorossa omistaa 0.. 0.. {indexed} Aarre vaikuta (p: Pelaaja) <<interface>> Nappula Rosvo vaikuta (p: Pelaaja) Jalokivi arvo: Integer vaikuta (p: Pelaaja) <<interface>> Liikenne annakohteet(p: Paikka): Set<Paikka> {abstract} hinta(p, p2: Paikka): Integer {abstract} Lentoliikenne annakohteet(p: Paikka): Set<Paikka> {abstract} hinta(p, p2: Paikka): Integer {abstract} paikan nro päättyy {indexed} Set<Erikoispaikka> peittää Peli alusta() lisääpelaaja(n: String) nopanheitto() siirräpelaaja(p: Paikka) käännälappu(p: Paikka) päätä() Paikka onkolappu():boolean käännälappu() Erikoispaikka lappunäkyy: Boolean onkolappu():boolean käännälappu() pelaa Normaalipaikka Copyright Kai Koskimies 2000 Peliseurue lisääpelaaja(n: String) seuraavapelaaja(): Pelaaja aarrepelaaja(p: Paikka): Pelaaja Set<paikka> {indexed} paikan nro, askelmäärä Kartta annaviereiset(p: Paikka, n: Integer): set<paikka> Oliokaavio Kuvaa järjestelmän oliot sekä niiden väliset suhteet jokaisella oliolla on yksikäsitteinen luokka, jonka mukaan olio on luotu olio on siis luokan ilmentymä (instance) kuvataan kuten luokkakaaviot lisäyksenä atribuutit kirjoitetaan kuten luokka, mutta alleviivattuna auto : Henkilöauto 0
Olioluokkien tunnistaminen fyysiset oliot (auto, venttiili, talo, hevonen, auto) asiakirjat ja dokumentit (tilaus, aikataulu) roolit (myyjä, käyttäjä, työntekijä, operaattori) tapahtumat, joista tallennetaan tietoa (keskeytys, hälytys, varaus) paikat (kauppa, internetportaali, toimisto, valvomo) organisaatiot (pankki, koulu) käsitteet (maksuaikatalu, juna-aikataulu) Etsi siis substantiiveja! Älä ole liian kriittinen! Kaavioiden laatiminen Luokan jäsenillä on samat attribuutit ja sama käyttäytyminen (metodit). Luokkajako perustuu pysyviin ominaisuuksiin, ei esimerkiksi olion väliaikaiseen tilaan. Periytyminen on is-a -suhde: kaikkialla, missä on mielekästä käyttää isäluokan oliota, pitää olla mielekästä käyttää lapsiluokkien olioita. (Vrt. vaikkapa suorakaide ja neliö.) Ei toistuvia kenttiä Ei tarpeetonta redundanssia (sama tieto monessa paikassa). Ei puuttuvia kenttiä Ei turhia yhteyksiä Toteutusvaiheessa näistä vaatimuksista voidaan tehokkuussyistä joutua tinkimään. Copyright I. Haikala 2000