Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

– Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

Samankaltaiset esitykset


Esitys aiheesta: "– Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä"— Esityksen transkriptio:

1 582104 – Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

2 Luokkamallin lisäpiirteitä
Erilaiset yhteystyypit kooste kompositio Muita luokkien välisiä suhteita riippuvuudet periytyminen eli luokkahierarkia Yhteysluokkien mallintaminen Mallinnuselementtien erikoistaminen

3 Kooste (aggregation) Erikoistapaus, jossa yhteyden osapuolta voidaan pitää osana toista osapuolta Esitetään yhteysviivan kokonaisuuden puoleisen pään avoimella salmiakkisymbolilla Selventää olioiden välistä semanttista suhdetta ei välttämättä vaikutusta navigointimahdollisuuksiin yleensä kuitenkin kokonaisuudesta on pääsy sen osiin jäsen * Joukkue Pelaaja

4 Kompositio (composition)
Koostetta merkittävämpi erikoistapaus, jossa osan olemassaolo kytketty kokonaisuuteen: kun kokonaisuus poistetaan, häviävät myös osat (vrt. kooste) osa(-olio) voi sisältyä vain yhteen kompositio(-olioon) osa ei voi vaihtaa kompositiotaan kokonaisuus vastuussa osien luonnista ja poistamisesta (yksityiskohdat riippuvat yhteyden toteutuksesta) Merkitään suljetulla salmiakkisymbolilla Rakennus Huone osoite koodi 1..*

5 Kompositiosta Kompositio on UML:ssä ainoa tapa ilmaista olemassaoloriippuvuus mallintamisessa tärkeä asia (tärkeämpi kuin osan ja kokonaisuuden yhteys) jos olemassaoloriippuvuus pitää kyetä esittämään, on syytä käyttää kompositiota, vaikka osa-kokonaisuus -yhteys ei aivan selvältä näyttäisikään Kompositiota käytetään myös usein hyväksi olioiden identifioinnissa esim. ‘Exactum-rakennuksen huone C227’

6 Muita luokkien välisiä suhteita
Edellä on tarkasteltu sellaisia luokkakaavioissa esiintyviä suhteita, jotka ilmenevät olioiden välisinä yhteyksinä Lisäksi UML:ssä voidaan esittää luokkien välisiä riippuvuuksia (dependency) luokkahierarkia (class hierarchy, inheritance hierarchy)

7 Riippuvuus (dependency)
Ilmaisee luokan muuttamisen mahdollista vaikutusta toiseen luokkaan Kuvataan katkoviivalla nuolenkärki osoittaa siihen luokkaan, josta viivan toisessa päässä oleva on riippuva riippuvuuden luonne ilmaistaan yleensä stereotyypillä Esim. luontiriippuvuus

8 Luokkahierarkia Luokkahierarkiassa (class hierarchy, inheritance hierarchy) luokka voidaan määritellä toisen luokan aliluokaksi (subclass) Esimerkiksi: luokka Johtaja on luokan Henkilö aliluokka luokat Auto, Laiva ja Lentokone ovat luokan Kulkuväline aliluokkia

9 Ilmentymät ja luokkahierarkia
Jos luokka A on luokan B aliluokka (ja B vastaavasti A:n yliluokka), niin jokainen A:n ilmentymä on myös B:n ilmentymä esim. jokainen Johtaja on myös Henkilö Tästä seuraa, että kaikki ominaisuudet, jotka on määritelty luokan B ilmentymille, liittyvät myös A:n ilmentymiin esim. jos Henkilölle on määritelty attribuutti nimi, niin myös Johtajalla on automaattisesti nimi-attribuutti esim. jos Henkilö on määritelty osapuoleksi työsuhde-yhteyteen, myös Johtajalla on työsuhde-yhteys

10 Periytyminen Em. ilmiötä kutsutaan periytymiseksi (inheritance)
yliluokkaan (super class, base class) liitetyt attribuutit, operaatiot ja yhteydet periytyvät aliluokalle aliluokkaan voidaan liittää lisäksi omia ominaisuuksia Periytyminen on luokkien välistä määrittelyrakenteiden periytymistä, joten ilmentymät eivät peri attribuuttien arvoja toisiltaan moniarvoisuusmäärettä ei voi merkitä periytymissuhteeseen, sillä moniarvoisuus täsmentää ilmentymien välistä yhteyttä

