UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN



Samankaltaiset tiedostot
UML ja luokkien väliset suhteet

UML Luokkakaavio 14:41

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

Mikä yhteyssuhde on?

YHTEYSSUHDE (assosiation)

TIE Samuel Lahtinen. Lyhyt UML-opas. UML -pikaesittely

POLKU LUOKKAKAAVIOISTA TAULUJEN TOTEUTUKSEEN

Jouni Huotari & Ari Hovi. Käsitemallinnuksesta relaatiokantaan KÄSITEMALLI. LOOGINEN MALLI: tietomalli valittu. FYYSINEN MALLI: DBMS valittu

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

UML -mallinnus Viestiyhteyskaavio EERO NOUSIAINEN

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

Olio-ohjelmoinnissa luokat voidaan järjestää siten, että ne pystyvät jakamaan yhteisiä tietoja ja aliohjelmia.

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

T Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

Sisällys. 19. Unified Modeling Language (UML) Johdanto. Johdanto. Johdanto. Luokkakaavio:

9. Periytyminen Javassa 9.1

19. Unified Modeling Language (UML)

Luokkamalli LUOKKAKAAVIO. Tämän osan sisältö. Luokkamalli. Luokka ja olio. Luokkakaavio (class diagram)

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Vahva koostumussuhde (Composition)

Johdanto. Olio (Object) Luokka (Class) Olion kuvaaminen

UML -mallinnus TILAKAAVIO

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

UML - unified modeling language

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

Periytyminen (inheritance)

Yhteydelle voi antaa nimen kumpaankin suuntaan Sille ei tarvise antaa lainkaan nimeä Yhteysnimen asemasta tai lisäksi voidaan käyttää roolinimiä

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

9. Periytyminen Javassa 9.1

Luokkakaavion laatiminen

Luokka- ja oliokaaviot

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Johdatus sovellussuunnitteluun, s99, osa3 Helsingin yliopisto;/tktl Harri Laine 1. Olioiden väliset yhteydet. Olioiden väliset yhteydet

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Kooste. Esim. Ympyrän keskipiste voidaan ajatella ympyrän osaksi.

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Ohjelmistojen mallintaminen Luokkakaaviot Harri Laine 1

Paikkatiedon mallinnus Dokumentoinnin ymmärtäminen. Lassi Lehto

Java kahdessa tunnissa. Jyry Suvilehto

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Olioiden yhteistoiminta

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VII Suunnittelumallit Adapter ja Composite

4. Luokan testaus ja käyttö olion kautta 4.1

Metodien tekeminen Javalla

Johdatus sovellussuunnitteluun, s99, osa3 Helsingin yliopisto;/tktl Harri Laine 1. Olioiden väliset yhteydet. Olioiden väliset yhteydet

Ohjelmoinnin peruskurssien laaja oppimäärä

Luokka (class) esitetään suorakulmion avulla, jonka sisälle kirjoitetaan luokan nimi (vahvennettuna).

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Sisällys. Mitä on periytyminen? Yksittäis- ja moniperiytyminen. Oliot ja perityt luokat. Periytymisen käyttö. 8.2

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.

Ohjelmistojen mallintaminen. Luento 3, 9.11.

Ohjelmoinnin peruskurssien laaja oppimäärä

Mitä on periytyminen?

Joskus yleistäminen voi tapahtua monen ominaisuuden pohjalta. Myös tällöin voi tulla moniperintätilanteita.

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Ohjelmistotekniikan menetelmät

Ohjelmistojen mallintaminen. Luento 4,

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VIII Suunnittelumallit Observer ja State

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Johdatus sovellussuunnitteluun, s2000, osa4 Helsingin yliopisto;/tktl. Harri Laine 1. Luokka- ja oliokaaviot. Luokka- ja oliokaaviot

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

1. Omat operaatiot 1.1

Johdatus sovellussuunnitteluun, s99, osa2 Helsingin yliopisto;/tktl Harri Laine 1. Olioperustainen ohjelmistokehitys

Ohjelmistojen mallintaminen Olioiden yhteistyö Harri Laine 1

CS-A1150 Tietokannat CS-A1150 Tietokannat / 35

Javan perusteita. Janne Käki

Ohjelmistotekniikan menetelmät, koe

