Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

UML-luokkakaaviot.

Samankaltaiset esitykset


Esitys aiheesta: "UML-luokkakaaviot."— Esityksen transkriptio:

1 UML-luokkakaaviot

2 Nämä kalvot on lisensoitu Creative Commons Attribution-ShareAlike 1
Nämä kalvot on lisensoitu Creative Commons Attribution-ShareAlike 1.0 -lisenssillä. © Jukka Harju, 2014 Nämä kalvot on lisensoitu Creative Commons Attribution-ShareAlike 1.0 -lisenssillä. Lisäys edelliseen lisenssiin: Kalvojen muokkaaminen on sallittu vain opettajille, joiden kursseilla käytetään kurssikirjana Tuloksellinen Java-ohjelmointi - tai Java ohjelmointi opas ammattimaiseen osaamiseen -kirjaa.

3 Olio (Object) "An object is simply a real-world thing or concept" [Scott] "Object is a thing which has behavior, state and identity" [Booch] Ohjelmoinnin kannalta: Tila (State) = olion attribuuttien sisältämä tieto Toiminta (Behavior) = metodit joita oliolle voi suorittaa Identiteetti (Identity) = OID (object identifier) Kapselointi: Olion tila (=attribuutit) suojataan siten, että sitä pystytään muuttamaan vain olion toiminnallisuuden (=metodien) kautta.

4 Luokka (Class) "A class is a collection of objects that have the same characteristics" [Scott] "A class describes a set of objects with an equivalent role or roles in a system" [Stevens, Pooley] UML:ssä luokka kuvataan seuraavasti: Kuvauksesta voidaan haluttaessa jättää pois attribuuttien ja / tai metodien "lokero".

5 Näkyvyysmääreet Toteutusta kuvaavia luokkakaaviota laadittaessa tulee attribuuteille ja metodeille määritellä niiden näkyvyys. Tärkeimmät näkyvyysmääreet on kuvattu seuraavassa taulukossa. Näkyvyys C#:ssa Symboli UML- luokkakaaviossa Käyttö mahdollista public + Kaikista ohjelmiston luokista. protected # Ko. luokasta ja sen aliluokista. private - Ko. luokasta.

6 Nimeämiskäytäntö Toteutusta kuvaavia luokkakaaviota laadittaessa käytetään toteutuskielen määrittelemää nimistandardia C#:ssa luokkien, metodien ja ominaisuuksien nimet alkavat isolla kirjaimella. Useamman kuin yhden osat sisältävät nimet kirjoitetaan yhteen siten, että toisen osan aloittava kirjain on iso (PascalCase/MixedCase). Toteutusta kuvaavia luokkakaavioita laadittaessa käytetään toteutuskielen mukaisia tyyppejä. Nimien tulee olla mahdollisimman kuvaavia, liiallista lyhenteiden käyttöä tulee välttää. Esim. etunimi (ei eNimi) Nimien tulee olla yleisesti käytössä olevaa terminologiaa.

7 Nimeämiskäytäntö Luokkien nimet tulee kirjoittaa yksikkömuodossa.
Esim. Pelaaja (ei Pelaajat) Metodien nimien tulee kuvata toimintaa. Metodeja jotka toteutetaan yleensä aina ja vieläpä samalla tavalla, ei kannata kuvata luokkakaaviossa. Alus Alus - Henkilomaara: int - Polttoaine: double - Nopeus: double - Henkilomaara: int - Polttoaine: double - Nopeus: double + Alus(): Alus + Alus(int, double, double): Alus + Alus(Alus): Alus + setHenkilomaara(int) + setPolttoaine(double) + setNopeus(double) + getHenkilomaara(): int + getPolttoaine(): double + getNopeus(): double + tankkaa(int): bool + kiihdyta(double) + tankkaa(int): bool + kiihdyta(double)

