Ohjelmistotekniikan menetelmät

Samankaltaiset tiedostot
Ohjelmistotekniikan menetelmät

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

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

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

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

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

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ä

Olioperustaisuus (object oriented)

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

Ohjelmistojen mallintaminen luokkamallin laatiminen

Ohjelmistojen mallintaminen luokkamallin laatiminen

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

UML - unified modeling language

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

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

Ohjelmistojen mallintaminen kertausta Harri Laine 1

Ohjelmistojen mallintaminen Luokkakaaviot Harri Laine 1

Ohjelmistotekniikan menetelmät, UML

Ohjelmistotekniikan menetelmät Luokkamallit ohjelmiston mallintamisessa Harri Laine 1

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

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

Ohjelmistojen mallintaminen. Luento 3, 9.11.

Ohjelmistotekniikan menetelmät, arkkitehtuuria ja rajapintoja

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

UML Luokkakaavio 14:41

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

Olio-ohjelmointi Javalla

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

Ohjelmistojen mallintaminen Unified Modeling Language (UML)

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

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

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

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

Luokkakaavion laatiminen

9. Periytyminen Javassa 9.1

Luokka- ja oliokaaviot

Johdatus sovellussuunnitteluun

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

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

UML ja luokkien väliset suhteet

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

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Ohjelmistojen mallintaminen. Luento 4,

Ohjelmistojen mallintaminen Olioiden yhteistyö Harri Laine 1

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

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

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

19. Unified Modeling Language (UML)

Olioiden yhteistyön mallintaminen

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

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

KOHDELUOKAN MÄÄRITTELY

Johdatus sovellussuunnitteluun osa 2

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

9. Periytyminen Javassa 9.1

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

SÄHKE-hanke. Abstrakti mallintaminen Tietomallin (graafi) lukuohje

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

Ohjelmistojen mallintaminen, kertausta

3. Käsiteanalyysi ja käsitekaavio

Ohjelmistojen mallintaminen Tietovuokaaviot Harri Laine 1

Tietokantasuunnittelun pääperiaatteena on tiedon toiston välttäminen. Tiedon toistumiseen liittyy monenlaisia ongelmia.

Mitä on periytyminen?

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

Kertausta: Olioperustainen ohjelmistokehitys

YHTEYSSUHDE (assosiation)

Ohjelmistojen mallinnus Ohjelmistoarkkitehtuuri Harri Laine 1

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

Paikkatiedon mallinnus Dokumentoinnin ymmärtäminen. Lassi Lehto

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

Mikä yhteyssuhde on?

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

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

Ohjelmistojen mallintaminen, mallintaminen ja UML

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

2. Olio-ohjelmoinnin perusteita 2.1

20. Javan omat luokat 20.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

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

17. Javan omat luokat 17.1

Luokkakohtaiset eli stattiset metodit ja attribuutit

VH5, JOTU, MagicDraw:n käyttö

Ohjelmistojen mallintaminen. Luento 2, 8.11.

Metodien tekeminen Javalla

Ohjelmistojen mallintaminen, kurssikoe esimerkkivastauksia

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Tällä harjoituskerralla on tarkoituksena harjoitella käyttötapaus-, luokka- ja tapahtumasekvenssikaavioiden luontia.

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

17. Javan omat luokat 17.1

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

Ohjelmistotekniikan menetelmät, mallintaminen ja UML

UML:n yleiskatsaus. UML:n osat:

15. Ohjelmoinnin tekniikkaa 15.1

Ohjelmistojen mallintaminen

Ohjelmistojen mallintaminen, kesä 2010

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

15. Ohjelmoinnin tekniikkaa 15.1

Transkriptio:

Ohjelmistotekniikan menetelmät Luokat ja oliot Luokka- ja oliokaavio 7.11.2008 Harri Laine 1

Luokat ja oliot käyttötapaus Käyttötapaus käyttää järjestelmän palveluja käyttää Käytettävät palvelut saadaan saada yhden tai useamman osajärjestelmän kautta Osajärjestelmät toimivat mahdollisesti eri laitteistoilla ja eri ympäristöissä 7.11.2008 Harri Laine 2