Ohjelmistotekniikan menetelmät

Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance)

Olio-ohjelmointi Syntaksikokoelma

Sokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.

Taulukot. Jukka Harju, Jukka Juslin

Olioperustaisuus (object oriented)

Johdatus sovellussuunnitteluun, s99, osa2 Helsingin yliopisto;/tktl Harri Laine 1. Olioperustaisuus (object oriented)

1. Olio-ohjelmointi 1.1

Sähköposti ja uutisryhmät

Eija Järvelä Elina Puusaari. käsikirja

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

Muutamia peruskäsitteitä

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

Osion kaksi kertaus. Jukka Juslin. Jukka Juslin

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet

Johdatus sovellussuunnitteluun, s2001, osa 4a Helsingin yliopisto / TKTL Harri Laine / Inkeri Verkamo 1. Luokka- ja oliokaaviot

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

Kertaus: yleistys-erikoistus ja perintä

Interaktiivinen tarinankerronta

Luokat ja oliot. Ville Sundberg

4. Olio-ohjelmoinista lyhyesti 4.1

Olio-ohjelmointi Javalla

Poikkeustenkäsittely

2. Olio-ohjelmoinnin perusteita 2.1

Transkriptio:

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN

SISÄLLYS 3. Luokkakaavio UML -mallinnuskielessä 3.1 Luokkakaavion luokan rakenteet 3.2 Luokan kuvauksesta C++ ohjelmakoodiksi 3.3 Luokkakaavion luokkien yhteystyypit 3.4 Yhteyssuhteen toteuttaminen C++ ohjelmointikielellä 3.5 Koosteinen yhteys luokkien välillä 3.6 Löyhä kooste 3.7 Vahva kooste 3.8 Löyhä ja vahva kooste yhteydessä samaan luokkaan 3.9 Koosteen toteuttaminen C++ ohjelmointikielellä 3.10 Yleistäminen (generalization) eli periminen 3.11 Perinnän toteuttaminen C++ ohjelmointikiellä

3.1 Luokkakaavion luokan rakenteet Luokkakaavio koostuu luokista, niiden tiedoista, toiminnoista ja luokkien välisistä yhteyksistä LUOKKAZ LUOKKAB LUOKKAX LUOKKAY LUOKKAQ Luokkakaavion luokan tiedot (attribuutit) ja toiminnot (funktiot/metodit) esitellään seuraavasti Anturi Tilatieto Suorita itsetesti Lähetä signaali LUOKAN NIMI (AINA YKSIKKÖ MUODOSSA) LUOKAN TIEDOT LUOKAN TOIMINNOT

