Sisällys. 19. Unified Modeling Language (UML) Johdanto. Johdanto. Johdanto. Luokkakaavio:



Samankaltaiset tiedostot
19. Unified Modeling Language (UML)

UML Luokkakaavio 14:41

Sisällys. Mitä on periytyminen? Yksittäis- ja moniperiytyminen. Oliot ja perityt luokat. Periytymisen käyttö. 8.2

Mitä on periytyminen?

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.

TIE Samuel Lahtinen. Lyhyt UML-opas. UML -pikaesittely

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN

Luokkamalli LUOKKAKAAVIO. Tämän osan sisältö. Luokkamalli. Luokka ja olio. Luokkakaavio (class diagram)

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

9. Periytyminen Javassa 9.1

UML - unified modeling language

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

9. Periytyminen Javassa 9.1

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

UML ja luokkien väliset suhteet

Yhteydelle voi antaa nimen kumpaankin suuntaan Sille ei tarvise antaa lainkaan nimeä Yhteysnimen asemasta tai lisäksi voidaan käyttää roolinimiä

2. Olio-ohjelmoinista lyhyesti 2.1

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Kooste. Esim. Ympyrän keskipiste voidaan ajatella ympyrän osaksi.

2. Olio-ohjelmoinnin perusteita 2.1

Ohjelmistojen mallintaminen Luokkakaaviot Harri Laine 1

Olio-ohjelmointi Javalla

16. Javan omat luokat 16.1

12. Monimuotoisuus 12.1

2. Olio-ohjelmoinnin perusteita 2.1

18. Abstraktit tietotyypit 18.1

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

Johdatus sovellussuunnitteluun, s99, osa3 Helsingin yliopisto;/tktl Harri Laine 1. Olioiden väliset yhteydet. Olioiden väliset yhteydet

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

TIE = JOTU. VH5 - MagicDraw

4. Luokan testaus ja käyttö olion kautta 4.1

Ohjelmistojen mallintaminen

Johdatus sovellussuunnitteluun, s99, osa3 Helsingin yliopisto;/tktl Harri Laine 1. Olioiden väliset yhteydet. Olioiden väliset yhteydet

Luokka (class) esitetään suorakulmion avulla, jonka sisälle kirjoitetaan luokan nimi (vahvennettuna).

Ohjelmistojen mallintaminen. Luento 4,

Mikä yhteyssuhde on?

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

Javan perusteita. Janne Käki

Metodien tekeminen Javalla

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

Luokat ja oliot. Ville Sundberg

1 Tehtävän kuvaus ja analysointi

T Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Olioiden yhteistoiminta

Luokka- ja oliokaaviot

Oliot viestivät metodeja kutsuen

Kertaus: yleistys-erikoistus ja perintä

Ohjelmistojen mallintaminen, mallintaminen ja UML

POLKU LUOKKAKAAVIOISTA TAULUJEN TOTEUTUKSEEN

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

4. Olio-ohjelmoinista lyhyesti 4.1

KOHDELUOKAN MÄÄRITTELY

Johdanto. Olio (Object) Luokka (Class) Olion kuvaaminen

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

12. Monimuotoisuus 12.1

Ohjelmoinnin jatkokurssi, kurssikoe

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Jouni Huotari & Ari Hovi. Käsitemallinnuksesta relaatiokantaan KÄSITEMALLI. LOOGINEN MALLI: tietomalli valittu. FYYSINEN MALLI: DBMS valittu

Aalto Yliopisto T Informaatioverkostot: Studio 1. Oliot ja luokat Javaohjelmoinnissa

15. Ohjelmoinnin tekniikkaa 15.1

Java-API, rajapinnat, poikkeukset, UML,...

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton

Luokka- ja oliokaaviot

15. Ohjelmoinnin tekniikkaa 15.1

Ohjelmistotekniikan menetelmät

Ohjelmistotekniikan menetelmät, UML

Sisältö. 22. Taulukot. Yleistä. Yleistä

1. Olio-ohjelmointi 1.1

Ohjelmistotekniikan menetelmät

UML:n yleiskatsaus. UML:n osat:

UML-kielen formalisointi Object-Z:lla

Periytyminen (inheritance)

