UMLluokkakaaviot Nm kalvot on lisensoitu Creative Commons AttributionShare
UML-luokkakaaviot
Nämä kalvot on lisensoitu Creative Commons Attribution-Share. Alike 1. 0 -lisenssillä. © Jukkaedelliseen Lisäys Harju, 2014 lisenssiin: Kalvojen muokkaaminen on sallittu vain opettajille, joiden kursseilla käytetään kurssikirjana Tuloksellinen Java -ohjelmointi - tai Java ohjelmointi opas ammattimaiseen osaamiseen -kirjaa.
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.
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".
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 UMLluokkakaaviossa Käyttö mahdollista public + Kaikista ohjelmiston luokista. protected # Ko. luokasta ja sen aliluokista. private - Ko. luokasta.
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 (Pascal. Case/Mixed. Case). • • 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 e. Nimi) • Nimien tulee olla yleisesti käytössä olevaa terminologiaa.
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 - Henkilomaara: int - Polttoaine: double - Nopeus: double + Alus(): Alus + Alus(int, double): Alus + Alus(Alus): Alus + set. Henkilomaara(int) + set. Polttoaine(double) + set. Nopeus(double) + get. Henkilomaara(): int + get. Polttoaine(): double + get. Nopeus(): double + tankkaa(int): bool + kiihdyta(double) Alus - Henkilomaara: int - Polttoaine: double - Nopeus: double + tankkaa(int): bool + kiihdyta(double)
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.
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)
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 suorittaa 1. . * 1 – 0. . * Tehtävä Alus – 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.
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.
Assosiaation toteuttaminen C#: ssa 1. Esimerkki yksinkertaisesta assosiaatiosta: Tehtävä 1. . * suorittaa 1 Alus public class Alus{ private Tehtava tehtava; public Tehtava Suoritettava. Tehtava { get { return tehtava; } set { tehtava=value; } }
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.
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
Periytymissuhde • • Periytymissuhde on kyseessä silloin kun luokan olion voidaan ajatella olevan myös toisen luokan olio. Esimerkiksi: "Laiva on alus" Alus Laiva – Yliluokka: Alus – Aliluokka: Laiva • • Aliluokat sijoitetaan luokkakaaviossa aina yliluokkaansa alemmas. Aliluokka perii kaikki yliluokkansa ominaisuudet ja toiminnot.
Periytymissuhde & C# • • C#: n kannalta periytymissuhde on edellisiä selkeämpi tapaus, C#: ssa on syntaksi periytymissuhteen toteuttamiseen. Esimerkiksi: "Laiva on alus" Alus Laiva • Alus-luokka toteutetaan "normaalisti". • Laiva-luokan määrittelyssä merkintä ”: ”. public class Laiva : Alus {. . .
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
Abstrakti luokka & C# • C#: ssa on syntaksi abstraktin luokan toteuttamiseen: – Abstraktin luokan määrittelyssä avainsana abstract. – Abstraktin metodin määrittelyssä avainsana abstract class Alus { private String nimi; private double polttoaine; private double nopeus; public abstract bool Tankkaa(double maara); . . . } Alus - nimi: String - polttoaine: double - nopeus: double + tankkaa(double): bool class Laiva : Alus { public override bool Tankkaa(double maara) { //metodin toteuttavat ohjelmalauseet }. . . Laiva } + Tankkaa(double): bool
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.
Toteutussuhde & C# • C#: ssa on syntaksi sekä rajapintaluokan määrittelylle, että rajapintaluokan toteuttamiselle. interface Kulkuneuvo{ //metodien määrittelyt. . . } class Auto : Kulkuneuvo{ //metodien toteutukset. . . }
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
Lähteet • • • UML 2. 0 specification: http: //www. omg. org/cgi-bin/doc? ptc/2004 -10 -02 UML 1. 5 specification: http: //www. omg. org/cgi-bin/doc? formal/03 -03 -01 Grady Booch, 1991: Object Oriented Design with Applications Kendall Scott, 2001: UML Explained Scott W. Ambler, 2005: UML Class Diagram Guidelines – http: //www. agilemodeling. com/style/class. Diagram. html • Genova, Ruiz del Castillo, Liorenz, 2003: Mapping UML Accosiations into Java Code – http: //www. jot. fm/issues/issue_2003_09/article 4. pdf • • Booch, Jacobson, Rumbaugh, 1998: The Unified Modeling Language Reference Manual Stevens, Pooley, 2000: Using UML Software engineering with object and components
- Slides: 22