Lataa esitys
Esittely latautuu. Ole hyvä ja odota
1
Systeemityö 2 Olioajattelu, luokkakaavio
Teppo Räisänen, Principal Lecturer Oulu University of Applied Sciences, School of Business and Information Management
2
Olioajattelu Luokka ja olio Periytyminen Monimuotoisuus Luokkakaavio
3
Olioajattelu – Luokka ja olio
Oliosuuntautuneen mallinnuksen tärkeimmät elementit Luokat, oliot ja niiden väliset suhteet Luokat ja oliot mallintavat kuvattavan järjestelmän sisältöä Luokkien väliset suhteet näyttävät, kuinka ne rakentuvat toisiinsa nähden Kun järjestelmä rakennetaan oliosuuntautuneella ohjelmointikielellä, luokat ja suhteet muuttuvat suoraan lähdekoodiksi koodigeneraattori
4
Olioajattelu – Luokka ja olio
Olio (object) Asia, josta voidaan keskustella ja jota voidaan käsitellä On olemassa oikeassa maailmassa Voi olla osa mitä tahansa järjestelmää, kuten konetta, organisaatiota tai yritystä Luokka (class) Kuvaus olion tyypistä Kuvailee yhden tyypin olioiden ominaisuudet ja käyttäytymisen Kaikki oliot ovat jonkun luokan ilmentymiä (instances) Olioita luodaan luokista, jolloin ne ovat luokkansa mukaisia ilmentymiä
5
Esimerkki – Luokka ja olio
Opettaja T. Räisänen Luokka: opettaja Olio: T. Räisänen Oppilas S. Virtanen Luokka: oppilas Olio: S. Virtanen Oulun seudun ammattikorkeakoulu Luokka: koulu (ammattikorkeakoulu) Olio: OAMK
6
Luokkakaavio Luokkakaavio on staattinen mallinnustyyppi
Kuvaa järjestelmän staattisen eli pysyvän rakenteen luokkien ja niiden välisten suhteiden avulla Luokkakaavion yksi tehtävä on määrittää perusta muille kaavioille Esimerkiksi olioiden tiloja ja olioiden välistä yhteistyötä kuvaaville dynaamisille kaavioille työskentelee opiskelee Opettaja Koulu Oppilas
7
Luokkakaavio Luokkakaaviota varten luokat on tunnistettava ja kuvattava Luokkakaavio kuvaa sovelluksen Luokat, niiden sisällön ja luokkien väliset suhteet Luokkakaavio on oliomenetelmien keskeisin kuvaustapa, jonka varaan muut oliomallinnuksen kuvaukset pitkälti rakentuvat Oliokaavio Luokkakaavion muunnos, jossa kuvataan olioita
8
Luokkakaavio Rakennus Huone Huonekalu
9
Luokkakaavio Rakennus Huone Huonekalu
10
Olioajattelu – Luokka Luokka on olion malli
Sen ohjeiden mukaan luodaan ohjelmaa ajettaessa olioita Luokka on eräänlainen pohjapiirrustus Luokka määrittelee olion piirteet Luokalla on aina nimi ja yleensä attribuutteja ja metodeja
11
Olioajattelu – Luokka Luokka piirretään suorakulmiona, joka on jaettu kolmeen osastoon Nimiosasto Attribuuttiosasto Operaatio-osasto Nimi keskitettynä ja tummennettuna Luokan nimi johdetaan ongelma-alueelta ja on yksikäsitteinen ilman etu- tai takaliitteitä Nimi Attribuutit Operaatiot
12
Attribuuttiosasto Luokilla on attribuutteja, jotka kuvaavat olioiden ominaisuuksia Oikein valitut attribuutit sisältävät tiedot, jotka kuvaavat yksittäistä luokan ilmentymää ja erottavat sen muista saman luokan ilmentymistä Vain järjestelmän kannalta kiinnostavat attribuutit tulisi ottaa mukaan Attribuutin määrittelyn muodollinen syntaksi: Visibility name : type multiplicity = default { property string } Näkyvyys nimi : tietotyyppi lukumäärä = alkuarvo { ominaisuus } UML 1.5: nimi ja tietotyyppi pakollisia UML 2.0: nimi pakollinen
13
Esimerkki Opettaja nimi palkka ikä sotu
14
Attribuutti Attribuuteilla on tietotyyppi, joka kertoo minkälainen attribuutti on kyseessä Tietotyyppi voi olla mikä tahansa ohjelmointikielissä käytetty tietotyyppi Kokonaisluku (integer) Totuusarvo (boolean) Desimaaliluku (real) Piste (point) Lista (IList) Muu luokka!
15
Harjoitus: opiskelija-luokka
Mitä attribuutteja opiskelija-luokalla pitäisi olla?
16
Attribuutti Attribuuteilla voi olla erilaisia näkyvyyksiä (visibility)
Julkinen (public) merkitään plus-merkillä (eli +) Yksityinen (private) miinusmerki (-) Suojattu (protected) risuaita (#) Jos näkyvyyden määrittelemää merkkiä ei ole, näkyvyys on määrittämätön Työkaluilla on usein oletusarvo (esim. private) /-merkki attribuutin edessä tarkoittaa, että attribuutti voidaan laskea muista attribuuteista Esim. ikä voidaan laskea syntymäajasta
17
Attribuutti Attribuutilla voi olla oletusarvo, joka sijoitetaan muuttujaan samalla hetkellä, kun luokasta luodaan olio +nimi : String = ”Teppo” -ikä : int = 0 Attribuutti voi olla luokkatason attribuutti (class variable), jolloin attribuutti jaetaan kaikkien luokan olioiden kesken Luokkatason attribuutti alleviivataan Attribuutti voi myös olla arvoaluemääritys (tagged value) Esim. lasku-luokan attribuutti tila: +tila : maksamatta { maksamatta, maksettu } +siviilisaaty : naimaton { naimaton, naimisissa, eronnut, leski }
18
Esimerkki Opettaja Opettaja nimi palkka ikä sotu +nimi : String
-palkka : double =1000 -ikä : int -sotu : String
19
Esimerkki public class Opettaja { public String nimi;
private int palkka = 3000; private int ikä; private String sotu, }
20
Harjoitus: opiskelija-luokka
Miettikää opiskelija-luokan attribuuteille näkyvyys, alkuarvo ja tietotyypit
21
Operaatio-osasto Operaatioilla
Käsitellään attribuutteja Tehdään muita toimenpiteitä Operaatioita kutsutaan myös funktioiksi tai metodeiksi public int function laskePalkka(int perusPalkka, int työvuodet) { public int palkka = 0; palkka = perusPalkka + (työvuodet * 50); return (palkka); }
22
Operaatio-osasto Operaatiota kutsuttaessa sitä sovelletaan yhteen olioon, eli sitä kutsutaan tälle oliolle Luokan operaatiot kuvaavat mitä luokka voi tehdä
23
Operaatio-osasto Kun Opettaja-luokasta luodaan olio ”Teppo Räisänen”, ja tälle oliolle kutsutaan operaatiota haeSotu, saadaan tuloksena ”Teppo Räisänen”-olion sotu Opettaja nimi palkka Ikä sotu muutaPalkka haeSotu
24
Operaatio-osasto Luokalla voi olla myös luokkatason operaatioita
Operaatioita voidaan kutsua ilman luokan oliota mutta se voi tällöin käsitellä vain luokkatason muuttujia Luokkatason operaatioilla suoritetaan yleisiä toimenpiteitä, kuten olioiden luomista ja etsimistä
25
Operaatio-osasto Operaation muodollinen syntaksi:
näkyvyys nimi ( parametrilista ) : palautusarvotyyppi { ominaisuus } Visibility name ( parameter-list ) : return-type { property-string } Parametrilista on pilkuilla erotettu lista muodollisia parametreja määriteltynä syntaksilla: Nimi : tietotyyppi = oletusarvo Näkyvyys: + julkinen, - yksityinen Operaatiolla on oltava ainutlaatuinen muoto, eli nimen, palautusarvon ja parametrien yhdistelmä
26
Operaatio-osasto Opettaja nimi palkka Ikä sotu
+muutaPalkka(uusiPalkka: int) +haeSotu()
27
Harjoitus: opiskelija-luokka
Miettikää opiskelija-luokan operaatiot
28
UML -Luokka Henkilo Luokan nimi Luokan attribuutit
Luokan operaatiot Public nimi : String asetaNimi(String) haeNimi()
29
Esimerkkejä
30
Luokkien löytäminen Luokkien löytämiseksi tarvitaan ongelma- alueen asiantuntijoita Luokat nimetään oikeassa elämässä vastaavien asioiden mukaan Luokkia voidaan etsiä esimerkiksi kysymysten avulla Onko olemassa tietoa, jota pitäisi tallentaa tai analysoida? Onko olemassa ulkoisia järjestelmiä? Mitä rooleja toimijoilla on? Onko olemassa organisaation osia, jotka liittyvät järjestelmään?
31
Olioajattelu – Olio Olio tallentaa kuvaamansa ja käsittelemänsä tiedot sisäisiin tietokenttiin, joita kutsutaan attribuuteiksi Attribuuttien arvojen yhdistelmiä kutsutaan olion tiloiksi Olio sisältää lisäksi joukon operaatioita, joilla voidaan käsitellä olion attribuutteja Operaatioita kutsutaan metodeiksi Olion attribuutteja ja metodeita kutsutaan olion piirteiksi Luokka määrittelee olion piirteet
32
Esimerkki Mustang vuosimalli väri moottori nopeus kiihdytä() jarruta()
33
Esimerkki Mustang Luokka vuosimalli väri moottori nopeus kiihdytä()
jarruta() Olio
34
Esimerkki Mustang Jokaisella oliolla on -vuosimalli -väri -moottori
-nopeus attribuutit. vuosimalli väri moottori nopeus kiihdytä() jarruta()
35
Esimerkki Mustang vuosimalli väri moottori nopeus kiihdytä() jarruta()
Olio voi lisäksi -kiihdyttää -jarruttaa
36
Periytyminen / yleistys
Periytymisellä tarkoitetaan tilannetta, jossa aliluokka perii kaikki yläluokan ominaisuudet Tärkeää koodin uudelleenkäytössä Yläluokka (superclass), alaluokka (subclass) Yläluokkaan tehdyt muutokset periytyvät alaluokkiin
37
Periytyminen / yleistys
Mustang vuosimalli väri moottori nopeus kiihdytä() jarruta()
38
Periytyminen / yleistys
Mustang vuosimalli väri moottori nopeus kiihdytä() jarruta() Coupe Fastback Convertible coupePerä fastbackPerä avoKatto laskeKatto() nostaKatto()
39
Periytyminen / yleistys
Materiaali Tunnus Nimi Tila Kirja Äänite Lehti Tekijä Kustantaja Julkaisuvuosi ISBN Artisti Äänitetyyppi Julkaisuvuosi Vuosikerta Numero Sivumäärä
40
Periytyminen / yleistys
Luokka voi olla sekä yläluokka että alaluokka Jos ohjelma pyytää parametriksi kulkuväline- luokan oliota, sille voidaan antaa parametrinä alaluokan olio function laskeMatkaKustannukset(Kulkuvaline) Arvo = laskeMatkaKustannukset (veneOlio); Arvo = laskeMatkaKustannukset (autoOlio); Arvo = laskeMatkaKustannukset (moottoriveneOlio); Arvo = laskeMatkaKustannukset (soutuveneOlio);
41
Harjoitus Piirtäkää luokkakaavio, jossa on luokat
ihminen, mies, nainen ihminen, mies, nainen, lapsi, nisäkäs, selkärankainen
42
Luokkien väliset suhteet
Suhteet kuvaavat luokkien välistä viestintää Neljää eri tyyppiä Assosiaatio (assocition) Kooste (composition / aggregation) Yleistys (generalization) Riippuvuus (dependency) Tarkennus (refinement) Kirjailija Kirja
43
Luokkien väliset suhteet
Assosiaatio Yhteys kahden luokan välillä, jolloin myös luokkien olioiden välillä on yhteys Oliot tietävät toisistaan Oliot ovat yhteyksissä toisiinsa On yleensä kaksisuuntainen
44
Luokkien väliset suhteet
Tavallinen assosiaatio Rekursiivinen assosiaatio Koostumussuhde Valitsinassosiaatio Tai-assosiaatio Järjestetty assosiaatio Kolmioassosiaatio Assosiatiivinen luokka
45
Tavallinen assosiaatio
Yleisin assosiaatio on pelkkä yhteys luokkien välillä Piirretään yhtenäisenä viivana luokkien välille Assosiaatiolle voi antaa nimen Assosiaatio voi olla yksisuuntainen tai kaksisuuntainen Merkitään nuolella Kirjailija Kirja
46
Tavallinen assosiaatio
Kirjailija Kirja Asiakas Tili Käyttää Tilaus Tilausrivi
47
Luokkien väliset suhteet
Assosiaatio Kooste Riippuvuus Kirjailija Kirja Rakennus Huone Hinta Tarjous
48
Luokkien väliset suhteet
Jaettu (aggregation) ja vahva (composition) kooste Rakennus Huone Joukkue Pelaaja
49
Luokkien väliset suhteet
Kerrannaisuus Kuinka monta objektia esiintyy luokkien välisessä suhteessa Merkitään suhteen molempiin päihin Jos ei ole määritelty, oletusarvo on 1 Esimerkkejä * 1..* 1..8 Huone Huonekalu 0..1 0..*
50
Harjoitus 2-3 hengen ryhmissä piirtäkää luokkakaaviot, joissa käytetään seuraavia luokkia henkilöauto, ajoneuvo, rekka-auto, linja-auto, rengas, ovi, moottori, kori opiskelija, opettaja, koulu, yksikkö, opintojakso, pakollinen, valinnainen, suuntautumisvaihtoehto
51
Perinnän / yleistyksen rajoitukset
Päällekkäinen (overlapping) Kaikki aliluokat, jotka perivät tämän perimisen aliluokkia, voivat periä monta luokkaa Erillinen (disjoint) Aliluokkia ei saa periä yhteiseen aliluokkaan Oletus
52
Perinnän / yleistyksen rajoitukset
Täydellinen (complete) Uusia aliluokkia ei saa tehdä Epätäydellinen (incomplete) Uusia aliluokkai voi tehdä
53
Abstrakti luokka Luokka, josta ei voi tehdä olioita
Voidaan vain periä Nimiosastossa nimen alle {abstract} tai kirjoitetaan nimi kursiivilla Luokasta tekee abstraktin myös se, jos sillä on abstrakteja operaatioita Abstraktilla operaatiolla ei ole toteuttavaa metodia, vai muoto tunnetaan
54
Abstrakti luokka public abstract class Kulkuväline { public abstract function aja(); } public abstract class Vene extends Kulkuväline { public class Soutuvene extends Vene { public function aja() { souda();
55
Monimuotoisuus Aliluokat voivat muuttaa perittyä ominaisuutta
Toiminnallisesti erilaiset metodit samalla nimellä Esimerkiksi Ympyrä- ja Neliö-olioiden pinta-ala lasketaan eri kaavoilla
56
Monimuotoisuus Mustang Shelby GT 500 vuosimalli väri moottori nopeus
kiihdytä() jarruta() Shelby GT 500 remmiahdin kiihdytä()
57
Korvataan kiihdytä –metodi uudella samannimisellä metodilla
Monimuotoisuus Mustang vuosimalli väri moottori nopeus kiihdytä() jarruta() Korvataan kiihdytä –metodi uudella samannimisellä metodilla Shelby GT 500 remmiahdin kiihdytä()
58
Esimerkki Koodissa assosiaatio ja attribuutit eivät eroa juurikaan toisistaan henkilö auto 0..1 *
59
Esimerkki Koodissa assosiaatio ja attribuutit eivät eroa juurikaan toisistaan henkilö auto 0..1 * class henkilö { public IList autolista; private String nimi; } class auto { public henkilö omistaja; private Money hinta; }
60
Esimerkki tilausrivi asiakas tilaus
class tilaus { public asiakas tilaaja; public tilausrivi tuotteet; public Date pvm; } class asiakas { public String nimi; Class tilausrivi { public int tuoteId; tilausrivi asiakas tilaus
61
Esimerkki tilausrivi tilaus tilausrivi tilaukset tilaus
62
Johdettu assosiaatio Johdettu assosiaatio voidaan laskea muiden assosiaatioiden ja attribuuttien avulla Budjetti kustannus kiinteät kustannus muuttuvat /kustannus kokonaiskustannus
63
Rekursiivinen assosiaatio
Luokka voidaan kytkeä itseensä assosiaatiolla Yhteyden molemmat osapuolet kuuluvat samaan luokkaan Roolinimi Roolinimen käyttäminen välttämätöntä Kertoo mitä roolia luokka esittää assosiaation puitteissa Roolinimi kuuluu assosiaatioon naimisissa mies Henkilö int ikä int sukupuoli vaimo
64
Riippuvuus, tarkennus Toinen luokka on riippuvainen toisesta Tarkennus
Toinen itsenäinen/riippumaton, toinen riippuvainen Muutos itsenäiseen luokkaan vaikuttaa riippuvaiseen luokkaan Tarkennus Kuvataan samaa asiaa eri abstraktiotasoilla Yleiskatsaus ja yksityiskohtainen kaavio
65
Valitsinassosiaatio Yhden suhde moneen tai monen suhde moneen –assosiaatio Valitsin erottelee moni-päässä olevat oliot toisistaan Toimii valinta-avaimena Piirretään pienenä laatikkona siihen päähän, mistä navigoinnin tulee tapahtua
66
Tai-assosiaatio Kahden tai useamman assosiaation rajoitin
Luokan oliot voivat osallistua korkeintaan yhteen assosiaatioon kerralla
67
Assosiatiivinen luokka
Assosiaatioon voidaan kytkeä luokka Assosiatiivinen luokka antaa lisätietoa yhteydelle Jokainen assosiatiivinen yhteys on yhteydessä assosiatiivisen luokan olioon
68
Järjestetty assosiaatio
Olioiden välisillä assosiaatioilla voi olla tietty järjestys Oletusarvo ”järjestämätön” Merkitään {ordered} assosiaatioviivan viereen järjestettyjen olioiden luokan lähelle {ordered by date}, {ordered by name}
69
Kolmioassosiaatio Assosiaatioon voi liittyä enemmän kuin kaksi luokkaa
Kolmoisassosiaatio liittää kolme luokkaa keskenään Piirretään vinoneliönä
70
Rajapinnat Luokka voi tarjota rajapinnan Luokka voi vaatio rajapintaa
Provides an interface Luokka voi vaatio rajapintaa Requires an interface
71
UML säännöt Rajoitukset (constraints) Johteet (derivations) Säännöt
Rajoittavat mallia Tai-assosiaatio, järjestetyt assosiaatiot, perimisrajoitukset Johteet (derivations) Sääntöjä asioiden johtamiselle Johdettu attribuutti / assosiaatio Säännöt Kaikille mallinnuselementeille Aaltosulkujen sisällä mallinnuselementin lähellä
72
UML-Mallin laatimisen vaiheet
Kartoita luokkaehdokkaita Osallistujat, toiminnan kohteet, tapahtumat, materiaalit, tuotteet, tiedot Pohjana vapaamuotoinen tekstikuvaus Karsi ehdokkaita Liittyykö ehdokkaaseen/ilmiöön tietosisältöä, joka on järjestelmän kannalta välttämätön Onko asia riittävän tärkeä kohdealueen kannalta Iteratiivinen prosessi: kartoita <-> karsi Tunnista olioiden väliset yhteydet Onko yhteys järjestelmän kannalta välttämätön Täsmennä luokkakuvauksia määrittelemällä attribuutit Vapaamuotoisesta kuvauksesta Selvitys mihin/miksi attribuuttia tarvitaan Määrittele yhteyksiin liittyvät osallistumisrajoitteet Määrittele luokkien operaatiot/palvelut Varmista operaatioiden/palveluiden ja tietosisällön yhteensopivuus
73
Harjoitus Etsikää mahdollisia luokkia annetusta materiaalista
Koettakaa käyttää periytymistä Miettikää kerrannaisuuksia Mallintakaa Windows-käyttöjärjestelmän ikkuna Käyttäkää periytymistä ja koostetta
74
Lähteet Fowler, Martin UML distilled : a brief guide to the standard object modeling language. Boston : Addison-Wesley. Eriksson, Hans-Erik UML 2 toolkit. Indianapolis, Ind. : Wiley. hittaminen/johdatus_tietojarjestelmiin/oliomallinnuksen_perusteet/oliomalli nnuksen_perusteet_asia.htm
Samankaltaiset esitykset
© 2024 SlidePlayer.fi Inc.
All rights reserved.