UML-luokkakaaviot.

Slides:



Advertisements
Samankaltaiset esitykset
Tuloksellinen Java-ohjelmointi Luku 3 Luokkien käyttäminen
Advertisements

18. Abstraktit tietotyypit
Rajapintaluokat Rajapintaluokka luettelee metodit, joille tulee löytyä toteutus asianomaisen rajapinnan toteuttavista luokista. Rajapintaluokka on siis.
19. Unified Modeling Language (UML)
Koostumussuhde Jukka Juslin © Jukka Juslin.
© Jukka Juslin1 Ohjelmointitaito (ict1td002, 12 op) Opintojakson esittely Kevät 2008 Jukka Juslin, Raine Kauppinen Tuloksellinen Java-ohjelmointi.
Olio-ohjelmoinnin perusteet luento 3: Muuttujista ja funktioista Sami Jantunen LTY/Tietotekniikan osasto.
Osion kaksi kertaus Jukka Juslin © Jukka Juslin.
6. Metodit.
© Jukka Harju, Viittausmuuttujat. © Jukka Harju, Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio.
© Jukka Harju, Jukka Juslin1 Java-ohjelmointi opas ammattimaiseen osaamiseen Luku 13 Monimuotoisuus.
Luokkien väliset koostesuhteet
© Jukka Harju, Jukka Juslin1 Java-ohjelmointi opas ammattimaiseen osaamiseen Luku 12 Periytyminen.
16. Javan omat luokat.
© Jukka Harju, Jukka Juslin1 Java-ohjelmointi opas ammattimaiseen osaamiseen Luku 6 (osittain) Tiedostot.
Luokkakaaviot Luokkakaaviot Tekninen suunnittelu.
Ict1td002: Ohjelmointitaito Kertaus Osio 2 - luokat - ilmentymät - viittaus- ja arvomuuttuja - ilmentymien taulukointi HAAGA-HELIA IltaTiko.
Nämä kalvot on lisensoitu Creative Commons Attribution-ShareAlike 1
Olio-ohjelmointi. Mitä olio-ohjelmointi on ?  Pyritään mallintamaan jotain reaalimaailman kohdetta tietokoneohjelman avulla  Olio on luokan ilmentymä.
Tuloksellinen Java-ohjelmointi Luku 9 Taulukot ja perustietorakenteet
Johdetun luokan määrittely tMyn1 Johdetun luokan määrittely •Kun johdettu luokka periytetään kantaluokasta, saadaan kantaluokan jäsenet enemmän tai vähemmän.
13. Pakkaukset.
Perintä. Yleistä Olio-ohjelmoinnin menetelmä muodostaa uusia luokkia aiemmin määriteltyjen luokkien avulla Luokka saa automaattisesti käyttöönsä kaikki.
Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 4 Toistolauseet
OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT. LUOKKA JAVA ohjelma koostuu luokista LUOKKA sisältää metodeja molemmat sisältävät attribuutteja eli muuttujia.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Olio-ohjelmoinnin perusteet luento 3
Oliomallittaminen ja UML
© Jukka Harju, Jukka Juslin Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 9 Poikkeuskäsittely.
9. Periytyminen Javassa.
Oliosuunnittelu.
© Jukka Harju, Jukka Juslin
1 Kertaus koetta varten oleellisista asioista Jukka Juslin.
Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 2 Ensimmäiset ohjelmat © Jukka Harju, Jukka Juslin.
UML-luokkakaaviot ja Java
Metodit – Arvotyyppi Ellei metodi palauta arvoa, sen arvotyyppi on void Tällöin ”return;”-lauseke ei ole metodissa pakollinen, vaikka sen käyttö on sallittua.
4. Attribuutit 4.1. Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2.
5. Kapselointi Yleistä Kapseloinnilla (encapsulation) tarkoitetaan luokan tietojen ja toimintojen pakkaamista yhdeksi suojatuksi kokonaisuudeksi.
10. Abstrakti luokka Johdanto Abstrakti luokka (abstract class) poikkeaa konkreettisesta luokasta (ei-abstrakti luokka) siten, että siitä ei.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
© Jukka Juslin1 Tiedostot Tuloksellinen Java-ohjelmointi.
17. Kooste Kooste Kooste (aggregation) on luokkien A ja B välinen suhde, joka tarkoittaa “A on B:n osa” tai “A kuuluu B:hen”. − Koostesuhteessa.
6. Relaatioalgebra ja relaatiokalkyyli
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op.
Oliot ja luokat Oliot ja luokat Oliot (object) ja luokat (class) ovat keskeisiä olio- ohjelmoinnin käsitteitä. Olio-ohjelmointi on ohjelmointiparadigma,
© Jukka Harju, Sisältö 1. Mitä on periytyminen Javassa? 2. Periytyminen UML-luokkakaaviossa 3. Termejä 4. Periytymishierarkia 5. Periytyminen vs.
Vesa Ollikainen & Outi Grotenfelt
© Jukka Harju, Jukka Juslin1 Tuloksellinen Java-ohjelmointi HashMap, Properties, Logger, etc Tuloksellinen Java-ohjelmointi.
Tuloksellinen Java-ohjelmointi Luku 2 Ensimmäiset ohjelmat
Olioiden taulukointi Perustaulukon käyttö Luokan ilmentymät voidaan tallettaa taulukkoon samoin kuin muuttujat Esimerkki talletetaan taulukkoon opintojaksojen.
11. Rajapinnat Sisällys Mitä rajapinnat ovat? Kuinka ne määritellään ja otetaan käyttöön? Moniperiytyminen rajapintojen avulla. Varoituksen.
Monimuotoinen luokka tMyn1 Monimuotoinen luokka Monimuotoinen luokka mahdollistaa saman jäsenfunktion toteutuksen monella tavalla. Tällöin puhutaan virtuaalisesta.
Johdetun luokan olion alustus tMyn1 Johdetun luokan olion alustus määrätyillä arvoilla Kun ohjelmassa esiintyy johdetun luokan olion määrittely, järjestelmä.
Kantaluokan määrittely tMyn1 Kantaluokan määrittely Perinnän käyttöön liittyvät varatut sanat private, protected, public, final ja abstract. Ne tarkoittavat.
1 © Jukka Juslin Luokat, attribuutit ja metodit Yleistietoa: seuraavalla koulutusviikolla tarkempi käsittely.
– Ohjelmistojen mallintaminen Unified Modeling Language (UML)
8. Periytyminen Sisällys Mitä on periytyminen? Yksittäis- ja moniperiytyminen. Oliot ja perityt luokat. Periytymisen käyttö.
UML-luokkakaavio ● Luokkakaavio (class diagram) kuvaa järjestelmän luokkarakennetta ● Mitä luokkia on olemassa ● Minkälaisia luokat ovat ● Luokkien suhteet.
5. Kapselointi.
11. Rajapinnat.
1. Olio-ohjelmointi.
UML-mallinnus osana tietotuotemäärittelyä
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
Rajapintaluokat Rajapintaluokka luettelee metodit, joille tulee löytyä toteutus asianomaisen rajapinnan toteuttavista luokista. Rajapintaluokka on siis.
Kantaluokan määrittely
8. Periytyminen.
3. Attribuutit.
8. Periytyminen.
4. Luokan testaus ja käyttö olion kautta
2. Olio-ohjelmoinnin perusteita
Esityksen transkriptio:

UML-luokkakaaviot

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.

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 UML- luokkakaaviossa 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 (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.

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)

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 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

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 SuoritettavaTehtava { 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" Yliluokka: Alus Aliluokka: Laiva Aliluokat sijoitetaan luokkakaaviossa aina yliluokkaansa alemmas. Aliluokka perii kaikki yliluokkansa ominaisuudet ja toiminnot. Alus Laiva

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

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. 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

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/classDiagram.html Genova, Ruiz del Castillo, Liorenz, 2003: Mapping UML Accosiations into Java Code http://www.jot.fm/issues/issue_2003_09/article4.pdf Booch, Jacobson, Rumbaugh, 1998: The Unified Modeling Language Reference Manual Stevens, Pooley, 2000: Using UML Software engineering with object and components