11 Luokkahierarkia eli yleistyssuhteet (generalization)
Viiva, jossa yliluokan päässä avoin kolmio Esimerkiksi: johtajalla on vastuualue, jota ei ole henkilöillä yleisesti vain johtajalla voi olla oikeus käyttää edustustiliä johtajalla voi olla alaisia 0..* 0..1 alainen esimies Johtaja vastuualue Henkilö Edustustili 0..* 0..1 käyttöoikeus

12 Luokkahierarkia mallinnuksessa
Järjestelmää korkealla tasolla mallinnettaessa luokkahierarkiasta on eniten hyötyä rakenteellisten sääntöjen ilmaisemisessa esim. “jokin on joko A tai B” kuvauksen ekonomisuudessa ei tarvitse toistaa samoja asioita useassa luokassa tarvittaessa voidaan esittää vain hierarkian juuriluokka

13 Esimerkki rakenteellisesta säännöstä
Autolla on tasan yksi omistaja, joka voi olla joko yritys tai henkilö Omistaja Auto * Henkilö Yritys 1 Auto * Henkilö Yritys 0..1 henkilöomistus yritysomistus Voiko autolla olla - sekä yritys- että henkilöomistaja? - nolla omistajaa?

14 Luokkahierarkian kattavuus
Aliluokkia voidaan muodostaa monin eri perustein Luokittelut voivat olla kattavia (complete) tai ei-kattavia (incomplete) poissulkevia (disjoint) tai osittain päällekkäisiä (overlapping) Henkilö Johtaja Nainen Erillisin perustein muodostettuja osin päällekkäisiä aliluokkia Henkilö Mies Nainen Yhteen luokitteluperusteeseen perustuva kattava ja poissulkeva luokittelu {complete, disjoint}

15 Luokittelu mallinnuksessa ja ohjelmoinnissa
Kun reaalimaailmassa luokitellaan ilmiöitä, voidaan käyttää samanaikaisesti useita erilaisia luokitteluperusteita esim. sukupuoli, virka-asema, auton omistus, … Monissa oliomenetelmissä ja oliokielissä ollaan kuitenkin paljon rajoittuneempia, mikä voi pakottaa kömpelöihin mallinnusratkaisuihin Tyypillisesti esim. ohjelmointikielissä olio ei voi olla usean luokan välitön ilmentymä

16 Luokittelu mallinnuksessa ja ohjelmoinnissa
Henkilö Johtaja Nainen liisa Reaalimaailmassa olio voi olla usean luokan välitön ilmentymä «instanceOf» Oliokielissä tarvitaan usein esim. keinotekoinen kokoava yliluokka, koska olio ei voi olla usean luokan välitön ilmentymä Henkilö Johtaja Nainen liisa Naisjohtaja «instanceOf»

17 Moniperiytyminen (multiple inheritance)
Tarkoittaa tilannetta, jossa luokka on useamman kuin yhden luokan välitön aliluokka Erityisesti toteutuksen moniperiytyminen voi aiheuttaa monikäsitteisyysongelmia esim. kaksi signatuuriltaan samaa operaatiota kaikki olio-ohjelmointikielet eivät tarjoa (toteutuksen eli lauseiden ja lausekkeiden) moniperiytymistä esim. Javassa ei ole, C++:ssa on Sotilas Johtaja Kenraali

18 Yhteyden tietojen mallintaminen
Yhteyteen voi joskus liittyä myös tietoa Esim. tilanne missä henkilö voi olla (usean) yhtiön osakkeenomistaja Osakkeenomistuksen kannalta tärkeä asia on omistettujen osakkeiden määrä Yksi tapa mallintaa tilanne on käyttää yhteysluokkaa (engl. Association class), eli yhteyteen liittyvää luokkaa, joka sisältää esim. yhteyteen liittyviä tietoja

