Ohjelmistojen mallintaminen Luokkakaaviot Harri Laine 1

Samankaltaiset tiedostot
Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

Luokkakaavion laatiminen

Johdatus sovellussuunnitteluun, s 2001, osa 4b Helsingin yliopisto / TKTL Harri Laine / Inkeri Verkamo 1. Luokkakaavion tarkoitus

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

Johdatus sovellussuunnitteluun, s2000, osa5 Helsingin yliopisto;/tktl. Harri Laine 1. Luokkakaavion tarkoitus. Luokkakaavion tarkoitus

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

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

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

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

Mitä on periytyminen?

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

Ohjelmistojen mallintaminen kertausta Harri Laine 1

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

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

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

UML - unified modeling language

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

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

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

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

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

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

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

Olioperustaisuus (object oriented)

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

Olio-ohjelmointi Javalla

9. Periytyminen Javassa 9.1

Ohjelmistotekniikan menetelmät

Ohjelmistotekniikan menetelmät

Tietokantasuunnittelun pääperiaatteena on tiedon toiston välttäminen. Tiedon toistumiseen liittyy monenlaisia ongelmia.

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

Ohjelmoinnin jatkokurssi, kurssikoe

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

Kertaus: yleistys-erikoistus ja perintä

9. Periytyminen Javassa 9.1

Ohjelmistotekniikan menetelmät, käyttötapauksiin perustuva vaatimusmäärittely

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

1. Olio-ohjelmointi 1.1

UML Luokkakaavio 14:41

15. Ohjelmoinnin tekniikkaa 15.1

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

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

16. Javan omat luokat 16.1

Hakemistojen sisällöt säilötään linkitetyille listalle.

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

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

Ohjelmistojen mallintaminen. Luento 7,

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

4. Olio-ohjelmoinista lyhyesti 4.1

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

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

Aalto Yliopisto T Informaatioverkostot: Studio 1. Oliot ja luokat Javaohjelmoinnissa

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

TIE Ohjelmistojen suunnittelu. Luento 8..9: moniperintä

Johdatus sovellussuunnitteluun osa 2

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

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IV Periytyminen ja monimuotoisuus

Common Lisp Object System

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

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

Javan perusteita. Janne Käki

15. Ohjelmoinnin tekniikkaa 15.1

3. Käsiteanalyysi ja käsitekaavio

Java kahdessa tunnissa. Jyry Suvilehto

Periytyminen (inheritance)

2. Olio-ohjelmoinista lyhyesti 2.1

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

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN

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

Ohjelmistojen mallintaminen Olioiden yhteistyö Harri Laine 1

Ohjelmistotekniikan menetelmät Luokkamallit ohjelmiston mallintamisessa Harri Laine 1

Ohjelmistojen mallintaminen luokkamallin laatiminen

Linkitetystä listasta perittyä omaa listaa käytetään muun muassa viestiin liittyvien vastausten säilömiseen.

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

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

Ohjelmistojen mallintaminen, kesä 2010

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

1. Omat operaatiot 1.1

Olio-ohjelmointi Johdanto olio-ohjelmointiin

UML ja luokkien väliset suhteet

Tietokannan suunnittelu

Ohjelmistojen mallintaminen luokkamallin laatiminen

Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. II Johdanto olio-ohjelmointiin

7. Näytölle tulostaminen 7.1

Ohjelmistojen mallintaminen viikon 4 laskareiden mallivastauksia

7/20: Paketti kasassa ensimmäistä kertaa

19. Unified Modeling Language (UML)

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

Olio-ohjelmointi Syntaksikokoelma

815338A Ohjelmointikielten periaatteet

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

Sisältö. 2. Taulukot. Yleistä. Yleistä

POLKU LUOKKAKAAVIOISTA TAULUJEN TOTEUTUKSEEN

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Rajapinta (interface)

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

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

Sisältö. 22. Taulukot. Yleistä. Yleistä

Transkriptio:

Ohjelmistojen mallintaminen Luokkakaaviot 5.12.2008 Harri Laine 1

Olioiden palvelut Palvelun kuvauksessa annettavat tiedot näkyvyys (kuten attribuuttien kohdalla) nimi (ainoa välttämätön osa) parametrit paluuarvon tyyppi muut määreet Syntaksi (hakasulut eivät kuulu määrittelyyn vaan merkitsevät valinnaisen osan) [näkyvyys] nimi [(parametrit)] [: paluuarvon tyyppi] [{muut määreet}] 5.12.2008 Harri Laine 2

Olioiden palvelut Parametrimäärittelyn muoto on nimi: tyyppi [= oletusarvo] Palvelun sisällön määrittelylle on omat erilliset tekniikkansa, luokkakaaviossa palvelun sisältö voidaan kuvata vain vapaamuotoisena tekstinä 5.12.2008 Harri Laine 3

Olioiden palvelut SSN #chekingchars[31] #date #century #number #checkchar +SSN(init: String) +tostring(): String +isok(): boolean +getbirthdate(): Date +getsex(): int Sosiaaliturvatunnusta kuvaavalla SSN-luokalla on viisi julkista operaatiota, joista yksi on konstruktori Konstruktori saa alustuskoodin parametrinaan Operaatio getbirthdate() palauttaa Date-olion 5.12.2008 Harri Laine 4

Luokkien väliset suhteet Edellä on tarkasteltu sellaisia luokkakaavioissa esiintyviä suhteita, jotka ilmenevät olioiden välisinä yhteyksinä Lisäksi UML:ssä voidaan esittää luokkien välisiä riippuvuuksia (dependency) luokkahierarkia (class hierarchy, inheritance hierarchy) 5.12.2008 Harri Laine 5

Riippuvuus Ilmaisee luokan muuttamisen mahdollista vaikutusta toiseen luokkaan Kuvataan katkoviivalla nuolenkärki osoittaa siihen luokkaan, josta viivan toisessa päässä oleva on riippuva riippuvuuden luonne ilmaistaan yleensä stereotyyppinä [= nimi erityismerkitykselle, tällainen voidaan liittää mihin tahansa mallinnuskohteeseen, merkitykset kiinnitettävä] 5.12.2008 Harri Laine 6

Riippuvuus Luontiriippuvuus: luokan ilmentymä luo toisen luokan ilmentymiä (instantiate) Tehdas <<instantiate>> Tuote Ilmentymäriippuvuus (instance of) Auto <<instance of>> ABC-123:Auto 5.12.2008 Harri Laine 7

Parametroidut luokat Tarkastellaan kompositiota Kurssi * Harjoitusryhmä Ohjelmassa yllä oleva toteutettaisiin todennäköisesti jonkin kokoelmarakenteen avulla, Javassa esimerkiksi Vector-rakenteena. Vector on yleiskäyttöinen kokoelmarakenne, joka voidaan parametroida määrittelemällä kokoelmaan kuuluvien oliden tyyppi 5.12.2008 Harri Laine 8

(huom. Tämä malli on alemmalla abstraktiotasolla kuin edellisen kalvon malli) Vektor kokoelman alkiot sidotaan Harjoitusryhmä luokan olioiksi Vector Element <<bind>> kurssi Kurssi Harjoitusryhmä * 1 ryhmät element {ordered} Vector<Harjoitusryhmä> 1 5.12.2008 Harri Laine 9

ilmentymät Oma:Kurssi ryhmät Oma-ryhmät kurssi element0 element1 Oma/H1:H.ryhmä Oma/H2:H.ryhmä 5.12.2008 Harri Laine 10

Edellä esitettiin eräs tekninen tapa toteuttaa kurssin ja harjoitusryhmän välinen abstrakti kytkentä parametroidun kokoelmaluokan avulla Jokin yksinkertainen ohjelmointikieli ei välttämättä tarjoa tällaista rakennetta ja joudutaan ehkä toteuttamaan lista alkeellisempia rakenteita käyttäen 5.12.2008 Harri Laine 11