3.2 Luokan kuvauksesta C++ ohjelmakoodiksi Luokan kuvauksesta ohjelmakoodiksi - julkinen (public +) - yksityinen (private -) - suojattu (protected #) SUUNNITTELUVAIHEEN LUOKAN KUVAUS CAnturi #tilatieto:int -toinen_muuttuja:char #suorita_itsetesti():int #laheta_signaali():float -kolmas_funktio(int x):void +neljas_funktio():char LUOKAN TOIMINNOT LUOKAN NIMI LUOKAN TIEDOT class CAnturi // ensin tiedot private: char toinen_muuttuja; protected: int tilatieto; // sitten toiminnot private: void kolmas_funktio(int x); protected: int suorita_itsetesti(); float laheta_signaali(); public: char neljas_funktio(); }

3.3 Luokkakaavion luokkien yhteystyypit Luokkakaavion luokkien välisiä yhteystyyppejä ovat - yhteyssuhde (assosiation) - koostesuhde (aggregation ja composition) ja - yleistyssuhde eli periminen (generalization) Yhteydet rakennetaan aina kerrallaan kahden luokan välille, vaikka luokka on yhteydessä useampaan luokkaan

3.3 LUOKKAKAAVION LUOKKIEN YHTEYSTYYPIT Yhteyssuhde eli assosiaatio on yhteys luokkien välillä Luokkien välillä voi olla seuraavia yhteyssuhteita - Yhden suhde yhteen 1:1 - Yhden suhde moneen 1:M tai - Monen suhde moneen M:N Yhteyssuhteessa luokkien välillä kerrotaan yhteyden nimi ja kerrannaisuus LUOKKAZ LUOKKAY * Yhteyden nimi 1 Kerrannaisuus voidaan ilmaista seuraavasti - 1 tarkoittaa yhtä yhteyttä luokkien välillä - * tarkoittaa määrittelemättömän monta - 0..1 tarkoittaa kertautumista "yksi tai ei yhtään - 0..* tarkoittaa kertautumista ei yhtään tai määrittelemättömän monta - Lukuarvot voidaan ilmaista myös tarkemmin esim. 5..100

3.3 Luokkakaavion luokkien yhteystyypit Yhden suhde yhteen (1:1) Yhteen tilaukseen kuuluu yksi lähetys ja yksi lähetys sisältää yhden tilauksen Yhteyden nimi Kerrannaisuudet TILAUS 1 kuuluu 1 LÄHETYS

3.3 Luokkakaavion luokkien yhteystyypit Yhden suhde moneen (1:n) Yrityksessä työskentelee monta työntekijää ja tietty henkilö voi työskennellä vain yhdessä yrityksessä YRITYS 1 työskentelee * TYÖNTEKIJÄ Kontrolleri ottaa viestejä vastaan 2-5:ltä anturilta ja anturit lähettävät viestejä vain yhdelle kontrollerille KONTROLLERI 1 kuuntelee 2..5 lähettää viestejä ANTURI YHTEYDEN SUUNTA VOIDAAN MYÖS OSOITTAA

3.3 Luokkakaavion luokkien yhteystyypit Monen suhde moneen (n:m) Kaksisuuntainen n:m -yhteys voidaan muuntaa kahdeksi 1:m yhteydeksi Projektissa työskentelee monta työntekijää ja työntekijä työskentelee monessa projektissa PROJEKTI * työskentelee * TYÖNTEKIJÄ PROJEKTI 1 * TYÖSKENTELEE * 1 Tuntimäärä TYÖNTEKIJÄ

3.4 Yhteyssuhteen toteuttaminen C++ ohjelmointikielellä Yhden suhde yhteen CKontrolleri - *ipainike:cpainike +CKontrolleri(CPainike *ppainike) +kuuntele_viesteja():void 1 Kuuntelee Lähettää merkin 1 CPainike -merkki:char +lue_merkki():char Yhteyssuhteen toteuttaminen luokassa osoittimen avulla class CKontrolleri private: CPainike *ipainike; public: CKontrolleri(CPainike *ppainike); void kuuntele_viesteja(); }; Yhteyssuhde 1:1 muodostetaan ohjelman käynnistyessä void main() CPainike *ipainike; CKontrolleri *ikontrolleri; ipainike = new CPainike; // Yhteyssuhteen 1:1 muodostaminen ikontrolleri=new CKontrolleri(iPainike);... Olion luonti aiheuttaa muodostinfunktion suorittamisen CKontrolleri::CKontrolleri (CPainike *ppainike) ipainike=ppainike; kuuntele_viesteja(); }

3.5 Koosteinen yhteys luokkien välillä Koostumussuhde on assosisaation erikoismuoto Koosterakenteessa on kysymys omistamisesta Koosteluokka omistaa osaluokkansa ja on vastuussa näiden käsittelystä Koostumuksen tunnistaa, kun assosisaatioon liittyy sanoja, kuten koostuu, sisältää, on osa jne ; eli sanoja, jotka viittaavat luokkien väliseen koosteiseen suhteeseen Koosteisia suhteita ovat aggregation (löyhä kooste) ja composition (vahva kooste)

3.5 Koosteinen yhteys luokkien välillä Miksi kaksi erilaista koostetta? Mitä eroa? Löyhässä koostessa osaluokkien olemassaolo ei ole riippuvainen koosteluokasta Vahvassa koostessa osaluokka ei voi olla olemassa ilman isäntäänsä (koosteluokka) ja se voi olla vain yhden isännän osa. Vahvan koosterakenteen yksi olennainen piirre on se, että osaluokat häviävät, kun koosteluokka häviää. Tämän piirteen avulla voi testata, onko kyse vahvasta vai heikosta koosterakenteesta Koosteen tyyppi vaikuttaa toteutukseen, koska ohjelmakoodissa kerrotaan kuka, koska ja missä luokasta luodaan olio ja kuka, koska ja missä olio voidaan tuhota

