Luokkakaaviot Luokkakaaviot ovat keskeinen väline etsittäessä järjestelmän kannalta keskeisiä käsitteitä ja niiden välisiä riippuvuuksia. Perinteisesti tässä on käytetty erilaisia käitekaaviotekniikoita. Oliosuuntautuneen lähestymistavan myötä käyttöön ovat tulleet erilaiset luokkakaaviokuvaukset, jotka korostavat tietorakenteen ja tietoja käsittelevien operaatioiden yhteenkuuluvuutta. Käsittely kattaa luokkakaavioiden yleisperiaatteet ja olioteknisten piirteiden (periytymis- ja koostemekanismit) käytön kuvauksissa, sekä kaavioiden ilmaisuvoimaa ja täsmällisyyttä koskevaa pohdintaa. UML:n mukaisen luokkakaaviokuvauksen rinnalle esitellään myös käsitekaavioiden kuvaustekniikoina sekä Chenin että Martinin käsitekaaviot. Exit
Sisällys Luokkakaaviot UML luokkakaaviot: notaatio Luokkakaavioiden rooli kehitystyössä Luokat, yhteydet, attribuutit, metodit Luokkakaavion komponentit Oliot ja linkit Luokka, olio Luokkien etsintä Attribuutit Lukumääräsuhteet Luokkakaavio ja tietokantarakenne Rakenneominaisuudet Yleistys, erikoistaminen,periytyminen Fyysinen ilmentymä vs. looginen rakenne Periytyminen Koostuminen/komponentti(us) Periytyminen ja koostuminen Muodoste Rajapintojen kuvaaminen Rajapinta, toteutussuhte Stereotyypit ja ikoonit Rajapinnat, ikonit: esimerkki Pakkaukset Kaavioiden ilmaisuvoima Kaavioiden laatiminen Kaavioiden muokkaaminen Muita notaatioita Esimerkki: kirjasto Esimerkki: maalausrobotti Kertauskysymykset Luokkakaaviot 2
Luokkakaaviot luokkakaaviot: järjestelmän keskeiset käsitteet ja niiden keskinäiset suhteet oliopohjaisen mallinnuksen väline; luokka on yleistys samanlaisista olioista luokkaan kuuluvalla oliolla on tila (attribuuttien arvot), jota sen metodit muuttavat perustana käsitekaaviot (tietokantasuunnittelu) relaatiotietokantojen suunnittelun perusta kaavion jalostaminen (normalisoiduksi) tietokantakuvaukseksi tässä yhteydessä UML:n luokkakaavio Chenin ja Martinin käsitekaavionotaatiot OMT, Booch rakenne luokkakaavio: muutokset tilaan luokan sisältä palvelukutsun toteutuksen seurauksena käsitekaavio: käsittely ja tietorakenne rakentuvat yleensä erillään Seuraavat Seuraavat kalvot: kalvot: UML-luokkakaavioiden UML-luokkakaavioiden notaatio. notaatio. Aiheen yksityiskohtainen Aiheen yksityiskohtainen esittely esittely alkaa alkaa niiden niiden jälkeen jälkeen Luokkakaaviot 3
UML luokkakaaviot: notaatio Geneerisen luokan ilmentymä: Window<Xwindow> Attribuuttilista (valinn.) Operaatiolista (valinn.) + = public - = private # = protected = unknown Window {abstract, author = KK status = tested} +size #visibility: Boolean = false -xptr: WinType WinType +display() hide() +create() -attachxwindow(xwin: WinType*) Geneerinen parametri Malliparametriluettelo (valinn.) Luokkaoperaatio (staattinen) (attribuutti ja operaatio voidaan antaa pelkällä nimelläkin) Lähde: K.Koskimies (2000) Luokkakaaviot 4
UML luokkakaaviot: notaatio Riippuvuus (esim. kutsu) Parser Scanner Assosiaatio Person owns Car Yleistys Car Vehicle Toteutus Car <<interface>> Vehicle Aito kooste ( ei olemassa ilman ) Ministeri 15..* Valtioneuvosto Kooste Workstation 1..* Network Lähde: K.Koskimies (2000) Luokkakaaviot 5
UML luokkakaaviot: notaatio Vaihteleva määrä ilmentymiä alaraja yläraja C1 n1..n2 C2 ** = ei eiylärajaa ** = 0..* 0..* Kiinteä määrä ilmentymiä C1 5 C2 Lähde: K.Koskimies (2000) Luokkakaaviot 6
esimerkki UML luokkakaaviot: esimerkki Car 4 Wheel UserGroup * belongs * User Kurssi * 1..* Opettaja Lähde: K.Koskimies (2000) Luokkakaaviot 7
esimerkki UML luokkakaaviot: esimerkki Oliokaavio Oliokaavio :Instructor :Course :Instructor :Course :Course :Instructor :Instructor :Course Luokkakaavio Luokkakaavio Instructor * * Course Lähde: K.Koskimies (2000) Luokkakaaviot 8
esimerkki UML luokkakaaviot: esimerkki University name: Name address: String phone: Number 1..* Department name: Name addcourse() removecourse() 1..* * Course name: Name id: Number adddepartments() adddepartment() removedepartment() getdepartment() getalldepartments() LabCourse LectureCourse labid: Number roomreqs: Number Lähde: K.Koskimies (2000) Luokkakaaviot 9
UML luokkakaaviot: notaatio Navigaatio Person has AccessRight Kvalifiointi Bank accountnr * Client Rooli Yritys työnantaja työntekijä :IWorker Henkilö Lähde: K.Koskimies (2000) Luokkakaaviot 10
UML luokkakaaviot: notaatio Luokkien Luokkien rajoitteet rajoitteet Transaction value {value > 0} Transaction value constraints: {value > 0} Lähde: K.Koskimies (2000) Luokkakaaviot 11
UML luokkakaaviot: notaatio Assosiaatioiden Assosiaatioiden rajoitteet rajoitteet Person * member-of {subset} * Committee 1 chair-of * worker * 0..1 boss Person employee employer * 0..1 Company {Person.employer = Person.boss.employer} Lähde: K.Koskimies (2000) Luokkakaaviot 12
UML luokkakaaviot: notaatio Rajapinnat: Rajapinnat: Strategia Strategiasuunnittelumalli: Context contextinfo() <<interface>> Strategy algorithm() MethodA algorithm() MethodB algorithm() Lähde: K.Koskimies (2000) Luokkakaaviot 13
UML luokkakaaviot: notaatio Rajapinnat Rajapinnat (supistettu (supistettu muoto) muoto) Strategy Context contextinfo() MethodA algorithm() MethodB algorithm() Lähde: K.Koskimies (2000) Luokkakaaviot 14
UML luokkakaaviot: notaatio Aktiiviset Aktiiviset luokat luokat Paksumpi rajaviiva <<controller>> DeviceController currentconfiguration Mahdollinen stereotyyppi Signaalilohko (olio tunnistaa nämä signaalit) Signals deviceinterrupt userinterrupt seriousflaw Aktiivinen olio (aktiivisen luokan ilmentymä): olio, joka omistaa prosessin/säikeen, ja joka reagoi sille lähettetyihin signaaleihin. Käyttäytyminen kuvataan usein tilakaaviolla Lähde: K.Koskimies (2000) Luokkakaaviot 15
Luokkakaavioiden rooli kehitystyössä luokkakaavioilla (käsite-) on keskeinen rooli kehitystyössä hahmottelu tietosisällön määrittely: lähtee liikkeelle todellisten tilanteiden tarkastelulla (oliot, todelliset olioiden väliset tilanteet) -> esimerkit (kuvataan oliokaavioina) tietojen kuvaus: oliokaavioita laadittaessa hahmotetaan niitä kuvaavat attribuutit ja niiden rakenne (tietohakemistokuvaus tukee ja kokoaa) oliokaavioista yleistetään luokkakaavio (yhteiset ominaisuudet ja yhteyksien lukumääräsuhde) toiminnallisuuden kuvaus:» lähtee käyttötapauksista, joita kuvataan olioiden välisenä vuorovaikutuksena (tapahtumasekvenssit) -> esimerkkitilanteet» vuorovaikutukseen liityvien olioiden sisäinen käyttäytyminen kuvataan toimintokuvauksina (tilakaavioina); esim. tsk:n olioiden toiminnallisuus Luokkakaaviot 16
Esimerkeistä yleistykseksi Esimerkki oliokaavio Lopullinen kuvaus luokkakaavio tapahtumas.kaavio (nuolet) tapahtumas.kaavio (oliot) operaatiokuvaukset (luonnollinen kieli) jne. vuorovaikutuskuvaus toimintokuvaukset toimintokuvaukset jne. Luokkakaaviot 17
Kuvauskannan rakentuminen hlö1:asiakas tavara1:tilaus Asiakas hlö2:asiakas tavara2:tilaus tavara3:tilaus Tuotetilaus Käyttötapauskuvaus: Nimi: xxxxxxxx Suorittajat: xxxxxxxxxx.. Asiakas Tilaus Tuote 1 0..* 0..* 0..* hlö1: Asiakas hlö2:asiakas Operaatiokuvaukset Tietohakemisto: tilaus = tno + asno + tno =.. Tietokantakuvaus Toimintokuvaukset Kuvauskanta Luokkakaaviot 18
Luokat, yhteydet, attribuutit, metodit keskeisiä termejä luokat: järjestelmässä mallinnettavat kohteet yhteydet: kohteiden välinen riippuvuus» suuntamerkintä» lukumääräsuhteet attribuutit: luokan ominaisuudet (tila) metodit: attribuutteja muuttavat toiminnot lisäpiirteitä: merkkiarvot (tag), stereotyypit ilmentymät» luokka olio» yhteys - linkki Luokkakaaviot 19
Luokkakaavion komponentit (1) luokka merkkiarvo attribuutit asiakas {persistent} nimi osoite uusi tilaatuote() lukumääräsuhde 1 tekee 0..* tilaus {persistent} yhteys operaatiot Luokkakaaviot 20
Oliot ja linkit ahto simakuutio : asiakas tilaus 1 : tilaus tilaus 2 : tilaus Oliokaaviot Oliokaaviot teemu teekkari : asiakas tilaus 3 : tilaus outi opiskelija : asiakas asiakas 0..* tilaus Luokkakaavio Luokkakaavio saadaan saadaan yleistämällä yleistämällä oliokaavion oliokaavion mukaisia mukaisia tilanteita tilanteita Luokkakaaviot 21
Luokka,, olio luokka edustaa kuvauksessa koko luokkaa [opiskelija, opettaja, tentti, suoritus, kurssi, opintojakso] samoja ominaisuuksia omaavien olioiden luokka sovelluksen kannalta merkityksellinen voi sisältää ominaisuuksia kuvaavia attribuutteja ja toimintoja kuvaavia metodeja» esimerkiksi: asiakas, tuote (konkreettisia reaalimaailman olioita); aikataulu, suunnitelma (abstrakteja reaalimaailman olioita) olio (luokan ilmentymä) on yksittäinen luokan edustaja konkreettinen luokkaan kuuluva olio» esimerkiksi: asiakas - Jaakkola Hannu Luokkakaaviot 22
Luokkakaavion komponentit (2) Assosiaatioluokka Opiskelija nimi op.nro osoite ilmoittaudu( ) 0..* suoritus arvosana ov-määrä pvm osallistuu 1..* 0..* suorittaa kurssi kurssitunnus periodit lukukausi 1 kuuluu 0..* 0..* tentti 0..* 1 opintojakso kuvaus opettaja nimi osoite henkilönro Luokkakaaviot 23 0..* <kuvaa luennoi riippuvuusviiva (ei lukumääräsuhdetta!) 0..1 Huom! Huom! kuusi kuusi luokkaa, luokkaa, suhteellisen suhteellisen suuri suuri tietojärjestelmä tietojärjestelmä Järjestelmän Järjestelmän tarkoitus tarkoitus ja ja tavoitteet: tavoitteet: KURREK-järjestelmä KURREK-järjestelmä sisältää sisältää kuvaukset kuvaukset TTKK:n TTKK:n opintojaksoista, opintojaksoista, opettajista opettajista ja ja opintosuorituksista. opintosuorituksista. Järjestelmä Järjestelmä tuottaa tuottaa kurssien kurssien osallistujalistoja, osallistujalistoja, tenttien tenttien tuloslistoja tuloslistoja ja ja opintosuoritusrekisteriotteita. opintosuoritusrekisteriotteita. Opettajat Opettajat kirjaavat kirjaavat järjestelmän järjestelmän avulla avulla opintosuorituksen opintosuorituksen rekisteriin. rekisteriin. Opiskelijat Opiskelijat ilmoittautuvat ilmoittautuvat järjestelmän järjestelmän avulla avulla kursseille kursseille ja ja voivat voivat tutkia tutkia omia omia suoritustietojaan. suoritustietojaan.
Luokkakaavion komponentit (3) yhteys edustaa luokkien välistä riippuvuutta [osallistuu, suorittaa, kuuluu, luennoi] yhteys on yleensä kaksisuuntainen; yksisuuntaisuus voidaan osoittaa suuntaa kuvaavalla nuolenkärjellä (kurssi - opiskelija) yhteyden kuvaukseen voi liittyä suunta (opintojakso-kurssi) yhteyteen voi liittyä tarkentava rooli (tarvittaessa molempiin päihin; ks. on esimies jäljempänä) yhteyteen voi liittyä lukumääräsuhde (ks. jäljempänä) yhteys voi olla myös useamman kuin kahden käsitteen välinen (ei ole suositeltavaa; kuvaus on purettavissa kahden välisiksi yhteyksiksi) myös muunlaisia yhteyksiä: kooste, riippuvuus, muodoste, erikoistaminen,... [tarkastellaan esimerkkien avulla jäljempänä] linkki on todellinen yhteys (ilmentymä) kahden olion välillä Luokkakaaviot 24
Luokkien etsintä järjestelmään sisältyvät luokat ja yhteydet löytyvät määrittelyn yhteydessä tarkasteltaessa järjestelmän toimintaa Hannu Jaakkola luennoi OTP-kurssin (opettaja) (yhteys) (kurssi) tässä: predikaatti kuvaa yhteyttä ja substantiivi luokkaa Luokkakaaviot 25
Attribuutit attribuutit: luokkaa kuvaavat ominaisuudet (arvot muodostavat luokan (olion) tilan) nimi, opiskelijanumero, osoite, puhelinnumero,. attribuuttien sijoittelu luokkiin ei ole selvää esim. opintoviikot (voi olla kurssi tai opintojakso) attribuutit eivät saa olla toistuvia attribuuttien sijoittelu luokkiin saattaa vaikuttaa myös kaavion rakenteeseen edellä tarvitaan assosiatiivinen luokka suoritus (attribuutit arvosana, suorituspäivä), koska sen attribuutteja ei ole mahdollista sijoittaa yhteyden luokkiin (assosiatiiviluokka)» attribuutit liittyvät tässä tapauksessa yhteyden olemassaoloon eli niitä ei ole (tai niillä ei ole arvoa) jos yhteyttä ei ole olemassa Luokkakaaviot 26
Lukumääräsuhteet yhteyden luonnetta kuvaavat lukumääräsuhteet 1-1 (yksi yhteen): jokaista oliota A vastaa vain yksi olio B ja päinvastoin 1-N (yksi moneen): jokaista oliota A vastaa monta oliota B ja oliota B vastaa täsmälleen 1 olio A N-M (monta moneen) jokaista oliota A vastaa monta oliota B ja päinvastoin lukumääräsuhteen lukumääräalue (kardinaliteetti) voi olla mm. 1 täsmälleen yksi 0..1 nolla tai yksi 1..* monta, vähintään 1 0..* monta, ei välttämättä yhtään... Luokkakaaviot 27
lukumääräsuhteet lukumääräsuhteet kaaviossa esitetään todellista tilannetta kuvaavat ala- ja ylärajat vaikuttaa tietokannan rakenteeseen!» huolehdittava siitä, että lukumääräsuhde on oikea» korjaaminen (etenkin monimutkaisempaan suuntaan) on tietokannan rakenteellisten ratkaisuiden kiinnittämisen jälkeen vaikeaa» suhde 1 suhteeksi N - mitä vaikuttaa tietokannan rakenteessa?) Luokkakaaviot 28
lukumääräsuhteet Lukumääräsuhteen vaikutus tietorakenteen toteutukseen aina yksi kurssi opettaja kurssi opettaja opettaja kurssi kurssi1 kurssi2 kurssi3 nolla tai yksi kurssia nolla... monta kurssia (lukumääräsuhteen vaikutus toteutukseen: tietorakenne ja käsittelytapa muuttuu) Luokkakaaviot 29
lukumääräsuhteet Opiskelija nimi op.nro osoite ilmoittaudu() 0..* kurssi osallistuu kurssitunnus periodit 1..* 0..* lukukausi suorittaa 1 kuuluu 0..* 0..* tentti 0..* 1 0..* <kuvaa opintojakso kuvaus luennoi opettaja 0..1 nimi osoite henkilönro suoritus arvosana ov-määrä pvm mitä edellinen kuvaus kertoo kuvausta vastaavasta reaalimaailmasta? kurssilla on vähintään yksi osallistuja opiskelija osallistuu nollaan tai useampaan kurssiin kurssi vastaa täsmälleen yhtä tiettyä opintojaksoa kaaviota voidaan testata sovittamalla siihen todellisia tapauksia Luokkakaaviot 30
Luokkakaavio ja tietokantarakenne käsitekaavionäkökulma luokkakaavio vastaa perinteistä käsitekaaviota» luokka ~ käsite käsitekaavio kuvaa relaatiotietokannan rakennetta (yhteyksien normalisoinnin jälkeen)» käsitteet (luokat) vastaavat tauluja» attribuutit vastaavat taulun sarakkeita» yhteydet vastaavat viiteavaimien avulla rakentuvia liityntöjä taulujen välillä» metodit vastaavat toimintokuvauksessa esiintyviä operaatioita automaattinen tietokantakuvauksen generointi käsitekaaviosta (luokkakaaviosta) Luokkakaaviot 31
Rakenneominaisuudet luokkakaaviot ovat kehittyneet osana oliotekniikoiden kypsymistä; oliopiirteitä ovat mm. yleistys / erikoistaminen koostuminen / komponenttius rajapintaoperaatiot» interface-rakenteet yleistys / erikoistaminen - periytymismekanismi luokat poikkeavat toisistaan vain muutaman attribuutin osalta» yhteiset piirteet isäluokan (yliluokan) tasolla» erikoistetut piirteet lapsiluokassa (aliluokassa)» ylimäärittely virtuaalimetodit: mahdollistaa suunnittelutason joustavat ratkaisut ja pakottaa toteutuksen noudattamaan sovittua rajapintaa kun luokkaa vastaava ilmentymä tietojärjestelmässä syntyy, se ei voi elinaikanaan muuttua toiseksi alityypiksi (ks. seuraava kuva) Luokkakaaviot 32
Yleistys, erikoistaminen, periytyminen yliluokka on abstrakti luokka, jota vastaavaa oliota ei tietojärjestelmässä ole todelliset oliot (ilmentymät) kuuluvat johonkin aliluokkaan (koko elinaikansa) aliluokka perii yliluokan ominaisuudet (attribuutit ja metodit) ylimäärittely voi uudelleenmääritellä perityn ominaisuuden aliluokan tasolla erikoistamismekanismi mahdollistaa luokan käyttämisen kehitystyössä, vaikka sen tarkaa sisältöä ei tunneta ja se tarkentuu vasta sunnittelutyön edetessä erikoistaminen ja ylimäärittely eivät muuta yliluokan tasolla sovittua rajapintasopimusta yliluokan ominaisuudet ovat suunnittelutyössä käytetettävissä vaikka lopullista aliluokan rakennetta ei kaikkien ykstyiskohtien osalta tunneta myöhemminb määräytyviä yksityiskohtia ei luonnollisesti voi käyttää (ennekuin ne tunnetaan) Luokkakaaviot 33
yleistys, erikoistaminen, periytyminen H-auto a L-auto e c f d g b K-auto Auto a,b,c,d,e,f,g Iso Iso massiivinen massiivinen luokka luokka Kaksi Kaksi ratkaisua: ratkaisua: yksi yksi luokka, luokka, jossa jossa on on kaikkien kaikkien kolmen kolmen erityyppisen erityyppisen olion olion ominaisuudet ominaisuudet TAI TAI erikoistamisrakenne, erikoistamisrakenne, jossa jossa on on yhteiset yhteiset (ja (ja mahdollisesti mahdollisesti erikoistettavat) erikoistettavat) ominaisuudet ominaisuudet erikoistettujen erikoistettujen ominaisuuksien ominaisuuksien sijaitessa sijaitessa aliluokissa. aliluokissa. Tarve Tarve ratkaisee. ratkaisee. Tehottomuus! Tehottomuus! H-auto a L-auto e c f d g b K-auto d periytyy periytyy a,b,c a,b,c luokkaspesifejä luokkaspesifejä e,f,g e,f,g ylimääritelty ylimääritelty (yksi (yksi tarpeeton!) tarpeeton!) H-auto d, a, e,f(,g) Auto d, e,f,g K-auto d, b, f,g(,e) L-auto d, c e,g(,f) Luokkakaaviot 34
Fyysinen ilmentymä vs. looginen rakenne Kun Kun luokkaa luokkaa vastaava vastaava olio olio syntyy syntyy tietojärjestelmässä, tietojärjestelmässä, määräytyy määräytyy sen sen tyyppi tyyppi (lapsiluokan (lapsiluokan tasolla). tasolla). Olio Olio edustaa edustaa tätä tätä luokkaa luokkaa koko koko olemassaolonsa olemassaolonsa ajan ajan ei ei siis siis voi voi muuttua muuttua toisen toisen lapsiluokan lapsiluokan jäseneksi jäseneksi ( henkilöautosta ( henkilöautosta ei ei voi voi tulla tulla kuorma-autoa ). kuorma-autoa ). Luokkakaaviot 35
Yleistys / erikoistaminen: esimerkki tili tilinro saldo otto() pano() saldokysely() tili tilinro saldo otto() pano() saldokysely() 1 {xor} 1 luotollinen tili luottoraja 0..1 0..1 käyttötili luotollinen tili luottoraja otto() käyttötili otto() rajoite TAI: tilinro saldo tili otto() pano() saldokysely() luotollinen tili luottoraja käyttötili otto() Luokkakaaviot 36
Yleistys / erikoistaminen: esimerkki luotollinen tili tilinro saldo luottoraja otto() pano() saldokysely() TAI käyttötili tilinro saldo otto() pano() saldokysely() Edellisestä luokkakaaviosta realisoituvat luokat luokat Luokkakaaviot 37
Periytyminen aliluokka perii yliluokan attribuutit ja operaatiot aliluokka voi määritellä myös omia attribuuttejaan ja operaatioitaan myös ylimäärittely (attribuutti tai operaatio määritellään uudelleen aliluokssa) on mahdollinen käytetään periytymiseen pohjautuvassa uudelleenkäytössä) mahdollistaa suunnittelutason joustavat ratkaisut ja pakottaa toteutuksen noudattamaan sovittua rajapintaa» virtuaalifunktiot» joustavuus, uudelleenkäyttö Luokkakaaviot 38
Koostuminen / komponentti(us) koostumisella ilmaistaan luokan olevan toisen komponentti (tai päinvastoin) olion kiinteä riippuvuus toisesta osana koosterakennetta ilmaistaan muodosteen (composition) avulla koosteeseen kuuluvien olioiden välillä on elinikäriippuvuus kuvataan tummennetulla koostesymbolilla komponentti voi olla muodostesuhteessa vain yhteen isäntäolioon kerrallaan Luokkakaaviot 39
Periytyminen ja koostuminen: esimerkki korttikasa kortti erikoistaminen sijaintipöydällä lisääpäälle() otaalta() otapäältä() Kooste Kooste 0..* arvo maa kuvapuolinäkyvissä käännä() yleistäminen pöytäpakka käännäpäältä() otaalta() käsipakka sekoita() käsi korttejaaluksi lajittele() Pöytäpakka, Pöytäpakka, käsipakka käsipakka ja ja käsi käsi ovat ovat (erikoistettuja) (erikoistettuja) korttikasoja. korttikasoja. Korttikasa Korttikasa koostuu koostuu korteista korteista (0 (0... n). n). Luokkakaaviot 40
periytyminen ja koostuminen: esimerkki pöytäpakka otapäältä() lisääpäälle() käännäpäältä() otaalta() 0..* kortti arvo maa kuvapuolinäkyvissä käännä() Yksi Yksi edellisestä edellisestä kuvauksesta kuvauksesta realisoituva realisoituva luokka luokka on on pöytäpakka, pöytäpakka, joka joka perii perii osan osan ominaisuuksistaan, ominaisuuksistaan, ylimäärittelee ylimäärittelee osan osan ja ja määrittelee määrittelee joitain joitain omia omia ominaisuuksiaan. ominaisuuksiaan. Luokkakaaviot 41
Muodoste: esimerkki yritys osasto henkilö 0..* 1..* Yritys Yritys muodostuu muodostuu osastoista osastoista (0..n). (0..n). Osastoa Osastoa ei ei ole ole olemassa olemassa jos jos ei ei ole ole yritystä. yritystä. Osasto Osasto koostuu koostuu henkilöistä, henkilöistä, mutta mutta voi voi olla olla olemassa olemassa vaikka vaikka siihen siihen ei ei olekaan olekaan liittyneenä liittyneenä yhtään yhtään henkilöä. henkilöä. Luokkakaaviot 42
Rajapintojen kuvaaminen rajapintojen suunnittelu on yksi ohjelmistosuunnittelun keskeisimpiä tehtäviä (moduulirakenne, kotelointi) luokkien operaatiot muodostuvat vasta suunnitteluvaiheessa, alustava luokkarakenne on määrittelyn tulos (eriaikainen ratkaisun sitominen) tämän takia rajapintoja on tarkoituksenmukaista käsitellä erillään niiden toteutuksesta rajapinta määritellään luokkana, joka sisältää rajapinnan operaatioiden määrittelyt nämä periytetään (realization; toteutus) rajapinnat toteuttaviin luokkiin mekanismi mahdollistaa rajapinnan käytön suunnittelussa, vaikka rajapintaa ei ole määritelty yksi luokka voi toteuttaa useita rajapintoja Luokkakaaviot 43
Rajapinta, toteutussuhde: notaatio ja esimerkki rajapinta realization <<Interface>> varoitin varoita() veturi varoita() void kaynnista() { while (1) {... if (kattilapaine > maxpaine) { vptr->varoita("kohta pamahtaa") }... <<Interface>> ohjaus kaynnista() sammuta() asetanopeus() <<uses>> <<thread>> höyrykone kaynnista() sammuta() asetanopeus() <<Interface>> huolto lisäävettä() poistatuhka() <<thread>> polttomoottori realization rajapinta Kaikkien Kaikkien moottoreiden moottoreiden (polttomoottori, (polttomoottori, höyrykone, höyrykone, ) ) on on toteutettava toteutettava rajapinta rajapinta ohjaus. ohjaus. Kaikkien Kaikkien höyrykonetta höyrykonetta käyttävien käyttävien laitteiden laitteiden on on toteutettava(<<uses>>) rajapinta rajapinta varoitin varoitin (riippuvuus; (riippuvuus; tarjoaa tarjoaa operaation, operaation, jolla jolla varoitetaan varoitetaan liian liian korkeasta korkeasta höyrynpaineesta). höyrynpaineesta). Rajapintaluokat Rajapintaluokat periytetään periytetään rajapinnat rajapinnat toteuttaviin toteuttaviin luokkiin luokkiin (realization). (realization). Yksi Yksi luokka luokka voi voi toteuttaa toteuttaa useita useita eri eri rajapintoja rajapintoja (ks. (ks. höyrykone). höyrykone). Luokkakaaviot 44
Stereotyypit ja ikonit stereotyypit esitetään kaksoisväkästen (guillements) välissä toimivat komponenttia täsmentävänä lisämääreenä voivat esiintyä missä useissa eri komponenttityypeissä sekä yhteyksissä standardeja: <<interface>>, <<thread>>, <<uses>> voidaan määritellä itse lisää ikonit korvaa tiettyä stereotyyppiä kuvaavan luokkasymbolin ja stereotyyppimääreen kuvaustekniikassa on valmiita ikoneita; käyttäjä voi laajentaa menetelmää omilla ikoneilla Luokkakaaviot 45
Rajapinnat, ikonit: esimerkki Rajapinta, Rajapinta, supistettu supistettu muoto. muoto. Veturi Veturi toteuttaa toteuttaa rajapinnan rajapinnan varoitin. varoitin. varoitin Moottori Moottori toteuttaa toteuttaa (käyttää) (käyttää) rajapinnan rajapinnan varoitin varoitin Veturit Mootorit ohjaus Kaikki Kaikki moottorit moottorit toteuttavat toteuttavat rajapinnan rajapinnan ohjaus ohjaus Luokkakaaviot 46
Pakkaukset pakkaus on väline mallin elementtein ryhmittelyyn sisältää luokkia, toisia pakkauksia, komponentteja, (kuvauksen tarpeen mukaan) voidaan käyttää myös käyttötapausten ryhmittelyyn rajapintoja voidaan liittää luokkiin ja komponentteihin rajapintaikoni pakkauksessa: pakkauksen sisällä on luokkia tai kopmponentteja, jotka toteuttavat rajapinnan Luokkakaaviot 47
Kaavioiden ilmaisuvoima kaavion oikeellisuutta voi testata todellisilla tilanteilla ja kysymyksillä, joihin sen pitäisi kyetä sopia (tilanteet todellisesta ympäristöstä; oliot ja linkit) ilmaisuvoima ei aina ole riittävä sisältää rakenteellista väljyyttä rajoitukset mahdollistavat tiukentamisen» esim. edellä tili voi olla samanaikaisesti luotollinen ja käyttötili mikäli tätä mahdollisuutta ei rajoiteta erillisellä lisämääreellä (tekstimuotoinen selitys) kaikkien sallittujen (todellisuudessa esiintyvien) tilanteiden on oltava kaaviossa mukana Luokkakaaviot 48
kaavioiden ilmaisuvoima kaikkia rajoituksia ei aina pysty ilmaisemaan => lisätään rajoitteita ja kommentteja kaavioita voi testata hakemalla siita vastauksia kysymyksiin ja piirtelemällä kuvia esimerkkitilanteista mahtavatkohan asiakkaat ymmärtää kaavioita? piirtämisessä ero luokka ja olio» olio = luokkasymboli, jossa ilmentymän identifikaatio ja luokan nimi alleviivataan Luokkakaaviot 49
kaavioiden ilmaisuvoima henkilö nimi osoite puh autonmerkki vuosimalli rekisterinumero 0..1 pomo Henkilö ei saa olla oma esimiehensä esimies Ahto Simakuutio : henkilö pomo jaospäällikkö : vakanssi konsultti : vakanssi Aikon Oyj : yritys alainen 0..* työskentelee 0..* alainen vakanssi Teemu Teekkari : henkilö testaaja : vakanssi 0..* yritys Henkilö Henkilö työskentelee työskentelee yrityksessä yrityksessä ja ja (henkilö) (henkilö) on on pomona pomona tietyille tietyille vakansseille. vakansseille. Kysymys 1: missä yrityksissä A.S. on töissä? Kysymys 2: kuka on T.T.:n esimies, kun hän on Aikonilla työssä? Kysymys 3: mikä on A.S.:n vakanssi näissä työsuhteissa EI: Kysymys 4: mikä on T.T.:n esimehen titteli kohdan 2 kysymyksessä. Luokkakaaviot 50
kaavioiden ilmaisuvoima henkilö nimi osoite puh autonmerkki vuosimalli rekisterinumero Ahto Simakuutio : henkilö jaospäällikkö : vakanssi pomo Aikon Oyj : yritys 0..* työskentelee 0..* yritys vakanssi pomo 0..1 alainen 0..* esimies Teemu Teekkari : henkilö konsultti : vakanssi alainen testaaja : vakanssi Henkilö Henkilö työskentelee työskentelee yrityksessä yrityksessä Työsuhteeseen Työsuhteeseen liittyy liittyy vakanssi. vakanssi. Vakanssien Vakanssien välillä välillä on on määritelty määritelty esimies-alainen esimies-alainen suhde. suhde. Kysymys 4: mikä on T.T.:n esimehen titteli kohdan 2 kysymyksessä. Luokkakaaviot 51
Kaavioiden laatiminen kaavioita voidaan käyttää esitutkimuksessa, määrittelyssä ja suunnittelussa esitutkimus ja määrittely: sovellusalueen käsitteet (domain object model), järjestelmän rajaus, analysis object model, järjestelmän tietosisällön määrittely (käsitekaavio, conceptual model), usein myös tietokannan rakenne suunnittelu: ohjelman rakenne (design object model), tietokannan rakenne (esimerkiksi relaatiokannan graafinen esitys) kaavio dokumentoi "sanaston", jolla asioista voi keskustella Luokkakaaviot 52
kaavioiden laatiminen kaavio kertoo, millaiset tilanteet ovat mahdollisia kaavio ohjaa kysymään oikeita kysymyksiä yleisiä periaatteita luokan jäsenillä on aina 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. Luokkakaaviot 53
kaavioiden laatiminen menettely: laaditaan alustava kaavio : oma asiantuntemus, haastattelut,... kaavioiden analysointi» luokkien ja yhteyksien poistaminen» luokkien ja yhteyksien lisääminen» lukumääräsuhteiden tarkennus» attribuuttien (ja metodien) sijoittelu luokkiin kaavion testaaminen ja kokeilu erilaisilla esimerkeillä muokkaus kokeilun tulosten perusteella varautuminen tulevaisuuden muutoksiin attribuuttien sijoittelu tilankäytön kannalta epäedulliseen kohteeseen lukumääräsuhteen yläraja 1 korvataan ylärajalla * Luokkakaaviot 54
Kaavioiden muokkaaminen: esimerkki Vaatimus: luokissa ei saa olla toistuvia attribuutteja Toimenpide: lisätään uusi luokka opiskelija suorittaa tentti tentti suoritus toistuvat toistuvatattribuutit attribuutit omaan omaanluokkaan Luokkakaaviot 55
kaavioiden muokkaaminen: esimerkki toistuvat toistuvatattribuutit attribuutit omaan omaanluokkaan työntekijä lapsi työntekijä on huoltaja > lapsi» Vaatimus: luokissa ei saa olla toistuvia attribuutteja» Toimenpide: lisätään uusi luokka Luokkakaaviot 56
kaavioiden muokkaaminen tarpeetonta redundanssia (tiedon toistuminen monessa paikassa) ei saa esiintyä eikä tieto saa olla pääteltävissä muista tiedoista; redundanssi tieto poistetaan ja korvataan luokalla ja yhteyksillä (luokka suoritus opintosuoritusrekisteriä koskevassa esimerkissä) luokalla on vain yksi attribuutti (voidaan yhdistää muuhun luokkaan) Luokkakaaviot 57
kaavioiden muokkaaminen: esimerkki Tilanne: osa attribuuteista on olemassa vain osalle luokan ilmentymistä Muutos: lisätään uusi luokka, joka sisältää nämä attribuutit, ja yhteys alkuperäisestä uuteen henkilö henkilö autonrno henkilö henkilö omistaa auto auto rno rno Luokkakaaviot 58
kaavioiden muokkaaminen: esimerkki Tilanne: kahdella luokalla on yhteisiä attribuutteja Muutos: lisätään uusi luokka, joka sisältää nämä attribuutit ja yhteys alkuperäisestä uuteen saattaa olla ratkaistavissa myös yleistys/erikoistamis -mekanismin avulla - huom! ilmentymän tyypin muuttumattomuus) henkilö henkilö opiskelija opettaja opiskelija 1 0..1 1 0..1 opettaja Luokkakaaviot 59
kaavioiden muokkaaminen: esimerkki henkilö Vaihtoehtoiset Vaihtoehtoiset tavat tavat opettajan opettajan ja ja opiskelijan opiskelijan luokkakaavioksi. luokkakaavioksi. opiskelija opettaja opettavaopiskelija henkilö Eo. Eo. kaavioiden kaavioiden mahdollistamat mahdollistamat todellisten todellisten olioiden olioiden rakenteet rakenteet ovat ovat erilaisia. erilaisia. Minkälaisia? Minkälaisia? opiskelija 1 0..1 1 0..1 opettaja Luokkakaaviot 60
kaavioiden muokkaaminen: esimerkki Tilanne: osa luokan attribuuteista on olemassa vain osan ilmentymän eliniästä Muutos: uusi luokka asiakas lainatiedot asiakas omaa lainatiedot Luokkakaaviot 61
kaavioiden muokkaaminen: esimerkki Tilanne:luokkien ilmentymien elinikä on sama ja niitä yhdistää 1-1 -yhteys Muutos: luokat voidaan yhdistää opettaja 1 1 palkka määräytyy palkkaus peruste opettaja palkkausper. Luokkakaaviot 62
kaavioiden muokkaaminen: esimerkki Tilanne: yhteys on pääteltävissä toisista yhteyksistä Muutos: yhteys voidaan poistaa opiskelija? suorittaa kurssi kurssi osallistuu tentti tentti Luokkakaaviot 63
kaavioiden muokkaaminen: esimerkki Tilanne: luokassa on vain yksi olio Muutos: luokka poistetaan työntekijä on naimisissa aviopuoliso työntekijä aviopuoliso. Luokkakaaviot 64
kaavioiden muokkaaminen Laadintaa koskevista yleisperiaatteista joudutaan käytännössä toisinaan luopumaan toteutukseen liittyvistä syistä (redundanssin lisääminen, yhteyksien lisääminen, toistuvien kenttien salliminen, käsitteiden yhdistely). Tietokannan normalisointi saattaa muuttaa myös rakennetta Luokkakaaviot 65
Muita notaatioita luokkakaavioiden notaation perusta on käsitekaavioissa Chenin käsitekaaviot sisältää luokkakaavioiden perusilmaisuvoiman» käsitteet, attribuutit, yhteydet» myös yli- ja aliluokka Martinin käsitekaavio graafiset yhteysmerkinnät OMT-luokkakaavio Boochin luokkakaavio Luokkakaaviot 66
Chenin käsitekaavio Huom: lukusuuntaa kuvaava nuoli opiskelija 0:N kurssi 0:N <-kuvaa 1:1 1:N osallistuu opintojakso 0:N 1:1 0:N 0:N 0:N suorittaa tentti kuuluu luennoi 0:1 suoritus opettaja assosiatiivinen käsite (yhteyteen liittyvät attribuutit) Luokkakaaviot 67
Martinin käsitekaavio opiskelija suoritus 1:n 0:n 0:N 1:1 osallistuu kurssi kuvaa 0:N 1:1 luennoi 0:1 kuuluu tentti opintojakso opettaja opiskelija 1:N osallistuu 0:N kurssi 0:N <-kuvaa 1:1 opintojakso 0:N 1:1 0:N 0:N suorittaa tentti 0:N kuuluu luennoi 0:1 suoritus opettaja Luokkakaaviot 68
OMT-luokkakaavio Opiskelija nimi op.nro osoite 1+ osallistuu Kurssi kurssitunnus periodi lukukausi <-kuvaa Opintojakso kuvaus ilmoittaudu() kuuluu luennoi suorittaa Suoritus arvosana ov-määrä Tentti pvm Opettaja nimi osoite henkilönro Luokkakaaviot 69
Boochin luokkakaavio Opiskelija nimi op.nro osoite ilmoittaudu() osallistuu 1..n 0..n Kurssi kurssitunnus periodi lukukausi <-kuvaa 0..n 1 Opintojakso kuvaus 0..n kuuluu 0..n luennoi suorittaa Suoritus 0..n Tentti pvm 0..1 Opettaja nimi osoite henkilönro arvosana ov-määrä Luokkakaaviot 70
Esimerkki: kirjasto Kirjaan liittyy nimi, kirjoittajat, ISBN-numero, kustantaja, painovuosi, sivumäärä. Lisäksi kussakin kirjassa on yksikäsitteinen numerotunnus. Lainaajilla on nimi, osoite ja puhelinnumero. Järjestelmä ylläpitää tietoja lainauksista: kuka lainasi ja milloin. Piirrä luokkakaavio. Luokkakaaviot 71
esimerkki: kirjasto Lainaus Kirja 0..n lainaus edustaa 0..n 1 Nimike 0..n k irjoittaa Tarpeellisuus? Tarpeellisuus? Käsittelytarve Käsittelytarve ratkaisee! ratkaisee! 0..1 Lainaaja 0..1 Tekijä Luokkakaaviot 72
Esimerkki: maalausrobotti. Tarkastellaan maalausrobotin tuotannonohjausta. Robotilla maalataan useita eri tuotteita. Asiakas tilaa tuotteita ja määrää tuotteiden värityksen. Maalarit tallettavat järjestelmään maalausohjelmia, joista asiakas valitsee värityksen. Järjestelmä pitää kirjaa myös tilausten toteutumisesta. Luokkakaaviot 73
esimerkki: maalausrobotti Tarpeellisuus? Tarpeellisuus? Käsittelytarve Käsittelytarve ratkaisee! ratkaisee! Maalari Robotti maalaa Tuote 1 1 0..n Kaavion Kaavion luokkien luokkien (käsitteiden) (käsitteiden) relevanssi relevanssi riippuu riippuu tarpeesta. tarpeesta. Olennaisen Olennaisen erottaminen erottaminen epäolennaisesta: epäolennaisesta: esim. esim. tilausjärjestelmän tilausjärjestelmän kannalta kannalta robotti robotti ja ja malari malari ovat ovat tarpeettomia; tarpeettomia; väritys väritys voi voi olla olla osa osa tuotteen tuotteen ominaisuutta. ominaisuutta. Laatujärjestelmän Laatujärjestelmän kannalta kannalta robotti robotti ja ja maalari maalari taas taas voivat voivat olla olla tarpeellisia tarpeellisia tietoja. tietoja. 0..n tilaa 1 Asiakas tallettaa 0..n Väritysoh jelma Tarpeellisuus? Tarpeellisuus? Käsittelytarve Käsittelytarve ratkaisee! ratkaisee! Luokkakaaviot 74
Kertauskysymykset Mitä eroa on koosteella ja aidolla koosteella (muodoste). Mitä tarkoitetaan aktiivisella oliolla ja miten se esitetään luokkakaaviossa. Järjestelmän kuvaustyössä osa kuvauksista kuvaa esimerkinomaisesti reaalimaailmassa tapahtuvia toimintoja tai sen rakenteita, osa taas mallintamisen näkökulmasta antaa kattavan kuvauksen joko mallinnettavan kohteen rakenteesta tai sen käyttäytymisestä. Mikä on tällaisten esimerkki-kuvausten rooli laadittaessa järjestelmän kattavaa kuvausta. Mitkä kuvausmenetelmät ovat luonnehdiottavissa esimerkkikuvauksiksi ja mitkä kattaviksi kuvauksiksi. Minkälaisen prosessin tuloksena rakennetta / toimintaa koskevat kattavat kuvaukset saadaan. Kuvaa luokkakavioiden, tapahtumasekvenssikavioiden ja tilakaavioiden välinen yhteys tietojärjestelmän kuvaamisessa. Mitä eroa on yhteydellä ja linkillä. Selitä kurssimateriaalissa oleva kurssien suoritusten hallintaa kuvaava luokkakaavio. Mitä kuvaa luokkakaavion yhteysviivassa oleva lukumääräsuhde. Mitä kuvaa oliokavion yhteysviivassa oleva lukumääräsuhde. Millä eri keinoilla voi luokkakaaviokuvauksessa tarkentaa yhteyden luonnetta. Mitä tarkoitetaan luokkakaaviossa yleistämisellä ja erikoistamisella. Mitä tarkoitetaan periytymisellä. Mitä periytymismekanismissa tarkoitetaan ylimäärittelyllä. Miksi tällaista tarvitaan. Periytyminen on yksi uudelleenkäyttöä tukeva ratkaisu. Mitä hyötyä periytymismekanismin käyttömahdollisuudesta on uudelleenkäytön näkökulmasta. Kurssimateriaalissa on esitetty pankkitilien eri muotoja koskeva luokkakaavio. Toisessa kaaviossa asia ilmaistaan perinteisen yhteysrakenteen muodossa ja toisessa hyödyntämällä erikoistamismekanismia. Mitä eroa loogisesta näkökulmasta on näillä ilmaisuilla kun tarkastellaan asiaa syntyvän tietokantaratkaisun näkökulmasta. Mikä on virtuaalifunktio (-metodi). Selitä kurssimaterialissa oleva korttikasan rakennetta kuvaava luokkakaavio. Luokkakaaviot 75
kertauskysymykset Kuvaa erillisinä luokkakuvauksina kaikki em. luokkakaavioista synnytettävissä olevat luokat. Mikä merkitys on rajapintakuvauksella UMLluokkakaavioissa. Mihin niitä tarvitaan. Selitä kurssimateriaaliin sisältyvä rajapintoja käsittelevä luokkakaavio (juna, mottorit,...). Miksi rajapintakuvausten käyttö on tässä yhteydessä tarpeellista. Mitä ovat stereotyypit ja ikonit UMLssä. Mihin niitä voi käyttää. Selitä kurssimateriaalissa olevan kahden työsuhteen ja esimiesaseman kuvaamiseen liittyvän luokkakaavion ilmaisuvoiman eroavuudet. KUrssimateriaalissa esitellään kolme eri luokkakaaviota opiskelijan ja opettajan kuvaamiseksi tietojärjestelmässä. Kuvaustapoina on yhteysrakenteen kautta tehtävä määrittely, periytymismekanismilla tehty määrittely ja moniperitymistä hyödyntävä malli. Mitä eroa näillä kuvauksilla on tietojärjestelmään syntyvien olioiden näkökulmasta. Anna luokkakaavio sairaalan henkilökunta- ja potilasrekisterisovellusta varten. Harjoitustehtäviä kirjasta Koskimies, Oliokirja. Kurssimateriaalin (tämän osion) lopussa on käsitelty yksinkertaisen kirjastojärjestelmän toimintaa esimerkkinä luokkakaavion laatimisesta. Selitä järjestelmän luokkakaavioratkaisu ottaen erityisesti kantaa siihen, minkälaisia ilmaisumahdollisuuksia eri kaaviovaihtoehdot antavat. Kurssimateriaalin (tämän osion) lopussa on käsitelty maalausrobotin avulla maalattavien tuotteiden tilausjärjestelmän toimintaa. Selitä järjestelmän luokkakaavioratkaisu ottaen erityisesti kantaa siihen, minkälaisia ilmaisumahdollisuuksia eri kaaviovaihtoehdot antavat. Anna luokkakaavio, jossa on vähintään 10 suhdetta (assosiaatio, kooste, yleistys/erikoistus) seuraavien luokkien kesken. Nimeä assosiaatiot. Voit tarvittaessa lisätä muita luokkia. Luokat: koulu, pelikenttä, rehtori, johtokunta, luokkahuone, kirja, oppilas, opettaja, kahvila, tietokone, pöytä, tuoli, ovi, luokanvalvoja, järjestäjä Luokkakaaviot 76
kertauskysymykset Anna aterioivien filosofien ongelman luokkakaavio. Ongelman asetelma on seuraava: Viisi filosofia istuu pyöreässä pöydässä, jokaisessa välissä on yksi haarukka, jonka vieressä olevat filosofit jakavat. Kukin filosofi tarvitsee kahta haarukkaa syödäkseen: jokainen haarukka on siten joko pöydällä tai filosofin kädessä. Filosofi joko ajattelee tai syö. Anna luokkakaavio kirjaston tiedonhallintajärjestelmälle. Kirjastoon sisältyvät mm. seuraavat käsitteet: kirja, lehti, cd-levy, videonauha, lainattava teos, ei-lainattava teos, lainaaja-asiakas, lainauskortin numero, osoite, osasto, hylly, tekijä(t), kirjan nimi, julkaisupaikka- ja vuosi, lainausaika, lainauspaikka, kirjastoauto, kirjastotalo. Järjestelmässä on pystyttävä toteuttamaan mm. kyselyt: "kenellä on lainassa kohde x?", "missä on sijoitettuna kohde x?", "mitä kohteita on lainassa henkilöllä x?", "koska kohde x vapautuu lainasta?". Voit täydentää tehtävää tarpeen mukaan. Luokkakaaviot 77