kurssi * Kurssi 0..1 0..1 first Harjoitusryhmä 0..1 next 1 Tässä on toteutuksena käytetty listarakennetta. Sitä voi kuitenkin olla kuvasta vaikea hahmottaa, alhaisesta abstraktiotasosta johtuen first next OMa Oma/H1 Oma/H2 5.12.2008 Harri Laine 12

Yksi mahdollisuus tuoda esiin korkeamman tason lista-abstarktio on käyttää yhteistyöhahmoa (collaboration template). Tähän palataan myöhemmin kurssilla. List korkeamman tason abstraktio kurssi header * item olioiden roolit abstraktiossa Kurssi 0..1 0..1 first Harjoitusryhmä 0..1 next 1 5.12.2008 Harri Laine 13

Luokkia määrittelemällä luodaan luokitusjärjestelmä. Eri menetelmät asettavat erilaisia vaatimuksia luokitusjärjestelmälle: joissakin edellytetään, että luokat ovat erillisiä (ei yhteisiä ilmentymiä) toisissa sallitaan päällekkäisyys (yhteiset ilmentymät) 5.12.2008 Harri Laine 14

Luokkahierarkiassa luokka voidaan määritellä toisen luokan alaluokaksi esim. luokka nainen on luokan henkilö alaluokka luokka johtaja on luokan henkilö alaluokka luokat auto, laiva ja lentokone ovat luokan kulkuväline alaluokkia 5.12.2008 Harri Laine 15

Jos luokka A on luokan B alaluokka, siitä seuraa, että jokainen A:n ilmentymä on myös B:n ilmentymä. jokainen johtaja on myös henkilö Tästä taas seuraa, että kaikki attribuutit, palvelut ja yhteydet, jotka on määritelty luokan B ilmentymille, liittyvät myös A:n ilmentymiin. 5.12.2008 Harri Laine 16

Jos henkilölle on määritelty attribuutti Nimi, niin myös johtajalla on automaattisesti Nimiattribuutti. Jos henkilö on määritelty osapuoleksi työsuhdeyhteyteen, myös johtaja voi olla osapuolena työsuhde-yhteydessä. Tätä ilmiötä kutsutaan periytymiseksi (inheritance). 5.12.2008 Harri Laine 17

Periytymisessä yläluokkaan liitetyt attribuutit, palvelut ja yhteydet periytyvät alaluokalle. Huom. periytyminen on luokkien välistä määrittelyjen periytymistä - ilmentymät eivät tässä peri mitään toisilta ilmentymiltä. 5.12.2008 Harri Laine 18

Yläluokan ja alaluokan välinen riippuvuussuhde kuvataan kaaviossa: Alaluokka Yläluokka luokka Johtaja Henkilö 5.12.2008 Harri Laine 19

Alaluokkaan voidaan liittää yläluokalta perittyjen attribuuttien, palvelujen ja yhteyksien lisäksi omia attribuutteja, yhteyksiä ja palveluja. Johtajalla on ominaisuudet vastuualue ja alaisten määrä, joita ei ole henkilöllä yleisesti. Vain johtajalla voi olla oikeus käyttää edustustiliä. Johtajalla voi olla alaisia. 5.12.2008 Harri Laine 20

pomo Johtaja 0..1 vastuualue alaisten määrä alainen 0..* Henkilö 1..* Käyttöoikeus 0..1 Edustustili 5.12.2008 Harri Laine 21

Alaluokkaan voidaan liittää uusia palveluita, joita yläluokalla ei ole. Alaluokassa voidaan myös syrjäyttää (override) yläluokassa määritelty palvelu. Syrjäyttäminen on sisällön uudelleenmäärittelyä. Henkilöllä voisi olla palvelu viikkoraportti: kerro ajankäyttö työtehtäviin Johtajan viikkoraportti-palvelun sisältö voisi olla: kerro ajankäyttö työtehtäviin laadi yhteenveto alaisten viikkoraporteista raportoi edustustilin käyttö 5.12.2008 Harri Laine 22