19 Toinen yhteysluokkaesimerkki
Luentomonisteessa mallinnetaan tilanne, jossa henkilö voi olla jäsenenä useassa yhdistyksessä yhdistyksessä on vähintään 1 jäsen Jäsenyys kuvataan yhteytenä, johon liittyy yhteysluokka jäsenyyden alkaminen (liittymisaika) sekä jäsenyyden tyyppi (rooli, eli onko rivijäsen, puheenjohtaja tms...) kuvataan yhteysluokan avulla

20 Kannattaako yhteysluokkia käyttää?
Korkean tason abstrakteissa malleissa ehkä Suunnittelutason malleissa todennäköisesti ei, sillä ei ole selvää, mitä yhteysluokka tarkoittaa toteutuksen tasolla Yhteysluokan voi aina muuttaa tavalliseksi luokaksi Yhteysluokka joudutaankin käytännössä aina ohjelmoidessa toteuttamaan omana luokkanaan, joka yhdistää alkuperäiset luokat joiden välillä yhteys on Tämän takia yhteysluokkia ei välttämättä kannata käyttää alunperinkään

21 Yhteysluokasta normaaliluokaksi
Edellinen osake-esimerkki: Esitellään väliluokka Purchase, johon mallinnetaan yhteyden tiedot

22 Kaksio olioa ja yhteyksien lukumäärä
Henkilöllä voi olla travels on -yhteyksiä useiden lentoyhtiöiden kanssa Yhteysluokkana Ticket on kerrottu matkan tiedot Henkilö voi olla travels on -yhteydessä moniin eri lentoyhtiöolioihin Saman lentoyhtiöolion (esim. Finnair) kanssa ei kuitenkaan voi olla useampaa yhteyttä !

23 Siis: jos luokkakaaviossa kahden luokan välillä on yhteys, voi kaksi luokkien olioa olla vain yhdessä yhteydessä kerrallaan Esim. olioiden Arto:Person ja Finnair:Airline välillä voi olla vain yksi yhteys, eli Arto voi lentää Finnairilla vain kerran Tämä siitä huolimatta, että kytkentärajoitus on * Artolla voi olla useita lippuja, mutta jokainen täytyy olla eri lentoyhtiöltä! Järkevin ratkaisu ongelmaan on kuvata yhteys omana luokkanaan Henkilöllä voi olla useita lippuja Lippu liittyy tiettyyn lentoyhtiöön ja tiettyyn henkilöön Lentoyhtiön liittyy useita myytyjä lippuja

24 UML:n erikoistaminen Olemme jo ainakin kerran törmänneet kaavioissa merkkien << ja >> sisään kirjoitettuun tekstiin Alla tilanne, jossa AutotonHenkilo- ja Auto-luokkien välisen riippuvuuden (katkoviiva) luonne on tarkennettu Kyseessä on UML:n peruskäsitteen riippuvuus laajennus erikoiskäsitteeksi, eli riippuvuudeksi joka johtuu siitä, että kohteena olevan luokan olioa käytetään parametrina Laajennus ilmaistaan stereotyyppinä, jolla tarkoitetaan tietyn lisämerkityksen antamista halutulle symbolille Stereotyyppi merkitään kaavioon << ja >> välissä olevana ”kuvaavana” sanana

25 UML:n erikoistaminen Stereotyyppi voi liittyä oikeastaan mihin tahansa UML-symboliin tai symbolin osaan Esim. stereotyyppi voi tarkentaa luokan roolia: Luokka on joko entity eli tietosisältöluokka tai control eli toiminnanohjausluokka

26 UML:n erikoistaminen UML:ssä on joukko valmiiksi määriteltyjä stereotyyppejä (kuten create) Stereotyyppejä voi määritellä halutessaan myös itse Stereotyypin voikin ajatella kommentin tapaiseksi lisäselitykseksi, jolla on ”hyvin määritelty” merkitys omissa kaavioissa Eli jos tarvetta, kannattaa tarkentaa, mitä määritellyllä stereotyypillä tarkoitetaan Erikoistetuille käsitteille voidaan myös määritellä oma graafinen symboli Oikeastaan käyttötapauskaavion tikku-ukko on UML-standardin itse määrittelemä graafinen laajennussymbooli


Lataa ppt "– Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä"

Samankaltaiset esitykset


Iklan oleh Google