Luokat ja oliot Ohjelmistoarkkitehtuuri määrittelee ohjelmiston yleisrakenteen: Perusta, jonka varaan kaikki myöhemmät suunnitteluja toteutusratkaisut rakennetaan Ohjelmiston jaottelu eri tasoisiin osiin (moduuleiksi) esim. osajärjestelmiksi, pakkauksiksi, komponenteiksi, toiminnallisuuden sijoittelu moduuleihin osien välisten riippuvuuksien hallinta Arkkitehtuurikuvaus toimii järjestelmän yleisrakenteen dokumentaationa 7.11.2008 Harri Laine 3

Luokat ja oliot Kuvattavia asioita Osat ja niiden väliset yhteydet Osien välinen yhteistyö Periaatteet osiinjaon ja yhteistyön taustalla (arkkitehtuurimallit ja tyylit) 7.11.2008 Harri Laine 4

Luokat ja oliot Olioperustaisesti maailmaa tarkasteltaessa rakenteet nähdään olioina UML tarjoaa oliorakenteiden kuvaamiseksi luokka- ja oliokaaviot ja niihin liittyvän käsitteistön UML:n kaavioista useimmat ovat luokka- ja oliokaavion erikoistapauksia. 7.11.2008 Harri Laine 5

Luokat ja oliot Useimmat järjestelmät voidaan jakaa kerroksiin, esim. Käyttöliittymäkerros, jossa käyttöliittymäoliot järjestelmän ulospäin näkyvä osa, esim. ikkunat, valikot,raportit, palvelurajapinnat käyttäjän ja sisältöolioiden välinen yhteys: esitetään tietoja ja vastaanotetaan käyttäjän ohjausta Sovelluslogiikkakerros, jossa sisältöoliot toteuttaa reaalimaailman simulointimallin sisältöoliot tarjoavat omaan tietosisältöönsä perustuvia sovelluskohtaisia palveluja Tietojensäilytyskerros, jossa tietokantaoliot esim. tiedostot, tietokanta, säilyttävät sisältöolioiden tiloja 7.11.2008 Harri Laine 6

Luokat ja oliot Käyttöliittymä (interface) Sovelluslogiikka (application logic) Tietojen säilytys (data storage) 7.11.2008 Harri Laine 7

Luokka- ja oliokaavioilla (class diagram / object diagram) kuvataan ohjelmiston / järjestelmän koostuminen olioista olioiden tietosisältö olioiden tarjoamat palvelut olioiden väliset yhteydet luokitusjärjestelmän luokkien väliset suhteet 7.11.2008 Harri Laine 8

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 Puhdasoppisessa olio-ajattelussa olion tietoihin pääse käsiksi vain olion palveluiden kautta 'olion sisään ei nähdä' (black box) 7.11.2008 Harri Laine 9

