Johdatus sovellussuunnitteluun, s2000, osa4 Helsingin yliopisto;/tktl. Harri Laine 1. Luokka- ja oliokaaviot. Luokka- ja oliokaaviot

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

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

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

Johdatus sovellussuunnitteluun, s2001, osa 4a Helsingin yliopisto / TKTL Harri Laine / Inkeri Verkamo 1. Luokka- ja oliokaaviot

Johdatus sovellussuunnitteluun, s99, osa2 Helsingin yliopisto;/tktl Harri Laine 1. Olioperustainen ohjelmistokehitys

Olioperustaisuus (object oriented)

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

Ohjelmistotekniikan menetelmät

Ohjelmistotekniikan menetelmät

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

Ohjelmistojen mallintaminen Luokkakaaviot Harri Laine 1

Ohjelmistojen mallintaminen luokkamallin laatiminen

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

UML - unified modeling language

Ohjelmistojen mallintaminen luokkamallin laatiminen

Johdatus sovellussuunnitteluun

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

Johdatus sovellussuunnitteluun osa 2

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

Ohjelmistojen mallintaminen kertausta Harri Laine 1

UML Luokkakaavio 14:41

Ohjelmistotekniikan menetelmät, UML

UML ja luokkien väliset suhteet

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN

Olio-ohjelmointi Javalla

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

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

Ohjelmistojen mallintaminen. Luento 4,

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

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

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

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Ohjelmistojen mallintaminen Unified Modeling Language (UML)

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

2. Olio-ohjelmoinnin perusteita 2.1

15. Ohjelmoinnin tekniikkaa 15.1

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Olio-ohjelmoinnissa luokat voidaan järjestää siten, että ne pystyvät jakamaan yhteisiä tietoja ja aliohjelmia.

Luokkakaavion laatiminen

2. Olio-ohjelmoinnin perusteita 2.1

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

9. Periytyminen Javassa 9.1

Ohjelmistotekniikan menetelmät Luokkamallit ohjelmiston mallintamisessa Harri Laine 1

Ohjelmistojen mallintaminen. Luento 3, 9.11.

1. Tarkastellaan seuraavaa kaaviota

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

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

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

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

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

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

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

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

4. Olio-ohjelmoinista lyhyesti 4.1

9. Periytyminen Javassa 9.1

2. Olio-ohjelmoinista lyhyesti 2.1

Rajapinta (interface)

Kertausta: Olioperustainen ohjelmistokehitys

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

Mikä yhteyssuhde on?

15. Ohjelmoinnin tekniikkaa 15.1

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

1. Olio-ohjelmointi 1.1

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

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Taulukot. Jukka Harju, Jukka Juslin

Ohjelmistojen mallintaminen, mallintaminen ja UML

Javan perusteita. Janne Käki

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

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

Luokkakohtaiset eli stattiset metodit ja attribuutit

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Tietokantojen perusteet k2004helsingin yliopisto/tktl Tietokantojen perusteet, s 2007 ER-mallin peruskäsitteet.

Metodien tekeminen Javalla

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Ohjelmistojen mallintaminen

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

YHTEYSSUHDE (assosiation)

Luokka- ja oliokaaviot

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. II Johdanto olio-ohjelmointiin

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

1 Tehtävän kuvaus ja analysointi

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet

18. Abstraktit tietotyypit 18.1

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

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

Ohjelmistojen mallintaminen Olioiden yhteistyö Harri Laine 1

16. Javan omat luokat 16.1

Ohjelmistojen mallintaminen, kertausta

Ohjelmistojen mallintaminen viikon 4 laskareiden mallivastauksia

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

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

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

KOHDELUOKAN MÄÄRITTELY

1. Omat operaatiot 1.1

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

Transkriptio:

6..2000 Luokka- ja oliokaaviot Luokka- ja oliokaavioilla kuvataan ohjelmiston / järjestelmän koostuminen olioista, olioiden tietämys, niiden tarjoamat palvelut sekä olioiden väliset yhteydet Olio tiedon ja sen käsittelyyn liittyvien palveluiden muodostama kokonaisuus olio pitää sisällään tietoja, joita olion palvelut käsittelevät / hyödyntävät Puhtaassa olio-ohjelmoinnissa olion tietoihin pääse käsiksi vain olion palveluiden kautta Luokka- ja oliokaaviot (Olio)luokka (class, object class) on samankaltaisten olioiden malli Saman mallin mukaiset oliot kuuluvat samaan luokkaan. Ne ovat kyseisen luokan ilmentymiä (instance). Luokkakuvaus määrittelee luokan. Reaalimaailma ja luokka Olio-ohjelma ja luokka luokka eläin ilmentymät public class elain { int elain_numero; String laji; Color vari; float paino; Luokkakuvaus ohjelmointikielellä Eläin on.. määrittelee Ominaisuuksia: paino, väri, sukupuoli,... Toimintoja: syöminen, liikkuminen,... luokkakuvaus public elain( ){ } public setpaino( ){ } public float getpaino(){ } } elain otus = new elain(.); elain toinen = new elain(.); ilmentymä ilmentymä 2 Luokkakuvaus UML:llä Ilmentymän kuvaaminen elain elain_numero: int laji: String vari: Color paino: float +elain( ) +setpaino( ) +getpaino(): float laji vari String Color Otus: elain elain_numero=2345 laji=norsu vari=harmaa paino=2300 Otus2: elain elain_numero=2346 laji=aasi vari=ruskea paino=220 Instance of Instance of Ilmentymiä esitetään yleensä vain esimerkkeinä otus: elain toinen: elain Pitäisi oikeastaan poistaa täältä toisteisina Harri Laine

