Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

UML-luokkakaaviot ja Java

Samankaltaiset esitykset


Esitys aiheesta: "UML-luokkakaaviot ja Java"— Esityksen transkriptio:

1 UML-luokkakaaviot ja Java
© Jukka Harju, 2005

2 Olio (Object) "An object is simply a real-world thing or concept" [Scott] "Object is a thing which has behavior, state and identity" [Booch] Javan 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. © Jukka Harju, 2005

3 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". © Jukka Harju, 2005

4 Näkyvyysmääreet Toteutusta kuvaavia luokkakaaviota laadittaessa tulee attribuuteille ja metodeille määritellä niiden näkyvyys. Eri näkyvyysmääreet on kuvattu seuraavassa taulukossa. Näkyvyys Javassa Symboli UML-luokkakaaviossa Käyttö mahdollista public + Kaikista ohjelmiston olioista. protected # Ko luokasta ja sen aliluokista. Huom! Javassa käyttö mahdollista lisäksi muista saman pakkauksen luokista private - Ko luokasta. package ~ Kaikista samaan pakkaukseen kuuluvista luokista. © Jukka Harju, 2005

5 Nimeämiskäytäntö Toteutusta kuvaavia luokkakaaviota laadittaessa käytetään toteutuskielen määrittelemää nimistandardia Javassa luokkien nimet alkavat isolla kirjaimella, metodien ja attribuuttien nimet pienellä Useamman kuin yhden osat sisältävät nimet kirjoitetaan yhteen siten, että toisen osan aloittava kirjain on ISO. Toteutusta kuvaavia luokkakaaviota 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. © Jukka Harju, 2005

6 Nimeämiskäytäntö Luokkien nimet tulee kirjoittaa yksikkömuodossa.
Esim. Asiakas (ei Asiakkaat) Metodien nimien tulee kuvata toimintaa. Metodeja jotka toteutetaan yleensä aina ja vieläpä samalla tavalla, ei kannata kuvata luokkakaaviossa. © Jukka Harju, 2005

7 Staattiset attribuutit ja metodit
Staattiset attribuutit ja metodit esitetään UML-luokkakaaviossa alaviivan kera. Staattiset attribuutit ja metodit sijoitetaan ennen ei-staattisia attribuutteja ja metodeja (sama pätee myös koodiin). Attribuutit ja metodit kuvataan laskevassa näkyvyysjärjestyksessä, laajimman näkyvyysalueen omaavat ensiksi. © Jukka Harju, 2005

8 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) © Jukka Harju, 2005

9 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. © Jukka Harju, 2005

10 Assosiaation toteuttaminen Javassa
Java ei sisällä syntaksia assosiaation suoraan toteuttamiseen. Yksinkertaisimmin assosiaatio voidaan toteuttaa Javassa viittausmuuttuja-attribuuttina. Viittausmuuttujaan talletetaan assosiaation kuvaama linkki. Moninkertainen assosiaatio voidaan toteuttaa Javassa 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 (esim. ArrayList-luokasta luotu olio, taulukko ei kelpaa). © Jukka Harju, 2005

11 Assosiaation toteuttaminen Javassa
1. Esimerkki yksinkertaisesta assosiaatiosta: public class Tilaus{ private Asiakas asiakas; ... 2. Esimerkki moninkertaisesta assosiaatiosta: public class Peli{ private ArrayList pelaajat; ... © Jukka Harju, 2005

12 Vahva koostumussuhde Koostumussuhde tulee kysymykseen jo luokan olion voidaan ajatella olevan osa toisen luokan oliota. Esimerkiksi: "Kurssi on osa koulutusohjelmaa". Koostuminen on aina yhdensuuntaista, edellisessä esimerkissä ei voida ajatella että "koulutusohjelma on osa kurssia". 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. © Jukka Harju, 2005

13 Vahva koostumussuhde & Java
Javassa ei ole suoraa syntaksia vahvan koostumussuhteen toteuttamiselle. Javan kannalta vahva koostumus merkitsee mm. seuraavaa: 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 vaatimukset saadaan toteutettua sillä, että autolle luodaan Moottori-olio Auto-luokan muodostimessa. 3. Molemmat oliot tulee tuhota samalla kertaa: Tuleeko tämä vaatimus täytettyä automaattisesti Javan roskienkeruun toimesta? public class Auto{ private Moottori moottori; ... public Auto(){ moottori = new Moottori(); © Jukka Harju, 2005

14 Vahva koostumussuhde & Java
Tarkastellaan vielä seuraavaa vaatimusta: 3. Molemmat oliot tulee tuhota samalla kertaa: Edellä moottori toteutettiin Auto-luokan attribuuttina, viittaus Auto-olion Moottori-olioon otetaan talteen attribuuttina olevaan viittausmuuttujaan. Javan roskienkeruu tuhoaa olion automaattisesti kun siihen ei ole yhtään viittausta. Viittausta auton moottori-attribuuttiin ei voida luokan ulkopuolelta suoraan kysyä, mutta mitä tapahtuu jos tälle attribuutille toteutetaan get-metodi? public class Auto{ private Moottori moottori; ... public Auto(){ moottori = new Moottori(); } public Moottori getMoottori(){ return moottori; © Jukka Harju, 2005

15 Periytymissuhde Periytymissuhde tulee kyseessä silloin kun luokan olion voidaan ajatella olevan myös toisen luokan olio. Esimerkiksi: "Oppilas on henkilö" Yliluokka: Henkilo Aliluokka: Oppilas Kantaluokka Javassa aina Object Aliluokat sijoitetaan luokkakaaviossa aina yliluokkaansa alemmas. Aliluokka perii kaikki yliluokkansa ominaisuudet ja toiminnot. © Jukka Harju, 2005

16 Periytymissuhde & Java
Javan kannalta periytymissuhde on edellisiä selkeämpi tapaus, Javassa on syntaksi periytymissuhteen toteuttamiseen. Esimerkiksi: "Oppilas on henkilö" Henkilo-luokka toteutetaan "normaalisti". Oppilas-luokan määrittelyssä avainsana extends. public class Oppilas extends Henkilo{ ... © Jukka Harju, 2005

17 Abstrakti luokka Abstraktilla luokalla ei voi olla ilmentyä  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. © Jukka Harju, 2005

18 Abstrakti luokka & Java
Javassa on syntaksi abstraktin luokan toteuttamiseen: Abstraktin luokan määrittelyssä avainsana abstract. Abstraktin metodin määrittelyssä avainsana abstract. public abstract class Tyontekija{ private String nimi; private String henkilotunnus; private String koulutus; public abstract Sopimus laadiTyosopimus(); ... } public class Opettaja{ public Sopimus laadiTyosopimus(){ //metodin toteuttavat ohjelmalauseet © Jukka Harju, 2005

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. © Jukka Harju, 2005

20 Toteutussuhde & Java Javassa on syntaksi sekä rajapintaluokan määrittelylle, että rajapintaluokan toteuttamiselle. public interface Kulkuneuvo{ //metodien määrittelyt ... } public class Auto implements Kulkuneuvo{ //metodien toteutukset © Jukka Harju, 2005

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 © Jukka Harju, 2005

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 © Jukka Harju, 2005


Lataa ppt "UML-luokkakaaviot ja Java"

Samankaltaiset esitykset


Iklan oleh Google