Luokka- eli ER- eli käsitekaaviot (Luku 6) Tämä luku on muuttunut melkoisesti siirryttäessä painoksesta 6 painokseen 7. - Kalvomateriaali on kurssin www-sivuilla ja luku on kirjan www-sivuilla pdf-muodossa. Peruskomponentit Esimerkki Pieni harjoitus Sivuhyppäys: ohjelmistojen oliokeskeisyys (OO, Object Orientation), oliot ja luokat Koostuminen Yli/alityypit (eli periyttäminen eli erikoistaminen) Rajapintojen määrittely Lisukkeita, jotka eivät ole tällä kurssilla tärkeitä Kaavioiden käyttötavoista ja ilmaisuvoimasta Kaavioiden laatimisohjeita ja esimerkkejä Muita kaavionotaatioita vaatimukset 7.10.2003/ijh
Kaaviot 7.10.2003/ijh Käyttötapaus Käsittele puu Kuljettaja Sahaa tukki 7.10.2003/ijh
Luokka (käsite, kohde) ja yhteys (vastaa kuvaa 6.1) Olio? 7.10.2003/ijh
Oliot, lukumääräsuhteet (kuva ei kirjassa) 7.10.2003/ijh
Esimerkki (kuva 6.2) lukusuunta navigointisuunta assosiatioluokka UML 2.0? 30.9 7.10.2003/ijh
University lab library The students and personnel borrow books An ID card with barcode is used to identify the clients. There is a maximum amount of books that can be borrowed by one client. There is a maximum time for a loan. Books can be reserved. … Use cases? Class diagram? 7.10.2003/ijh
Sivuhyppäys: ohjelmistojen oliokeskeisyys (OO, Object Orientation) Oliomenetelmät ovat 1980-luvun loppupuolelta lähtien vallanneet alaa ja ovat nyt “valtavirta” -- toisaalta ohjelmistot kehitetään käytännössä useimmiten ilman sen juhlallisempia menetelmiä. Perusajatuksena on sovellusalueen mallintaminen ohjelmassa luomalla ohjelmaan todellisuutta vastaavat oliot (tilaus, kuorma-auto, anturi, jne.) luokittelu (abstraktiot) olioiden väliset yhteydet olioiden koostuminen toisista olioista OOA: Object Oriented Analysis, oliomäärittely. OOD: Object Oriented Design, oliosuunnittelu OOP: Object Oriented Programming, olio-ohjelmointi. Oleellisinta olio-ajattelussa on ajattelutapa, ei toteutustekniikka (C, C++ -luokka, Java, COM-komponentti, Corba, Java-papu jne…). 7.10.2003/ijh
…ohjelmistojen oliokeskeisyys Oliokeskeisessä ajattelussa lähes mitä hyvänsä voi ajatella oliona: bitti, merkki, merkkijono, kokonaisluku, tiedosto, palvelin, kuorma-auto, pankkiyhteys, varasto, pankkitili … Oliolla on tila olion ”muisti” tila voi koostua toisista olioista, esimerkiksi pvm voi koostua päivästä, kuukaudesta ja vuodesta olion tila on ”kapseloitu” olion sisälle: sitä voi kysellä oliolta ja sitä voi muuttaa kutsumalla olion metodeita Oliolla on rajapinta joukko toimintoja, joilla oliota hallitaan, operaatiot, julkiset jäsenfunktiot, palvelut, metodit... Oliokeskeinen ohjelma koostuu joukosta keskenään kommunikoivia oliota. Oliot kommunikoivat lähettämällä toisilleen sanomia, ts. kutsumalla toistensa rajapintojen määrittelemiä. Luokka: oliot, joilla on sama käyttäytyminen (metodit) ja samat attribuutit, ovat instansseja eli ilmentymiä samasta olioluokasta. 7.10.2003/ijh
Muodostuminen (kuva 6.5) ja koostuminen muodoste (composition) kooste (aggregation) assosiaation erikoistapauksia 7.10.2003/ijh
Periyttäminen, yleistäminen, erikoistaminen (kuva 6.3) rajoite TAI: voisi vielä havainnollistaa henkilöesimerkillä 7.10 7.10.2003/ijh
Periyttäminen (kuva 6.4) yleistäminen erikoistaminen 7.10.2003/ijh
Rajapinnat, toteutus-suhde (kuva 6.6, vrt. periytyminen) ohjaus kaynnista() sammuta() asetaNopeus() <<Interface>> höyrykone <<thread>> veturi varoita() varoitin <<uses>> void kaynnista() { while (1) { .... if (kattilapaine > maxPaine) { vPtr->varoita("kohta pamahtaa") } realization polttomoottori heikko riippuvuus 7.10.2003/ijh
Rajapinnat 2 (kuva 6.7) 7.10.2003/ijh
Lisukkeet: Luokka Instantiation: Template WinType parameter Window<Xwindow> Window {abstract, author = KK status = tested} Property list (optional) Attribute list (optional) +size #visibility: Boolean = false -xptr: WinType Operation list (optional) +display() hide() +create() -attachXWindow(xwin: WinType*) + = public - = private # = protected = unknown Class operation (static) (simple name is enough for an attribute and operation, too) 7.10.2003/ijh
Lisukkeet: Yhteyksien erityispiirteitä has Navigointi Person * AccessRight Kvalifiointi Bank * Client accountnr * 1..* Roolien nimet Company Person employer employee 7.10.2003/ijh
Kaavioiden käyttötavoista 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. Kaavio kertoo, millaiset tilanteet ovat mahdollisia. Kaavio ohjaa kysymään oikeita kysymyksiä. 7.10.2003/ijh
Kaavioiden ilmaisuvoimasta Kaikkien sallittujen tilanteiden on oltava kaaviossa mukana. 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? 7.10.2003/ijh
Esimerkki ilmaisuvoimasta (1, kuva 6.8a) (Korjattu, UML-std:n mukaan kuvan 6.9 esimerkkitilanne olisi mahdoton (?), jos käytettäisiin assosiaatioluokkaa) Kysymys 1: missä firmoissa A.S. on töissä? Kysymys 2: kuka on A.S.:n esimies, kun hän on Aikonilla hommissa? Kysymys 3: mikä on A.S.:n esimiehen titteli kohdan 2 kysymyksessä. 7.10.2003/ijh
Esimerkki ilmaisuvoimasta (2, kuva 6.9a) 7.10.2003/ijh
Esimerkki ilmaisuvoimasta (3, kuva 6.8b) 7.10.2003/ijh
Esimerkki ilmaisuvoimasta (4, kuva 6.9b) 7.10.2003/ijh
Kaavioiden laatiminen: Luokat (1) Luokan jäsenillä on samat attribuutit ja sama käyttäytyminen (metodit). Tyypillisiä luokkia ”Konseptuaaliset” luokat: sovellusalueen käsitteet (toinen tapa sanoa lähes sama: käsitteet, jotka ovat mukana jokaisessa ajateltavissa olevassa ratkaisussa) itse keksityt metaforat yms, ”pure fabrication”: luokat, jotka keksitään ”tyhjästä” helpottamaan keskustelua sovelluksesta (määrittely- tai suunnittelutasolla) Suunnittelun MVC-malli (Model-View-Controller): Model-luokat sisältävät datan (usein konseptuaalinen luokka). View-luokka näkyy käyttöliittymässä. Controller-luokka sisältää käyttöliittymälogiikan. ... Luokkajako perustuu pysyviin ominaisuuksiin ei esimerkiksi olion väliaikaiseen tilaan. Esimerkki. Toiminnallisuuden jakaminen: ei mahtiluokkia (God class), jotka "osaavat" ja "tietävät" kaiken (muut luokat toimivat vain tiedon säilytyspaikkoina). 7.10.2003/ijh
Kaavioiden laatiminen: Luokat (2) Metodit saantimetodit (accessors) palauttavat tietoa olion tilasta muuttajametodit (mutators) muuttavat olion tilaa perussääntö: laita metodit sinne, missä tietokin on Attribuutit primitiivityypit esitetään attribuutteina abstraktit tietotyypit ja joskus muutkin oliot voivat esiintyä myös attribuutteina (vrt. muodoste ♦ ) assosiaatiot toteuttavia ”attribuutteja” ei yleensä esitetä attribuutteina kaavioissa Ei toistuvia kenttiä (ks. opiskelijarekisteri). Ei tarpeetonta redundanssia (sama tieto monessa paikassa, ov opiskelijarekisterissä). Ei puuttuvia kenttiä (Esimerkki). Ei turhia luokkia. 7.10.2003/ijh
Kaavioiden laatiminen: Yhteydet Olion A ja B voi yhdistää esimerkiksi seuraavanlainen suhde A on osa tai kuuluu B:n A sisältää tai omistaa B:n A kuvaa B:n A kommunikoi B:n kanssa A on tapahtuma, joka liittyy B:n A on fyysisesti B:n vieressä A käyttää B:tä A hallinnoi B:tä... Minimoi yhteydet luokkien välillä, ei redundantteja yhteyksiä (ks. opiskelijarekisteri). ”need-to-know”-periaate: jos olio A tarvitsee toiminnassan oliota B, siihen on päästävä jotenkin käsiksi, eli A:lla on oltava ”näkyvyys” (visibility) olioon B Assosiaatiot kuvaavat yleensä tilannetta, jossa näkyvyys on pysyväisluontoista, siis koko ajan olemassa Muissa tapauksissa käytetään riippuvuusnuolia, esim. olio B välitetään parametrina olion A operaatiolle olio B on väliaikainen, A:n metodi luo olion, käyttää sitä ja tuhoaa sen lopuksi Täysin staattisessa tilanteessa, esimerkiksi globaali objekti, jota kaikki käyttävät, yhteys jätetään usein kokonaan pois 7.10.2003/ijh
Kaavioiden laatiminen: Ohjeiden soveltamisesta Ehdottomia sääntöjä ei ole. Toteutusvaiheessa näistä peukalosäännöistä voidaan tehokkuussyistä joutua tinkimään. Periytymiseen liittyviin sääntöihin palataan OTM-kurssilla. 7.10.2003/ijh
Puuttuvia kenttiä (ei kirjassa) 7.10.2003/ijh
Periyttäminen (ei kirjassa, lähinnä kuva 6.10) 7.10.2003/ijh
Esimerkki Kirjaan liittyy nimi, ISBN-numero, kustantaja, painovuosi, sivumäärä ja kirjoittajat. Lisäksi kussakin kirjassa on yksikäsitteinen numerotunnus. Lainaajilla on osoite ja puhelinnumero. Järjestelmä ylläpitää tietoja lainauksista: kuka lainasi ja milloin. Piirrä ER-kaavio. 7.10.2003/ijh
Muut notaatiot: Chenin notaatio (kuva 6.11) 7.10.2003/ijh
Muut notaatiot: Martinin kohdekaaviot (kuva 6.12) 7.10.2003/ijh
Muut notaatiot: OMT (ei kirjassa) 7.10.2003/ijh
Muut notaatiot: Booch (ei kirjassa) 7.10.2003/ijh