(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 Nimi Tekstimääritelmä - mitä ovat Tietosisältö Palvelut 7.11.2008 Harri Laine 10

Luokkakaaviossa luokka esitetään luokkasymbolina nimi välttämätön tietosisältö mukana tarvittaessa palvelut 7.11.2008 Harri Laine 11

luokka Eläin elain_numero: int laji: String paino: float tulostatiedot() <<instance of>> <<instance of>> olioita leoleijona: Eläin eläinnumero = 123 laji = leijona paino = 220 Katkoviiva kuvaa riippuvuutta Viivaan liitetty luonnehdinta riippuvuuden tyyppiä anttiaasi: Eläin eläinnumero = 124 laji = aasi paino = 315 7.11.2008 Harri Laine 12

Luokkakaaviossa esitetään tyypillisesti vain luokkia. Olioita voidaan ottaa kaavioon esimerkkeinä havainnollistamaan jotain muuten ehkä epäselväksi jäävää asiaa. Oliosymbolin nimi-osassa esitetään alleviivattuna joko olion nimi/tunniste tai luokan nimi tai molemmat Tietosisältö- osassa annetaan ilmentymän attribuuttien arvot 7.11.2008 Harri Laine 13

Luokan olioiden tietosisältö kuvataan attribuuttien avulla Attribuutista voidaan esittää nimi (välttämätön) tietotyyppi (data type) moniarvoisuus (multiplicity) eli arvojen määrä oletusarvona 1 annetaan hakasuluissa: [alaraja..yläraja] * = epämääräisen monta = 0..* näkyvyys (visibility) vain ohjelmointiläheisessä kuvauksessa oletusarvo (jos olemassa) muita määreitä 7.11.2008 Harri Laine 14

Attribuutin arvo on aina jotain tyyppiä tyyppi erotetaan attribuutin nimestä kaksoispisteellä esim. päiväys: Date tai merkki: char Arvo voi olla perustietotyypin arvo (esim. int, UML sallii mitä tahansa perustietotyyppejä - voi soveltaa) olio, jolloin tietotyyppinä on olion luokka olioarvoinen attribuutti muodostaa yhteyden attribuutin sisältävän olion ja attribuutin arvona olevan olion välille yhteyksille on oma kuvaustekniikka olioarvoiset attribuutit tulisi esittää attribuuttimäärittelyn yhteydessä vain, jos olion luokka on perustietotyyppimäinen (Date, String, Color, Point, ) 7.11.2008 Harri Laine 15

Näkyvyysmääreet Tekniikka attribuutin tai palvelun käytön rajoittamiseen (vrt. C++, Java,...) Merkitään erikoismerkillä (tai ikonilla) nimen eteen Vaihtoehdot: private (-) sallii käytön vain luokan omissa palveluissa protected (#) sallii käytön myös luokan aliluokissa määriteltävissä palveluissa package (~) sallii käytön myös muissa saman paketin luokissa määriteltävissä palveluissa public (+) sallii käytön kaikkialta 7.11.2008 Harri Laine 16

Attribuutit ovat yleensä ilmentymäattribuutteja (instance attribute) jokaisella luokan ilmentymällä on attribuutin mukainen tieto UML:ssä tunnetaan myös luokka-attribuutit (class attribute) attribuutilla on luokkakohtainen arvo ilmaistaan alleviivaamalla attribuutin nimi Attribuutille voi antaa kaarisulkeissa{...} lisämääreitä UML tarjoaa valmiina eräitä lisämääreitä, kuten frozen (arvoa ei voi muuttaa, esim. syntymäaika) UML-mallin soveltaja voi ottaa käyttöön myös omia lisämääreitä 7.11.2008 Harri Laine 17

#seurvapaanro: int #tilinumero: int {frozen} #ibankoodi: String ~valuuttakoodi: String -tapahtumat[*] -saldo: float +viimeksikäytetty: Date Pankkitili +otto(summa: float) +pano(summa: float) +tulostatiedot() Luokkakohtainen seurvapaanro-attribuutti kertoo seuraavan vapaan tilinumeron, muut attribuutit ovat ilmentymäkohtaisia Attribuutit seurvapaanro, tilinumero ja ibankoodi ovat käytettävissä luokan Pankkitili ja sen aliluokkien (esim. Käyttötili) palveluissa Tilinumeroa ei voi muuttaa olion luonnin jälkeen Attribuutti tapahtumat on moniarvoinen, mutta sen tyyppiä ei ole määritelty Attribuutteihin tapahtumat ja saldo voi viitata vain Pankkitilin omissa palveluissa Attribuuttiin valuuttakoodi voi viitata kaikissa niissä luokissa, jotka on määritelty samassa pakkauksessa kuin Pankkitili Attribuuttiin viimeksikäytetty voi viitata kaikissa luokissa, samoin kaikkiin palveluihin 7.11.2008 Harri Laine 18

UML vs Java ohjelmointitasolla UML-luokka vastaa Java-luokkaa Javan staattiset kentät (static field) vastaavat luokkaattribuutteja Muut Java-luokassa määritellyt kentät vastaavat ilmentymäattribuutteja UML:n näkyvyys- ja muut määreet vastaavat varsin hyvin muita Javan modifier määreitä 7.11.2008 Harri Laine 19

Yhteydet Olioiden (ilmentymien) välisiä rakenteellisia kytkentöjä kutsutaan yhteyksiksi (association). Ohjelmakoodissa rakenteellinen kytkentä ilmenee siten, että luokalla on olioarvoinen attribuutti tai luokan oliosta on jokin epäsuora viittaus toiseen olioon. 7.11.2008 Harri Laine 20

Yhteydet Merkitään luokkakaaviossa viivana tai nuolena luokkien välille, mutta kuvaavat kyseisten luokkien ilmentymien välisiä kytkentöjä olioiden (eli ilmentymien) välillä rakenteellinen, pysyväluonteinen kytkentä 7.11.2008 Harri Laine 21

Yhteys Yhteyksiin voidaan liittää kytkentärajoitteita (multiplicity) Rajoite kertoo, montako luokan ilmentymää voi olla kytkettynä yhteen toisen luokan ilmentymään (esim. 1, *, 0..1 tai 1..*) Alaraja 0 merkitsee, että osallistuminen yhteyteen on valinnainen Yläraja * merkitsee, että ilmentymiä voi olla yhteydessä määrittelemättömän monta joskus symbolina n (vrt. kurssikirjan monet kuvat) Lyhennysmerkinnät 1 = 1..1 ja * = 0..* 7.11.2008 Harri Laine 22

Määritellään Java-ohjelmassa Asiakas-luokkaan tili-attribuutti seuraavasti Pankkitili[] tili = new Pankkitili[9]; Ts. Asiakkaalla voi olla enintään 9 pankkitiliä Vaaditaan lisäksi, että asiakkaalla on oltava aina vähintään yksi pankkitili (tarkistettava erikseen ohjelmassa) Sama UML:llä: Asiakas 1..9 tili Pankkitili roolinimi 7.11.2008 Harri Laine 23

Edellä nuoli osoittaa, että kyseessä suunnattu yhteys asiakas tietää tilinsä (asiakkaasta päästään pankkitiliin, navigointimahdollisuus), mutta ei suoraan päinvastoin - sveitsiläinen numerotili Jos haluttaisiin yhteys myös toiseen suuntaan, voitaisiin määritellä pankkitilille attribuutti Asiakas[] omistaja = new Asiakas[3]; 7.11.2008 Harri Laine 24

1..3 Asiakas omistaja 1..9 tili Pankkitili Yhteydet asiakkaasta pankkitiliin ja pankkitilistä asiakkaaseen esittävät samaa kytkentää vain eri suuntiin tarkasteltuna, niinpä ne voidaan esittää yhdellä yhteysviivalla Asiakas 1..3 omistaja 1..9 tili Pankkitili 7.11.2008 Harri Laine 25

Edellisen esimerkin yhteys on kaksisuuntainen Kaksisuuntaisessa yhteydessä nuolenkärjet voidaan jättää pois Asiakas 1..3 omistaja 1..9 tili Pankkitili Kaksisuuntainen yhteys Jos yhteysviivan toisessa päässä on nuoli ja toisessa ei, niin yhteys on yksisuuntainen 7.11.2008 Harri Laine 26

tili-omistaja yhteys ilmentymätasolla omistaja tili 1235: Pankkitili 1236: Pankkitili 1234: Pankkitili 4567:pankkitili aku: Asiakas iines: Asiakas 7.11.2008 Harri Laine 27

Edellisessä esimerkissä yhteyden osapuolille on annettu roolinimet (tili ja omistaja) ilmaisevat osapuolen aseman yhteydessä Yhteydelle voi antaa nimen molempiin suuntiin Ei tarvitse antaa nimeä lainkaan Jos yhteydelle annetaan nimi, se soi olla suuntaamaton tai siihen liittyy lukusuunta. Nuoli yhteyden nimessä ilmaisee lukusuunnan 7.11.2008 Harri Laine 28

nimi ilman lukusuuntaa Asiakas omistus 1..3 omistaja 1..9 tili Pankkitili nimi lukusuunnalla Asiakas >omistaa 1..3 omistaja 1..9 tili Pankkitili 7.11.2008 Harri Laine 29

Yhteydet ovat olioiden välisiä vaikka luokkakaaviossa ne esitetäänkin luokkien välisinä yhteysviivoina Molemmat yhteyden osapuolina olevat oliot voivat kuulua myös samaan luokkaan 7.11.2008 Harri Laine 30

Esimerkki työntekijällä voi olla vain yksi (välitön) esimies työntekijällä voi olla useita alaisia, ei kuitenkaan välttämättä yhtään 0..1 esimies Työntekijä 0..* alainen 7.11.2008 Harri Laine 31

isopomo esimies Edellisen kalvon luokkakaavio on esimerkki rekursiivisesta määrittelystä, joka tuottaa puumaisen, hierarkkisen ilmentymän alainen pikkupomo1 esimies alainen duunari1 duunari2 duunari3 alainen esimies pikkupomo2 alainen duunari4 duunari5 7.11.2008 Harri Laine 32

Yhteyteen voidaan liittää järjestysmääre {ordered unordered} ilmaisemaan, että olioon yhteydessä olevien olioiden joukko on jollain perusteella järjestetty Esimerkki kirjan tekijöiden joukko on järjestetty Kirja * 1..* tekijä {ordered} Kirjoittaja {unordered} on oletusarvo 7.11.2008 Harri Laine 33

Nowhere is here:kirja 1 2 Fox Mulder:Kirjoittaja Dana Scully:Kirjoittaja Ilmentymien järjestetty joukko 7.11.2008 Harri Laine 34

Yhteyteen voidaan liittää myös toistomääre {unique nonunique}. Unique on oletusarvo. Jos toistorajoite on nonunique oliolla voi olla useita samantyyppisiä kytkentöjä samaan olioon Otos_ takaisinpanolla * * valittu {nonunique} kohde Sama kohde voi tulla valituksi moneen kertaan 7.11.2008 Harri Laine 35

Jos kytkentärajoite puuttuu kuvasta, se on oletusarvoisesti 1..1 = 1 henkilö haltija 0..1 ajokortti Ajokortilla on tasan yksi haltija Oletusarvo rajoitteissa ei ole välttämättä hyvä asia Yhteydet pitäisi pystyä kuvaamaan myös ottamatta kantaa rajoitteisiin 1 Oletusarvo 7.11.2008 Harri Laine 36

Kompositio Kompositiolla tarkoitetaan tilannetta, jossa osien olemassaolo on sidoksissa kokonaisuuden olemassaoloon kun kokonaisuus hävitetään, häviävät myös sen osat osa voi sisältyä * vain yhteen samantyyppisen kompositioon osa ei voi vaihtaa kompositiotaan, vaan on aina osa samaa kokonaisuutta 7.11.2008 Harri Laine 37

Kurssi * Harjoitusryhmä Rakennus * Huoneisto Kompositio esitetään täytettynä salmiakkina kokonaisuuden puoleisessa päässä. 7.11.2008 Harri Laine 38

Olio voi kuulua useaan kompositioon, kuitenkin enintään yhteen samantyyppiseen kurssi opiskelija * osallistuminen * Jos kurssi tai opiskelija häviää häviävät myös osallistumiset 7.11.2008 Harri Laine 39

Kooste (aggregate) Vanhemmissa UML-versioissa on ollut mahdollista kuvata myös osien ja kokonaisuuksien suhdetta, johon ei liity komposition kaltaista olemassaoloriippuvuutta Kuvattu avoimella (tyhjällä) salmiakkisymbolilla Pelaaja voi kuulua moneen joukkueeseen. joukkue * * jäsen pelaaja 7.11.2008 Harri Laine 40