Taulukot. Jukka Harju, Jukka Juslin

Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus

Olioiden yhteistyön mallintaminen

Sisältö. 2. Taulukot. Yleistä. Yleistä

Kertausta: Olioperustainen ohjelmistokehitys

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance)

Hakemistojen sisällöt säilötään linkitetyille listalle.

Olioperustaisuus (object oriented)

Paikkatiedon mallinnus Dokumentoinnin ymmärtäminen. Lassi Lehto

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

Johdatus sovellussuunnitteluun, s99, osa2 Helsingin yliopisto;/tktl Harri Laine 1. Olioperustaisuus (object oriented)

Harjoitustehtävät ja ratkaisut viikolle 48

Ohjelmistojen mallintaminen Unified Modeling Language (UML)

Transkriptio:

Sisällys 9. Unified Modeling Language (UML) Perustuu Kai Koskimiehen Oliokirjaan ja aikaisempaan luentomateriaaliin. Johdanto. Luokkakaavio: Luokkasymboli, attribuutit ja metodit. Suhteet: Assosiaatiot: tavallinen assosiaatio, assosiaatio ajonaikana, refleksiivinen assosiaatio koosteassosiaatio ja aito kooste. Riippuvuussuhde. Periytymissuhde ja rajapinta. 9. 9.2 Johdanto Unified Modeling Language (UML) on mallinnuskieli eli täsmällinen menetelmä reaalimaailman abstrahoimiseen. Boochin, Rumbaugin ja Jacobsonin mallinnuskielien synteesi. Nykyisin Object Management Groupin (OMG) kehittämä standardi, joka kokoaa yhteen useita graafisia mallinnuskieliä, joita kutsutaan kaaviotyypeiksi. Johdanto UML:ia ei ole sidottu mihinkään tiettyyn ohjelmiston suunnittelumenetelmään. Omimmillaan kuitenkin olioperustaisen ohjelmistonkehityksen apuvälineenä. Kattaa hyvin moninaisia tarpeita, mutta toisaalta laajuutensa vuoksi UML on monimutkainen ja raskas menetelmä. 9.3 9.4

Johdanto Järjestelmän toimintaa voidaan kuvata korkealla tasolla käyttötapauskaavioilla. Useita kaavioita järjestelmän rakenteen ja käyttäytymisen mallintamiseen. Kaikkien kaaviotyyppien esittely ei ole kurssin puitteissa mahdollista. Tarkastellaan lähemmin vain luokkakaaviota, joka on rakennekaavioista keskeisin. Esimerkkinä muun muassa ajoneuvojen vuokrausjärjestelmä. Johdanto Kaaviot koostuvat peruselementeistä ja niiden välisistä suhteista. Elementit ovat geometrisia kuvioita. Elementeillä usein myös sisäinen rakenne (esimerkiksi luokan attribuutit ja metodit). Suhteet ovat elementtejä yhdistäviä viivoja. Suhteisiin voidaan liittää tarkempaa informaatiota (esimerkiksi nimi, kertautuminen, roolit). 9.5 9.6 Johdanto UML:n graafinen ulkoasu ei ole tarkasti määrätty. Kaavioita piirretään myös vaihtelevalla tarkkuudella. Olioperustaisen ohjelmistonkehityksen analyysivaiheessa käytetään paljon yleisempää esitystä kuin suunnitteluvaiheessa. Yksityiskohdat sivuutetaan nyt, koska tavoitteena on vain tutustua luokkakaavioihin karkealla tasolla. Huomaa, että harjoitustyöhön liittyy hieman tarkempi attribuuttien ja metodien esittely. Luokkakaavio Luokat substantiivilla esitettäviä käsitteitä. Ominaisuudet attribuutteja. Toiminnot metodeja. Vain keskeisimmät käsitteet mallinnetaan luokiksi. Samoja piirteitä sisältäville luokille tehdään yliluokka, jonne yhteiset piirteet siirretään. Luokalla tulee olla yksikäsitteinen vastuu: Esimerkiksi Lista-luokka säilöö tietoja ja Käyttöliittymä huolehtii ihmisen ja koneen vuorovaikutuksesta. Jos vastuita useampia, niin luokka jaetaan osiin. Tarpeettomia yhteyksiä luokkien välillä vältettävä. 9.7 9.8