6..2000 Luokkakuvaus UML:ssä välttämätön mukana tarvittaessa nimi attribuutit palvelut Olioiden tietämys (tietosisältö) kuvataan attribuutteina Attribuutista voidaan esittää nimi (välttämätön) tietotyyppi arvojen määrä (hakasuluissa, alaraja..yläraja, =epämääräisen monta) näkyvyys vain ohjelmointiläheisessä kuvauksessa oletusarvo muita määreitä Näkyvyys (visibility) on esim. C++ ja Javaohjelmointikielissä käytetty tekniikka, jolla säädellään luokkakuvauksessa esitellyn muuttujan tai metodin (palvelun) käyttöä. private (-) rajaa käytön luokan omiin palveluihin protected (#) sallii käytön luokan aliluokissa määriteltävissä palveluissa puhdasoppisesti ajateltuna kaikkien attribuuttien tulisi olla näkyvyydeltään protected public (+) sallii käytön myös luokan ulkopuolelta UML käyttää yllä sulkeissa olevaa merkkiä attribuutin nimen edessä osoittamaan näkyvyyden pankki #numero #n_tila -tapahtumat[] +viimeeksi_käytetty_pvm Attribuutit numero ja n_tila ovat käytettävissä luokan pankki ja sen aliluokkien palveluissa (esim. luokassa käyttö) Moniarvoiseen attribuuttiin tapahtumat voi viitata pankkin omissa palveluissa Atribuuttiin viimeeksi_käytetty voi viitata myös ulkopuolisten luokien palveluissa UML:ssä on mahdollista määritellä luokka-attribuutteja (class attribute), luokkakohtainen arvo ilmaistaan alleviivaamalla attribuutin nimi ilmentymäattribuutteja (instance attribute) arvo erikseen jokaisessa luokan ilmentymässä henkilötunnus #tarkistusmerkit[3] #päiväys #vuosisata #jnro #tarkmerkki Luokkakohtainen tarkistusmerkkitaulukko Ilmentymäkohtaisia osasia Attribuutin arvo on jotain tyyppiä. Tyyppi ilmaistaan antamalla se nimen perässä kaksoispisteellä erotettuna päiväys:date jnro:int tarkastusmerkki: char Arvo voi olla perustietotyyppin arvo UML ei ota kantaa tietotyyppeihin vaan sallii mitä tahansa perustietotyyppejä yllä int ja char Harri Laine 2

6..2000 Olio, jolloin tietotyyppinä on olion luokka Olioarvoinen attribuutti muodostaa yhteyden attribuutin sisältävän olion ja attribuutin arvona olevan olion välille. Tällaiset yhteydet pitäisi tuoda selkeästi esiin ja kuvata omalla tekniikallaan (luokkia yhdistävinä viivoina) Jos attribuutin arvona on olio tämä tulisi esittää attribuuttimäärittelyn yhteydessä vain mikäli olion luokka on perustietotyyppimäinen, esim Date, String, Color, Point, päiväys:date nimi:string Attribuuttimäärittelyyn voi liittää muiden määrittelyjen jälkeen kaarisulkeissa {...} lisämääreitä UML tarjoaa valmiina lisämääreet changeable (oletus) arvon muuttamiseen ei ole rajoitteita frozen arvoa ei voi muuttaa addonly moniarvoiselle attribuutille voi vain lisätä arvoja ei koskaan poistaa UML-mallin soveltaja voi ottaa käyttöön omia lisämääreitä. Hyödyllisiä voisivat olla id ulkoinen tunniste, attribuutin arvo ei voi olla sama kahdella eri ilmentymällä ja Java ohjelma UML-luokka vastaa Java-luokkaa. Static-muuttujat vastaavat luokka-attribuutteja muut luokassa määritellyt muuttujat vastaavat ilmentymäattribuutteja pankki numero {frozen, id} Tilinumeroa ei voi muuttaa, se yksilöi t Luokan palvelut Luokan palvelut Palvelusta UML:ssä voidaan kuvata näkyvyys - kuten attribuuttien kohdalla nimi (välttämätön) parametrit paluuarvon tyyppi muut määreet [näkyvyys] nimi [(parametrit)] [:paluuarvon tyyppi] [{muut määreet}] parametrimäärittelyn muoto on [suunta] nimi: tyyppi [= oletusarvo ] Esim. henkilötunnus #tarkistusmerkit[3] #päiväys #vuosisata #jnro #tarkmerkki +tostring():string +isok():boolean +getbirthdate():date +getsex():int Harri Laine 3

6..2000 Olioiden (ilmentymien) välisiä rakenteellisia kytkentöjä kutsutaan yhteyksiksi (association) Ohjelmakoodissa rakenteellinen kytkentä ilmenee siten, että luokalla on olioarvoinen attribuutti tai jokin epäsuora viittaus toiseen olioon. omistaja[]: Ppankki Tarkoittaa, että pankki-olioiden ja asiakas-olioiden välillä on kytkentä, joka voidaan kuvata seuraavasti: omistaja-> Yhden n voi omistaa useita asiakkaita Oletetaan, että Java-ohjelmassa pankkin omistaja olisi määritelty seuraavasti [] omistaja = new [3]; eli llä voi olla enintään 3 omistajaa. llä täytyy aina olla omistaja (tämä on Java-ohjelmassa tarkistettava ohjelmassa) Ylläoleva esitettäisiin: Edellä on kyseessä suunnattu yhteys: pankkistä päästään asiakkaaseen, mutta asiakkaasta ei päästä pankkiin, eli ilmentymätasolla tilanne olisi 234:pankki omistaja->..3 omistaja omistaja Aku Ankka: Ines Ankka: Jos haluttaisiin yhteys myös toiseen suuntaan (ja edelleen taulukoilla), voisimme määritellä asiakkaalle attribuutin [] =new [0]; omistaja->..3 Ilmentymätasolla tilanne voisi olla 234:pankki 235:pankki omistaja omistaja 236:pankki 0..0 <- 4567:pankki Aku Ankka: Ines Ankka: Koska asiakkaalla ei välttämättä ole yhtään ä Harri Laine 4

6..2000 Huomaamme, että ja omistaja yhteydet kuvaavat samaa asiaa ja voimme yhdistää ne. Ilmentymätasolla mikään ei muutu Yhteyden nimi Nimen lukusuunta 0..0 omistaja->..3 0..0 omistaja->..3 <- <- Yhteydelle voi antaa nimen kumpaankin suuntaan Sille ei tarvise antaa lainkaan nimeä Yhteysnimen asemasta tai lisäksi voidaan käyttää roolinimiä Tässä ja omistaja ovat roolinimiä, Ohjelmaa kuvattaessa kumppanin roolinimenä voi käyttää olion sisältämän kumppaniin viittaavan muuttujan nimeä Tärkeää 0..0..3 0..0..3 omistaja Tili Omistaja Tili -muuttuja (tässä tapauksessa taulukko) sisältyy jokaiseen -olioon. Sitä ei kuitenkaan suositella esitettäväksi asiakkaan attribuuttina, jotta vältettäisiin tarpeetonta saman asian toistoa. Vastaavasti Omistaja on pankkiin sisältyvä taulukkomuuttuja. Asiakkaaseen kytkettyjen pankkien minimija maksimimäärä ilmoitetaan kumppanin (siis pankkin) puoleisessa päässä yhteysviivaa Yhteysviivan päässä oleva nuolenkärki kuvaa ns. navigointimahdollisuutta eli sitä, että viivan päässä olevan luokan olioista pääsee suoraan nuolella osoitetun luokan olioon (yhteen tai useampaan) - oliossa on siis siirtymän mahdollistava olioarvoinen muuttuja n opiskelijoiden ylärajaa ei ole kiinnitetty () 0.. Opiskelija_kurssilla sta pääsee kurssin_opiskelijaan mutta ei toisinpäin Kun kuvauksen abtraktiotasoa nostetaan jätetään navigointimahdollisuus yleensä kuvaamatta. Tällöin yhteysviivan kummassakaan päässä ei ole nuolenkärkeä A Tämän ei tarkoita sitä, ettei A:sta pääse B:hen ja päinvastoin vaan sitä, että navigointimahdollisuus on jätetty esittämättä. Navigointimahdollisuuden voi ajatella olevan molemminsuuntainen. B Harri Laine 5

6..2000 A Jos yhteysviivan toisessa päässä kuvataan navigointimahdollisuus se tulkitaan kuvatuksi myös toisessa päässä näin esitettynä B-olioista ei ole suoraa pääsyä A-olioihin B Molemmat yhteyden osapuolina olevat oliot voivat kuulua samaan luokkaan. Työntekijä alainen 0.. esimies 0.. Työntekijällä voi olla vain yksi välitön esimies Työntekijällä voi olla useita alaisia, ei välttämättä yhtään Yhteyteen voidaan liittää järjestysmääre kuvaamaan sitä, että samaan olioon yhteydessä olevien olioiden joukko on jollain perusteella järjestetty Olioiden maihinnousu Kirja 0.... tuote tekijä {ordered} Henkilö 2 Fox Mulder Dana Scully Kirjan tekijöiden joukko on järjestetty Järjestetty joukko Jos yhteyden osapuolta voidaan pitää osana toista osapuolta on kyseessä kooste (aggregate). Tällainen yhteyden erikoistapaus voidaan esittää yhteysviivan kokonaisuuden puoleiseen päähän sijoitetun salmiakkisymbolin avulla joukkue Pelaaja voi kuulua moneen joukkueeseen jäsen pelaaja Kooste auttaa hahmottamaan sitä, miten oliot semanttisesti kytkeytyvät toisiinsa. Sillä ei välttämättä ole mitään vaikutusta esimerkiksi navigointimahdollisuuksiin. Yleensä kuitenkin kokonaisuudesta on aina pääsy osiinsa. joukkue jäsen pelaaja Pelaajasta on suora pääsy pelaajan joukkuesseen ja joukkueesta sen pelaajiin Pelkkä tarkoittaa samaa kuin pari 0.. Harri Laine 6

6..2000 Ohjelman toiminnan kannalta koostetta merkittävämpi yhteys on kompositio-yhteys (composition). Kompositio voidaan ajatella koosteen erikoistapauksena, jossa osan olemassaolo on kytketty kokonaisuuden olemassaoloon - kun kokonaisuus hävitetään häviävät myös sen osat (tavallisen koosteen kohdalla näin ei käy) osa voi sisältyä vain yhteen samantyyppisen kompositioon osa ei voi vaihtaa kompositiotaan vaan on aina osa samaa kokonaisuutta Esimerkkejä: Rakennus Huoneisto Kompositio esitetään mustalla salmiakilla kokonaisuuden puoleisessa päässä Kompositio on UML:ssä ainoa tapa ilmaista olemassaoloriippuvuus. Olemassaoloriippuvuus on mallintamisessa hyvin tärkeä asia. Tärkeämpi kuin osan ja kokonaisuuden yhteys. Jos olemassaoloriippuvuus pitää kyetä esittämään on kompositiota syytä käyttää vaikka osa - kokonaisuus -yhteys ei aivan selvältä näyttäisikään. Kompositiota käytetään reaalimaailmassa usein hyväksi olioiden identifioinnissa. Rakennuksen Teollisuuskatu 23 huone B446 pitää sisällään komposition. Perus-UML ei tarjoa keinoa komposition kautta tapahtuvan ulkoisen identifioinnin kuvaamiseen, joten tällä kurssilla otetaan käyttöön yhteyteen osan puolelle liitettävä lisämääre {id} esittämään tätä. Rakennus.. {id} Huone Ohjelmassa komposition tapauksessa kokonaisuusolio on vastuussa osiensa luonnista ja hävittämisestä. Huoneen yksikäsitteiseen identifiointiin tarvitaan tieto rakennuksesta, jossa huone sijaitsee kurssi luo hävitä Harri Laine 7

6..2000 Tarkastellaan tilannetta, jossa kurssin harjoitusryhmät on taulukon asemasta toteutettu RyhmaKokoelma-luokan avulla. Tämä luokka toteuttakoon dynaamisen taulukon (=taulukko, joka laajenee tarvittaessa). JSS:KURSSI JSS-RYHMÄT: Yksityiskohtaisessa kuvauksessa tilanne olisi tällöin: RyhmäKokoelma Dynaaminen taulukko JSS/H:H.RYHMÄ JSS/2:H.RYHMÄ ilmentymätasolla Sama asia voitaisiin toteuttaa myös vaikkapa listarakenteena. 0.. first 0.. next Toteutukset Abstrakti kuvaus Näissä kummassakin kuvauksessa, erityisesti ylläolevassa, ratkaisun yksityiskohdat vaikeuttavat oleellisen kokonaisuuden hahmotusta sitä, että kurssiin liittyy useita harjoitusryhmiä, jotka ovat olemassaoloriippuvia kurssista. Kuvauksen abstraktiotasoa on tällöin syytä nostaa häivyttämällä tekninen ratkaisu. RyhmäKokoelma 0.. first 0.. next Kokoelman toteutus Kokoelman toteutus Tarkastellaan vielä aiempaa esimerkkiä RyhmäKokoelma Dynaaminen taulukko Vector Tässä ratkaisussa RyhmäKokoelma todennäköisesti toteutettaisiin ohjelmointikielen tarjoamaa valmista dynaamista taulukkoa käyttäen (Javassa Vector) - miten tämä kuvataan UML:llä? On virheellinen, sillä kaikki Vector luokan ilmentymät eivät toki ole olemassaoloriippuvia Kursseista Harri Laine 8

6..2000 Kokoelman toteutus Kokoelman toteutus RyhmäKokoelma Java ohjelmana edellisen kalvon esimerkki toteutuisi seuraavasti Katkoviiva Vector public class { Vector RyhmäKokoelma; public void lisääryhmä(harjoitusryhmä h) { RyhmäKokoelma.addItem(h); } UML_ssä on mahdollista määritellä riippuuvuuksia luokkien välille, tässä on kyse riippuvuudesta yleiskäyttöisen luokan (Vector) ja sillä toteutetun luokan (RyhmäKokoelma) välillä Tässä siis luokkaa RyhmäKokoelma ei ole määritelty. On vain Vector luokan ilmentymä, mutta koska Vector on geneerinen yleiskäyttöinen luokka sen ilmentymä voidaan ajatella tarkoitukseen sidotuksi luokaksi Henkilö Yhdistys Ilmentymätasolla HYY:Yhdistys AP-RY Rooli=rivijäsen AP:Henkilö 0.. Jäsenyys 0.. AP-HYY Rooli= johtok. Rooli Tässä esimerkissä jäsenyys olioiden avulla kuvataan henkilön jäsenyyttä yhdistyksessä. Henkilö voi olla rivijäsen, johtokunnassa tai kunniajäsen. KK-HYY Rooli= rivijäsen... KK:Henkilö Tilanne voitaisiin mallintaa myös ns. yhteysluokan (association class) avulla Yhteysluokkaa käyttäen voidaan kahden olion väliseen kytkentään liittää kytkennän laatua kuvaavia attribuutteja. Yhdistys 0.. 0.. Henkilö jäsenyys Rooli Tähän sisältyy implisiittisenä vaatimus siitä, että henkilöllä on enintään yksi jäsenyys kussakin yhdistyksessä Harri Laine 9

6..2000 Yhteydet UML:ssä on mahdollista kuvata myös useamman kuin kahden olion välisiä kytkentöjä Oppikirjana Kirja Luokkien väliset suhteet Edellä on tarkasteltu olioiden (ilmentymien) välisiä yhteyksiä. Luokkakaaviossa nämä kuvataan luokkien välillä. UML:ssä voidaan lisäksi esittää luokkien välisiä riippuvuuksia (depency) ja luokkahierarkia Opettaja käyttää kurssilla tiettyä oppikirjaa Opettaja Riippuvuus Luokien välisellä riippuvuudella tarkoitetaan tilannetta, jossa luokan määrittelyissä tapahtuvalla muutoksella voi olla vaikutuksia toisen luokan toimintaan. Riippuvuus kuvataan katkoviivalla, jonka päässä oleva nuolenkärki osoittaa siihen luokkaan josta viivan toisessa päässä oleva on riippuva Käytettävä Käyttäjä Käyttäjä on riippuvuussuhteessa käytettävään Riippuvuus Esimerkki riippuvuudesta on palvelun parametrin aiheuttama riippuvuus, jossa palvelun tarjoava luokka tulee riippuvaksi parametrin luokasta. Class Käyttäjä { public omapalvelu(käytettävä k) { k.vieraspalvelu(); } } Riippuvuus Aiemmin oli jo esillä riippuvuus yleiskäyttöisestä luokasta kokoelman toteutuksessa. Yleinen kokoelma Täsmäkokoelma UML:ssä on nimetty 8 erilaista luokkakaaviossa mahdollista riippuvuutta. Näiden määrittelyt ovat kuitenkin osin varsin epämääräisiä Harri Laine 0