3.6 Löyhä kooste Löyhä kooste esitetään koosteluokan päässä olevalla ontolla vinoneliöllä Koosteluokka Osaluokka LAIVASTO Sisältää * SOTALAIVA Yhteyteen kuuluvat osat nimi, kerrannaisuudet ja yhteyden suunta, voidaan kuvata koosteessa aivan kuten tavallisessa yhteyssuhteessakin JOUKKUE 1 Koostuu * HENKILÖ Kuuluu

3.7 Vahva kooste Vahva kooste esitetään koosteluokan päässä olevalla täytetyllä vinoneliöllä Esimerkki - Ikkuna koostuu yhdestä otsikko-osasta, yhdesta valikosta ja 1..* tekstikentästä - Kun ohjelmassa ikkuna olio tuhotaan näytöltä, niin myös ikkunaan kuuluvat osat tuhotaan 1 OTSIKKO-OSA IKKUNA 1 VALIKKO 1..* TEKSTI-KENTTÄ

3.8 Löyhä ja vahva kooste yhteydessä samaan luokkaan Esimerkki - Vähintään 1 vastaanottaja täytyy olla viestissä - Viestiin kuuluu yksi otsikkokenttä ja yksi viestiosa - Liitetiedosto voi kuulua viestiin,mutta olemassaolo ei ole riippuvainen sähköpostiviestin olemassaolosta Sähköpostiviesti 1 0..* 1 1 0..* Liitetiedosto 1 Viestiosa 1..* Vastaanottajaosa 1 Otsikkokenttäosa

3.9 Koosteen toteuttaminen C++ ohjelmointikielellä Vahva kooste Luokkien väliset suhteet: vahva koostesuhde 1:1 - Koosteluokka omistaa osaluokkansa ja on vastuussa sen käsittelystä - Koosteolion tulee huolehtia osaolion luonnista ja hävittämisestä - *ipainike:cpainike CKontrolleri +Ckontrolleri +~Ckontrolleri +kuuntele_viesteja():void KOOSTESUHDE MUODOSTETAAN OSOITINOLION AVULLA KOOSTELUOKKA 1 CPainike OSALUOKKA -merkki:char +lue_merkki():char

3.9 Koosteen toteuttaminen C++ ohjelmointikielellä // CKontrolleri.h class CKontrolleri private: CPainike *ipainike; public: CKontrolleri (); ~CKontrolleri(); void kuuntele_viesteja(); }; // CPainike.h class CPainike private: char merkki; public: char lue_merkki; }; - *ipainike:cpainike CKontrolleri +Ckontrolleri +~Ckontrolleri +kuuntele_viesteja():void CPainike -merkki:char +lue_merkki:char

3.9 Koosteen toteuttaminen C++ ohjelmointikielellä Koosteolion luonti ohjelman käynnistyessä void main(void) // luodaan koosteolio CKontrolleri *ikontrolleri =new CKontrolleri(); } //tuhotaan koosteolio delete ikontrolleri; koosteolion muodostinfunktiossa luodaan osaolio CKontrolleri::CKontrolleri() // Luodaan osaolio ipainike=new CPainike; kuuntele_viesteja (); } Kun koosteolio tuhotaan, niin suoritetaan tuhoojafunktio, jossa tuhotaan myös osaolio CKontrolleri::~CKontrolleri() delete ipainike; }

3.10 Yleistäminen (generalization) eli periminen Yleistäminen on suhde yleisemmän (yliluokka) ja erikoisemman luokan välillä (aliluokka) Aliluokka on täysin yhteensopiva yläluokan kanssa ja sisältää vain lisätietoa ja perii yläluokan ominaisuuksia (tietoja, toimintoja ja yhteyksiä) Yleistyssuhde kuvataan onton kolmion avulla Kulkuväline Yläluokka Aliluokat Auto ja Vene Auto Vene

3.11 Perinnän toteuttaminen C++ ohjelmointikielellä class Kulkuvaline // tänne metodit ja data }; class Auto : public Kulkuvaline // tänne metodit ja data }; Perintä rakennettaan C++ -ohjelmointikielessä public -määreellä class Vene : public Kulkuvaline // tänne metodit ja data };