Syrjäyttäminen on erityisesti olio-ohjelmoinnissa hyödyllinen tekniikka. Olio-ohjelmoinnin merkittävimmät hyödyt tulevat esiin juuri syrjäyttämismahdollisuuden kautta: muokattavat kirjastopalvelut yksinkertaisemmat ohjelmat 5.12.2008 Harri Laine 23

Järjestelmää mallinnettaessa luokkahierarkiasta on eniten hyötyä: sääntöjen ilmaisemisessa kuvauksen ekonomisuudessa (ei tarvitse toistaa samoja asioita useassa luokassa) 5.12.2008 Harri Laine 24

Esimerkki säännöistä: Autolla täytyy olla omistaja. Omistaja voi olla yritys tai henkilö. mahdollinen omistaja 1..* 0..* auto yritys henkilö 5.12.2008 Harri Laine 25

Ellei yläluokkaa käytettäisi: yritys 0..* 0..* yritysomistus auto 0..* Voiko autolla olla - sekä yritys- että henkilöomistaja? - nolla omistajaa? henkilöomistus 0..* henkilö 5.12.2008 Harri Laine 26

Aliluokkia voidaan muodostaa monin erilaisin perustein. henkilö erillisin perustein muodostettuja aliluokkia sukupuoli asema nainen johtaja 5.12.2008 Harri Laine 27

Samaan luokitteluperusteeseen perustuvat poissulkevat aliluokat. henkilö sukupuoli nainen mies 5.12.2008 Harri Laine 28

Kun reaalimaailmassa luokitellaan ilmiöitä, voidaan käyttää samanaikaisesti useita erilaisia luokitteluperusteita: sukupuoli, kengännumero, virka-asema, auton omistus, jne. Monissa oliomenetelmissä ja olio-ohjelmointikielissä ollaan paljon rajoittuneempia. Tyypillisesti esim. ohjelmointikielissä olio ei voi olla usean luokan välitön ilmentymä, mikä johtaa kömpelöihin mallinnusratkaisuihin 5.12.2008 Harri Laine 29

henkilö nainen johtaja Reaalimaailmassa olio voi olla usean luokan välitön ilmentymä. Liisa 5.12.2008 Harri Laine 30

henkilö nainen johtaja Olio-ohjelmointikielissä olio ei yleensä voi olla usean luokan välitön ilmentymä. Liisa 5.12.2008 Harri Laine 31

henkilö johtaja nainen naisjohtaja Oliokielissä olio on yleensä vain yhden luokan välitön ilmentymä. <<instance of>> Liisa 5.12.2008 Harri Laine 32

henkilö johtaja 0..1 naispiirteet Liisa Liisa_naisena alityyppikohtaiset ominaisuudet omana luokkanaan 5.12.2008 Harri Laine 33

Edellinen tilanne johtuu siitä, että olioohjelmoinnissa olio on yleensä esiteltävä johonkin (yhteen) luokkaan kuuluvaksi ja tämä luokka perii vain yläluokkiensa ominaisuudet. Kohdealueen analyysin kannalta rakenne on kömpelö. 5.12.2008 Harri Laine 34

Tilannetta, jossa luokka on useamman kuin yhden luokan välitön alaluokka, kutsutaan moniperiytymiseksi (multiple inheritance). Kaikki olio-ohjelmointikielet eivät tarjoa moniperintää (esim. Javassa ei ole, C++:ssa on). kenraali johtaja sotilas 5.12.2008 Harri Laine 35

Erityisesti toteutuksen moniperiytyminen voi aiheuttaa monikäsitteisyysongelmia esim. kaksi signatuuriltaan samaa operaatiota kaikki olio-ohjelmointikielet eivät tarjoa (toteutuksen eli lauseiden ja lausekkeiden) moniperiytymistä esim. Javassa ei ole, C++:ssa on 5.12.2008 Harri Laine 36