8 Staattiset ominaisuudet ja metodit
Staattiset ominaisuudet ja metodit esitetään UML-luokkakaaviossa alaviivan kera. Staattiset ominaisuudet ja metodit sijoitetaan ennen ei-staattisia attribuutteja ja metodeja. Attribuutit ja metodit kuvataan laskevassa näkyvyysjärjestyksessä, laajimman näkyvyysalueen omaavat ensiksi.

9 Luokkien väliset suhteet
Seuraavassa taulukossa on kuvattu tällä kurssilla käsitellyt luokkien väliset suhteet. Symboli Suhde yhteyssuhde eli assosiaatio (association) vahva koostumussuhde (composition) periytymissuhde (generalization) toteutussuhde (realization) käyttöyhteys (usage)

10 Yhteyssuhde eli assosiaatio
(Binäärinen) assosiaatio yhdistää toisiinsa kaksi luokkaa, joista luoduilla olioilla on yhteys toisiinsa. Assosiaatiolla toisiinsa liitettyjen luokkien välillä on pysyvä suhde. Assosiaation ominaisuuksia: nimi kirjoitetaan assosiaatio-symbolin puoliväliin nimen yhteyteen voidaan merkitä nuolisymboli, joka kuvaa assosiaation lukusuunnan kerrannaisuudet: kerrannaisuudet kirjoitetaan assosiaation päihin, kuvaa kuinka monta "viereisen" luokan oliota voi liittyä assosiaation "toisen pään" luokan olioon. Yleisimmät kerrannaisuudet: 0..1 0..* 1 1..* Myös muut kerrannaisuuslukemat sallittuja. Assosiaatiota kutsutaan yksinkertaiseksi, mikäli edes toisen luokan kerrannaisuus on korkeintaan yksi. Assosiaatiota kutsutaan moninkertaiseksi, mikäli molempien luokkien kerrannaisuus>1. Tehtävä 1..* suorittaa 1 Alus

11 Assosiaation toteuttaminen C#:ssa
Yksinkertaisimmin assosiaatio voidaan toteuttaa C# assosioitavan luokan tyyppisenä ominaisuutena. Ominaisuuteen talletetaan assosiaation kuvaama linkki. Moninkertainen assosiaatio voidaan toteuttaa C#:ssa sopivan attribuuttina käytettävän tietorakenteen avulla. Koska kerrannaisuuden maksimilukumäärää ei assosiaatiossa yleensä ole tällöin tiedossa, täytyy käytettävän tietorakenteen olla dynaaminen.