Luokkakaavio Luokkakaavio (class diagram, static structure diagram) kuvaa järjestelmään kuuluvia luokkia ja niiden välisiä suhteita. Tärkein järjestelmän rakenteen mallinnusväline. Luokat esitetään luokkasymbolin avulla. Luokkasymboli koostuu luokan nimestä sekä mahdollisten attribuuttien ja metodien esittelyistä. Luokka ja piirteet nimetään kuten Javassa. LuokanNimi attribuutit metodit LuokanNimi Attribuutit Esittely yleisesti (mukana tärkeimmät määreet): {näkyvyysmääre} nimi {[kertautuminen]} {: tyyppi} {= alkuarvo} {lisätietomäärelista} missä aaltosulkeet tarkoittavat valinnaista osaa ja hakasulkeet mahdollisesti toistuvaa osaa. Näkyvyys: public (+), protected (#), private (-). Kertautumisella määritellään esimerkiksi taulukko. Määre annetaan kuten assosiaatioiden yhteydessä. Esimerkki: - luvut [0..] : Integer 9.9 9.0 Attribuutit Metodit (operaatiot) Tyypillisesti alkeistyyppejä, jotka annetaan usein isoilla alkukirjaimilla: Integer, Double, Boolean jne. Luokkatyyppisistä attribuuteista luokkasymbolissa esitetään vain kaavioon kuulumattomat (apu)luokat. Kaaviossa esiintyvien luokkien väliset suhteet esitetään attribuuttien asemasta assosiaatioina. Luokka-attribuutit alleviivataan. Lisätiedot kirjoitetaan aaltosulkeisiin. Esimerkki: + PII : Double = 3.4 { const } 9. Esittely yleisesti (mukana tärkeimmät määreet): {näkyvyysmääre} nimi( {parametrilista} ) {: tyyppi} {lisätietomäärelista} missä aaltosulkeet tarkoittavat valinnaista osaa Parametreista voidaan antaa vain tyyppi. Tosinaan annetaan myös nimi. Tiedonvälityksen suunta (in, out, inout) määritellään harvoin. Esimerkki: + sayntimes(msg: String, n: Integer) sayntimes(string, Integer) 9.2

Metodit (operaatiot) Esimerkkejä Tyyppi annetaan kuten attribuuteille. Paluuarvottomalle metodille ei anneta tyyppiä. Abstrakti metodi kirjoitetaan kursiivilla tai esitellään lisätiedolla {abstract}. Esimerkki: + laskeetaisyys(k: Piste) : Double Luokkametodi alleviivataan. Esimerkki: - alusta(taulukko [][]: Character) ULM:ssa operaatio määritellään abstraktiksi esittelyksi ja metodi operaation toteutukseksi. Auto rekisterinumero huolla(int km) palauta() Kissa - kissoja: int = 0 - hanta: String + kehraa() Talleta huoltoinformaatio (palauta kutsuu) Luokka-attribuutti, jolla lasketaan luotujen kissojen lkm String-tyyppinen attribuutti voidaan esitellä, koska String ei ole kaavion luokka. 9.3 9.4 Suhteet Yhdistävät luokkakaavion elementtejä. Piirretään erilaisina viivoina. Assosiaatioilla (association) kuvataan luokkien väliset suhteet, joilla on tietty pysyvyys. Hetkelliset suhteet, jotka kestävät esimerkiksi vain metodin suoritusajan, kuvataan riippuvuussuhteina. Koosteassosiaatio ja aito kooste mallintavat onosa -tyyppiset suhteet. Periytymissuhde ja rajapinnan toteutus ovat tuttuja. Assosiaatiot Tavallinen assosiaatio ilmaistaan piirtämällä viiva luokka-symbolien välille. Binääriset, kahden luokan väliset yleisimpiä. Assosiaatiolla on usein nimi. (Asiayhteydestään selviä assosiaatioita ei tarvitse nimetä.) Assosiaatiolla ei ole varsinaista suuntaa. Nimen yhteyteen voidaan merkitä nuolisymboli, joka kuvaa lukusuunnan. Sama assosiaatio voidaan lukea myös toisinpäin, jos nimi vaihdetaan kuvaamaan käänteistä tilannetta. palvelee asioi 9.5 9.6

Assosiaatiot Assosiaation päätä kutsutaan rooliksi (role), joka voidaan myös nimetä. Nimi kuvaa assosiaation merkityksen vastakkaisessa päässä olevan luokan kannalta. Esim. näkee henkilön palveltavana asiakkaana ja henkilö pankin palvelua tarjoavana yrityksenä. yritys palvelee asiakas Kissalle hiiri on saalis ja hiirelle kissa on peto. Kissa metsästää peto saalis Hiiri Assosiaatiot Rooli ilmaisee myös assosiaation kertautumisen (multiplicity), jolla ilmaistaan montako assosiaation vastakkaisen pään luokan oliota liittyy tarkasteltavana olevan pään luokan yksittäiseen olioon. tarkoittaa mielivaltaisen monta ( == 0..). 0.. tarkoittaa kertautumista yksi tai ei yhtään. Jos kertautumista ei ole merkitty, se on määrittelemätön (eikä siis esimerkiksi ). Moninkertaisessa assosiaatiossa kertautuminen >. Esim. palvelee nollaa tai useampaa asiakasta ja henkilö asioi 0, tai 2 pankissa. palvelee 0..2 yritys asiakas 9.7 9.8 Esimerkkejä Kurssi Yritys 0.. omistaa Auto.. Opettaja 0.. työnantaja työntekijä Assosiaatiot ajonaikana Assosiaation ajoaikainen ilmentymä on linkki (link), joka vallitsee assosiaation olioiden välillä. Määritellään olioiden tupliksi: binäärisissä assosiaatioissa linkit ovat järjestettyjä oliopareja. Monikertaisissa assosiaatioissa linkkejä voi olla kaksi tai useampia. Oliokaavio esittää luokkakaavion mahdollista ajonaikaista ilmentymää. Kaaviossa viiva vastaa linkkiä. X: Oili: Onni: Ossi: 9.9 9.20

Assosiaatiot ajonaikana Assosiaatiot toteutetaan pääosin luokkatyyppisinä attribuutteina (viitteinä) assosiaation lähtöluokassa. Luokkakaavio: käytössä 0.. 0.. Parkkipaikka Toteutus Java-kielellä: public class Henkilo { private Parkkipaikka ppaikka; } Assosiaatiot ajonaikana Monikertainen assosiaatio voidaan toteuttaa luokkakaavion kuulumattoman säiliöluokan avulla. Luokkakaavio: palvelee 0..3 yritys asiakas Eräs toteutus Java-kielellä: public class { private Vector<Henkilo> asiakkaat; } 9.2 9.22 Refleksiivinen assosiaatio Refleksiivinen (unaarinen) assosiaatio päättyy lähtöluokkaansa. Näin esitetty assosiaatio on hankala ymmärtää ilman nimeä. Roolien käyttö on myös suotavaa. Solmu 0.. Oletetaan, että solmua seuraava käytetään linkitetyn listan toteuttamiseen. public class Solmu { // Solmun sisältämä tieto. } private Object alkio; // Viite seuraavaan solmuun. private Solmu seuraava; 9.23 Assosiaation yksilöinti Jos assosiaatioon liittyy tieto, joka määrää assosiaation toisessa päässä olevien olioiden joukon, niin tämä tieto voidaan esittää niin kutsuttuna yksilöintinä (qualification). Yksilöinti liittyy aina moninkertaiseen assosiaatioon. Tavallisesti yksilöinti muuttaa kertautuvan pään kertautumisen "":ksi (tai "0..":ksi). Tällöin yksilöinti määrää linkin toisessa päässä olevan olion yksiselitteisesti. 9.24

Assosiaation yksilöinti Yksilöinti merkitään luokkasymboliin liittyvänä pienenä laatikkona, jonka sisään kirjoitetaan linkin yksilöivä tieto, joka tarkentaa olion linkin vastakkaisessa päässä. Usein yksilöivä tieto on vastakkaisella puolella olevan luokan attribuutti. Huomaa, että yksilöinti ei muuta sen pään kertautumista, johon se piirretään. Kirjasto kokoelma sijainti lainaaja nro lainaa nimi osoite Koosteassosiaatio Kooste (aggregation) on erityinen assosiaatiolaji, joka esittää suhteen on-osa (HasA) tai kuuluu luokkien (ilmentymien) välillä. Oma symboli: pieni vinoneliö sisältävässä päässä (siis suhteen "A on-osa B:tä" B-päässä). Tämä symboli korvaa tavallisesti assosiaation ja roolien nimet. Koosteeseen voidaan soveltaa normaaliin tapaan kertautumista ja yksilöintiä. Valinta tavallisen ja koosteassosiaation välillä on toisinaan enemmänkin makuasia. 9.25 9.26 Aito kooste Esimerkkejä Aito kooste (composition) tarkoittaa koostesuhdetta, jossa osaolio riippuu isäntäoliostaan kahdella tavalla: osa ei voi olemassa ilman isäntäänsä ja osa voi olla vain yhden isännän osa. Isännän tulee yleensä huolehtia osan luonnista ja hävittämisestä. Aito kooste merkitään kuten kooste, mutta vinoneliö on musta. Kertautuminen sisältävässä päässä tai 0... Monikulmio pinta-ala Ministeri Hakemisto Huone 3.. {ordered}.... 0.... Piste x-koord y-koord Valtioneuvosto Tiedosto Seinä Jos olioliitoksilla on mallin kannalta olennainen järjestys, voidaan rajoite {ordered} liittää rooliin. 9.27 9.28

Riippuvuussuhde Riippuvuussuhteella (dependency) kuvataan luokkien väliset hetkelliset suhteet. Muun muassa olion luominen ja metodin kutsuminen. Esitetään väkäpäisellä nuolella, jonka varsi piirretään katkoviivalla. Nuoli piirretään kohti luokkaa, jonka palveluja käytetään. Esimerkki: ihminen käynnistää ja sammuttaa tietokoneen. Ihminen Tietokone Periytymissuhde Periytyminen (inheritance) kuvaa erikoistumis- tai yleistyssuhteen yli- ja aliluokan välillä. Suhde piirretään kolmiokärkisenä yliluokkaan osoittavana nuolena. Jos luokalla on useita aliluokkia, nuolet voidaan piirtää joko erikseen tai yhdistettynä samaan kärkeen. Auto Ajoneuvo 9.29 9.30 Periytymissuhde Perittyjä attribuutteja ei tavallisesti piirretä näkyviin jälkeläisiin. Abstraktin metodin (UML:n operaatio) toteuttava metodi (UML:n metodi) voidaan esitellä toteuttavassa luokassa. Metodin korvaaminen voidaan tarvittaessa ilmaista jälkeläisessä. Nisakas + syo() Villikissa + syo() Kotikissa Rajapinta Rajapinta esitetään joko stereotyypillä <<interface>> varustetulla luokkasymbolilla tai pyöreällä rajapintasymbolilla. Jos luokka toteuttaa rajapinnan, piirretään edellisessä tapauksessa toteutussuhdetta kuvaava nuoli (kuten periytyminen, mutta katkoviivalla) luokasta rajapintaan. Jälkimmäisessä tapauksessa rajapintaympyrä yhdistetään yksinkertaisella viivalla luokkasymboliin. 9.3 9.32

Rajapinta Ajoneuvonvarausjärjestelmä Luokkasymbolin käyttäminen rajapinnan kuvaukseen on hyödyllistä silloin, kun halutaan näkyville rajapinnan tarjoamat metodit. Kohde Ohjain Tällöin metodi esitellään sekä rajapinnassa että sen toteuttavassa luokassa. Auto Auto <<interface>> Ajoneuvo Ajoneuvo Rajapinta pyritään piirtämään kurssimateriaalissa näin. palauta() varaa() otakäyttöön() Auto rekisterinumero huolla(int km) palauta() hallinnoi Talleta huoltoinformaatio (palauta kutsuu) KohdeHallinto palautakohde(kohde, Varasto) varaakohde(kohde) otakäyttöönkohde(kohde) <<interface>> Varasto ParkkiAlue 9.33 9.34