12 Assosiaation toteuttaminen C#:ssa
1. Esimerkki yksinkertaisesta assosiaatiosta: Tehtävä 1..* suorittaa 1 Alus public class Alus{ private Tehtava tehtava; public Tehtava SuoritettavaTehtava { get { return tehtava;} set { tehtava=value;} }

13 Vahva koostumussuhde Koostumussuhde tulee kysymykseen jo luokan olion voidaan ajatella olevan osa toisen luokan oliota. Esimerkiksi: "Siipi on osa alusta". Koostuminen on aina yhdensuuntaista, edellisessä esimerkissä ei voida ajatella että "alus on osa siipeä". Vahva koostumus (composition) on koostumuksen (aggregate) erityistapaus. Vahvassa koostumuksessa suhteen molemmilla olioilla on sama elinikä: Oliot luodaan samalla kertaa. Oliot tuhotaan samalla kertaa. Toisen olion osana oleva olio ei voi esiintyä minkään muun olion osana. Yleensä vahva koostumussuhde pätee lähinnä esineille. Työntekijä on osa tiimiä: Kyseessä ei ole vahva koostumus, sillä työntekijä voi varmasti olla olemassa vielä senkin jälkeen kun tiimi hajotetaan. Moottori on osa autoa: Kyseessä on yleensä vahva koostumus, sillä auto ja moottori rakennetaan yhtä aikaa ja myös romutetaan yhtä aikaa.

14 Miten vahva koostumussuhde toteutettaisiin C#:ssa?
Koostumussuhteessa olevat oliot tulee luoda samalla kertaa. Lisäksi halutaan varmistaa että toisen olion osana oleva olio ei voi esiintyä minkään toisen olion osana. Molemmat oliot tulee tuhota samalla kertaa

15 Periytymissuhde Periytymissuhde on kyseessä silloin kun luokan olion voidaan ajatella olevan myös toisen luokan olio. Esimerkiksi: "Laiva on alus" Yliluokka: Alus Aliluokka: Laiva Aliluokat sijoitetaan luokkakaaviossa aina yliluokkaansa alemmas. Aliluokka perii kaikki yliluokkansa ominaisuudet ja toiminnot. Alus Laiva

16 Periytymissuhde & C# C#:n kannalta periytymissuhde on edellisiä selkeämpi tapaus, C#:ssa on syntaksi periytymissuhteen toteuttamiseen. Esimerkiksi: "Laiva on alus" Alus-luokka toteutetaan "normaalisti". Laiva-luokan määrittelyssä merkintä ”:”. public class Laiva : Alus { ... Alus Laiva

17 Abstrakti luokka Abstraktilla luokalla ei voi olla ilmentymää  abstrakti luokka täytyy aina käytännössä periyttää jotta siitä olisi jotain hyötyä. UML:ssä abstrakti luokka kuvataan kirjoittamalla luokan nimi kursiivilla. Abstraktilla luokalla on yleensä vähintään yksi abstrakti metodi (eli metodi joka on ainoastaan määritelty muttei toteutettu). Abstrakti metodi kuvataan UML:ssä kirjoittamalla metodin nimi kursiivilla. Abstraktit metodit täytyy toteuttaa aliluokassa. Alus - nimi: String - polttoaine: double - nopeus: double + tankkaa(double): bool Laiva + Tankkaa(double): bool

18 Abstrakti luokka & C# C#:ssa on syntaksi abstraktin luokan toteuttamiseen: Abstraktin luokan määrittelyssä avainsana abstract. Abstraktin metodin määrittelyssä avainsana abstract. abstract class Alus { private String nimi; private double polttoaine; private double nopeus; public abstract bool Tankkaa(double maara); ... } class Laiva : Alus { public override bool Tankkaa(double maara) { //metodin toteuttavat ohjelmalauseet Alus - nimi: String - polttoaine: double - nopeus: double + tankkaa(double): bool Laiva + Tankkaa(double): bool

19 Toteutussuhde Rajapinta on joukko metodien määrittelyitä.
Rajapinnan toteuttavassa luokassa täytyy olla rajapinnassa määritellyille metodeille toteutukset. UML:n luokkakaaviossa luokan merkitään olevan rajapinta <<interface>>- merkinnällä (merkintää kutsutaan UML:ssä stereotyypiksi). Rajapintaluokka ei saa attribuutteja.

20 Toteutussuhde & C# C#:ssa on syntaksi sekä rajapintaluokan määrittelylle, että rajapintaluokan toteuttamiselle. interface Kulkuneuvo{ //metodien määrittelyt ... } class Auto : Kulkuneuvo{ //metodien toteutukset

21 UML-luokkakaavio on laajempi
Edellä käsiteltiin vain osa UML-luokkakaavion ominaisuuksista. Käsittelemättä jäi mm. seuraavaa: koostumussuhde (aggregation) assosiaation rooli assosiaation navigaatio

22 Lähteet UML 2.0 specification:
UML 1.5 specification: Grady Booch, 1991: Object Oriented Design with Applications Kendall Scott, 2001: UML Explained Scott W. Ambler, 2005: UML Class Diagram Guidelines Genova, Ruiz del Castillo, Liorenz, 2003: Mapping UML Accosiations into Java Code Booch, Jacobson, Rumbaugh, 1998: The Unified Modeling Language Reference Manual Stevens, Pooley, 2000: Using UML Software engineering with object and components


Lataa ppt "UML-luokkakaaviot."

Samankaltaiset esitykset


Iklan oleh Google