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

Samankaltaiset tiedostot
Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

Olio-ohjelmointi Javalla

Mikä yhteyssuhde on?

Rajapinta (interface)

Metodien tekeminen Javalla

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

Ohjelmistotekniikan menetelmät

Ohjelmistotekniikan menetelmät

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

Luokkakaavion laatiminen

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

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

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

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Ohjelmistotekniikan menetelmät Luokkamallit ohjelmiston mallintamisessa Harri Laine 1

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

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

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

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

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

YHTEYSSUHDE (assosiation)

Ohjelmoinnin jatkokurssi, kurssikoe

UML Luokkakaavio 14:41

Ohjelmistojen mallintaminen Luokkakaaviot Harri Laine 1

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN

9. Periytyminen Javassa 9.1

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

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

Java kahdessa tunnissa. Jyry Suvilehto

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

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

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

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

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

Ohjelmistojen mallintaminen luokkamallin laatiminen

Tietokantojen perusteet k2004helsingin yliopisto/tktl Tietokantojen perusteet, s 2007 ER-mallin peruskäsitteet.

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

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Periytyminen (inheritance)

UML ja luokkien väliset suhteet

Ohjelmistojen mallintaminen luokkamallin laatiminen

9. Periytyminen Javassa 9.1

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

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

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

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

Listarakenne (ArrayList-luokka)

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

1 Tehtävän kuvaus ja analysointi

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

Mitä on periytyminen?

Olioperustaisuus (object oriented)

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

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

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

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

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

KOHDELUOKAN MÄÄRITTELY

2. Olio-ohjelmoinista lyhyesti 2.1

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

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

Java-API, rajapinnat, poikkeukset, UML,...

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

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

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

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

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

Ohjelmistojen mallintaminen. Luento 3, 9.11.

Ohjelmistojen mallintaminen, sekvenssikaaviot

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

16. Javan omat luokat 16.1

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

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

19. Unified Modeling Language (UML)

4. Olio-ohjelmoinista lyhyesti 4.1

Ohjelmointi 2 / 2010 Välikoe / 26.3

public static void main (String [] args)

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Javan perusteita. Janne Käki

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

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

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

UML - unified modeling language

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

812341A Olio-ohjelmointi, Olio-ohjelmoinnin peruskäsitteet ja Java-kieli

14. Poikkeukset 14.1

Java-kielen perusteita

Ohjelmistojen mallintaminen Olioiden yhteistyö Harri Laine 1

Muutamia peruskäsitteitä

Java-kielen perusteet

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Ohjelmistojen mallintaminen. Luento 7,

14. Poikkeukset 14.1

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Transkriptio:

4 Luokkamalli Rakenteet mittojen mukaan. Mitat rakenteen mukaan. Tämän osan sisältö Luokkakaavio luokkakaavion elementti attribuutit operaatiot määreet Olioiden väliset suhteet kytkös kooste yleistys rajapinta Luokkakaavion laatimisesta se vaativampi osa esimerkki: kirjanpitoa kirjastolainauksista Mallintaminen / Auvo Häkkinen / K2013 4-1 Mallintaminen / Auvo Häkkinen / K2013 4-2 Luokkamalli Luokkamalli tarkoittaa suunnitteluvaiheen mallintamista ratkaisuvaihtoehtojen kokeilua ja arviointia ilman työlästä toteutusvaihetta Mallinnettaessa luokitellaan kohdealueen ilmiöitä olioluokkiin ja näiden pohjalta laaditaan luokkakuvauksia käyttötapaukset mallinnetaan olioiden yhteistoimintana sanasto apuna olioiden tunnistamisessa Kuvataan käyttötapaukset toteuttavat luokat ja oliot olioiden väliset kytkökset, koostumiset ja yleistykset olioiden välinen vuorovaikutus LUOKKAKAAVIO Korkeampi abstraktiotaso kuin ohjelmakoodilla yleisrakenteen hahmottelu ilman "häiritseviä" yksityiskohtia Käytetään toteutusvaiheessa ohjelmoinnin tukena Mallintaminen / Auvo Häkkinen / K2013 4-3 Mallintaminen / Auvo Häkkinen / K2013 4-4 Luokka ja olio Luokka = malli, jonka mukaan voi luoda olioita kuvaa ominaisuudet (attribuutit) ja toiminnot (operaatiot) Olio = luokan suoritusaikainen ilmentymä, instanssi olio luotava ennen kuin voi käyttää mallin mukaisia operaatioita esim. Javan Scanner-luokka tarjoaa lukemisessa tarvittavia operaatioita: nextint(), nextline(), ennen kuin operaatioita voi käyttää, on luotava olio import java.util.scanner; Scanner näppis = new Scanner(System.in); String rivi = näppis.nextline(); Tietosisältö kapseloidaan (piilotetaan) luokan sisälle private tietosisältöön ei pääse suoraan käsiksi ulkopuolelta Luokan julkinen rajapinta tarjoaa hallitun ja kontrolloidun pääsyn tietosisältöön public luokassa operaatiot, joiden kautta tietosisältöön voi vaikuttaa public class SaldoLaskuri { private double arvo; public double otto(double määrä); public double pano(double määrä); public double saldo(); SaldoLaskuri laskuri = new SaldoLaskuri(); double m = laskuri.pano(10); Mallintaminen / Auvo Häkkinen / K2013 4-5 Mallintaminen / Auvo Häkkinen / K2013 4-6 Luokkakaavio (class diagram) Käytännössä tärkein ja käytetyin kaaviotyyppi UML:n luokkaelementissä kolme lohkoa valinnaiset osat mukana riippuen halutusta abstraktiotasosta Luokan nimi Attribuutit Operaatiot Aina mukana kaikissa kaavioissa Valinnaisia osia Luokkakaavio kuvaa ohjelmiston staattista rakennetta luokat ohjelmiston tietosisältöä luokkien attribuutit luokkien ulkoisia rajapintoja olioiden tarjoamat operaatiot luokkien (olioiden) välisiä suhteita kytkökset koosteet yleistykset UML:n oliokaaviolla (object diagram) kuvataan jotain tiettyä suoritusaikaista tilannetta ohjelmiston / järjestelmän koostuminen olioista on siis luokkakaavion ajonaikainen ilmentymä Oliokaaviossa : LuokanTunnus olion nimi voi näkyä elementissä tai se voi puuttua operaatiot eivät mukana oliokaaviossa tarkoittaa oliota ( : ja luokan tunnus) attribuuttien arvot tietyllä hetkellä Mallintaminen / Auvo Häkkinen / K2013 4-7 Mallintaminen / Auvo Häkkinen / K2013 4-8

Luokkakaavio Oliokaavio KohdeHallinto-oliolla on sovelluksen suoritusaikana, tietyllä hetkellä, kytkökset kahteen Auto-olioon kommentti / huomautus Mallintaminen / Auvo Häkkinen / K2013 4-9 Mallintaminen / Auvo Häkkinen / K2013 4-10 Attribuuttilohko ATTRIBUUTIT OPERAATIOT sekä niiden määreet Attribuuttilohko ei pakollinen osa UML:n luokkaelementtiä Minimissään näkyy attribuuttien nimet kaikkia attribuutteja ei tarvitse esittää Lisäksi siinä voi olla attribuutin tietotyyppi vrt. Javan int, double, char, String, jne. näkyvyysmääre Luokan nimi vrt. Javan private, public, protected lisämääreet Attribuutit vrt. Javan static, final oletusarvo Operaatiot moniarvoisuus esim. taulukko, kokoelma Syntaksi [näkyvyys] nimi [: tyyppi ] [ = oletusarvo][{muut määreet] Merkintä [ ] tarkoittaa syntaksikaavioissa, että osa voi puuttua Mallintaminen / Auvo Häkkinen / K2013 4-11 Mallintaminen / Auvo Häkkinen / K2013 4-12 Attribuutin tyyppi Tyyppi erotetaan attribuutin nimestä kaksoispisteellä pituus : int Tyyppi voi olla perustietotyyppi int, double, char jne. Oliotyyppiset attribuutit esitetään attribuuttiosassa vain mikäli ne ovat perustietotyypin kaltaisia esim. String, Date, Color, Point, jne. Muussa tapauksessa oliotyyppistä attribuuttia ei esitetä luokan sisällä, vaan merkitään kytkös (assosiaatio) ko. luokkien välille kytköksen voi nimetä kuvaavalla (attribuutin) nimellä, roolinimellä esim. hoitaja Näkyvyysmääreet Rajaavat attribuutin tai operaation näkyvyyttä Merkitään attribuutin tai operaation nimen eteen - + # ~ Jos määre puuttuu, näkyvyys on määrittelemätön (oletusarvoa ei ole) näkyy vain luokan omille operaatioille vrt. Javan private näkyy kaikkialle, myös luokan ulkopuolelle vrt. Javan public näkyy luokan omille operaatioille, ja aliluokkien operaatioille vrt. Javan protected näkyy saman pakkauksen (package) operaatioille vrt. Javassa tyhjä (oletus) piirrosohjelmat saattavat "koristella" omalla tavallaan Mallintaminen / Auvo Häkkinen / K2013 4-13 Mallintaminen / Auvo Häkkinen / K2013 4-14 Muut määreet Attribuutin nimi alleviivattuna määrittelee luokka-attribuutiksi attribuutti ei ole oliokohtainen, vaan yhteinen ko. luokan kaikille olioille vrt. Javan static Muut lisämääreet kaarisulkeissa { frozen vakioarvoinen attribuutti, arvoa ei muuteta vrt. Javan final Operaatiolohko Operaatiolohko ei pakollinen osa UML:n luokkaelementtiä Jos mukana, lohkossa näkyy minimissään operaation nimi kaikkia operaatioita ei tarvitse esittää Lisäksi siinä voi olla operaation näkyvyys kuten attribuuttien näkyvyys parametrit kuten attribuuttien määrittely lisäksi voi olla tiedon välityksen suunta: in, out, inout paluuarvon tyyppi muut määreet Syntaksi Luokan nimi Attribuutit Operaatiot Javassa mahdollista vain in, ei merkitä [näkyvyys] nimi ([parametrit])[: paluuarvo][{muut määreet] nimi : tyyppi [= oletusarvo] Mallintaminen / Auvo Häkkinen / K2013 4-15 Mallintaminen / Auvo Häkkinen / K2013 4-16

Esimerkkejä static protected package private public social security number OLIOIDEN VÄLISET SUHTEET kytkös Itsestäänselvyyksiä turha merkitä esim. setterit ja getterit, konstruktori Mallintaminen / Auvo Häkkinen / K2013 4-17 Mallintaminen / Auvo Häkkinen / K2013 4-18 Kytkös (association) Kahden luokan välille voi määritellä rakenteellisen kytköksen (assosiaation), jossa luokan sisällä on kiinteä viite toiseen luokkaan Kuvaa luokkien ilmentymien eli olioiden välisiä suhteita olioilla rakenteellinen, pysyväluonteinen kytkös kuvaa suoritusaikaista tilannetta kytköksen ansiosta olio voi tuntea toisen olion ilmaisee, että olio voi käyttää toisen olion operaatioita Olio voi tuntea toisen olion hetkellisesti myös pelkän metodille annetun parametrin kautta Merkitään viivana tai nuolena luokkien välille korkealla abstraktiotasolla kytkökset merkitty yleensä suuntaamattomina Ohjelmakoodissa kytkös ilmenee s.e. luokalla olioarvoinen attribuutti tai luokan oliosta jokin epäsuora viittaus toiseen olioon, esim. operaatio saa viitteen metodikutsun parametrina public class { private int numero; private String laji; private float paino; private Henkilo hoitaja; Kytkökselle voi merkitä nimen (roolin) - tarvittaessa molempiin päihin Eläimen hoitaja on n hoidettava on Lisäksi voi merkitä lukusuunnan < tai > kytkösviivana nuoli hoidettava <hoitaa hoitaja Mallintaminen / Auvo Häkkinen / K2013 4-19 Mallintaminen / Auvo Häkkinen / K2013 4-20 Kytkösrajoitteet (multiplicity) Kertoo kuinka monta luokan ilmentymää voi olla kytkettynä toisen luokan ilmentymään (kertautuminen, moniarvoisuus) esim. Yhteen eläimeen liittyy täsmälleen yksi hoitaja. Jokaisella hoitajalla voi olla monta hoidettavaa eläintä Merkinnöissä 0 = 0 tai 1 ilmentymää * hoidettava[] 1 = täsmälleen yksi ilmentymä * = 0 tai useampia ilmentymiä (merk. joskus n) Jos ei merkitä, jää määrittelemättömäksi (ei oletusarvoa) 1 hoitaja Yleensä olioarvoinen attribuutti vain kytköksen toisessa päässä Jos halutaan toteuttaa navigoitavuus myös toiseen suuntaan, tarvitaan moniarvoinen attribuutti esim. taulukko public class { private int numero; private String laji; private float paino; private hoitaja; public ( h) { hoitaja = h; navigoitavuus Eläimestä ön public class { private String nimi; private [] hoidettava; public otahoitoon( e){ hoidettava[i] = e; tee kytkös esim. -oliota luotaessa (konstruktorissa), tai navigoitavuus stä useaan Eläimeen tee kytkös esim. erillisellä metodilla, tai Mallintaminen / Auvo Häkkinen / K2013 4-21 Mallintaminen / Auvo Häkkinen / K2013 4-22 Kytkös samaan luokkaan melko tavallinen tilanne, ei ongelmaa Esim. Ihmisellä on 0 tai useampi lapsi Ihmisellä on 0..2 vanhempaa Ihminen vanhemmat[] 0..2 lapset[] 0..n class Ihminen { private String nimi; private Ihminen[] lapset; private Ihminen[] vanhemmat; this.lapset = new Ihminen[n]; this.vanhemmat = new Ihminen[2]; this.lapset[4] = this.vanhemmat[1] = Ihminen mä = new Ihminen("Averell"); Kytköksille voi asettaa myös muita kuin lukumäärällisiä rajoitteita Rajoite merkitään aaltosulkujen sisään { ikä>65 Eläkeläinen Jos attribuutin arvon voi laskea muiden attribuuttien arvosta, voi attribuutin merkitä johdokseksi Johdos merkitään nimen edessä olevalla kauttaviivalla Tuote myyntihinta : double; nettohinta : double; /kate=myyntihinta-nettohinta; Mallintaminen / Auvo Häkkinen / K2013 4-23 Mallintaminen / Auvo Häkkinen / K2013 4-24

Kytköstyypit OLIOIDEN VÄLISET SUHTEET kooste Kun kytköksen toista/toisia osapuolia voi pitää osana toista osapuolta, käytetään kytköksestä termiä kooste tai aito kooste eli kompositio "on osa", "kuuluu" Kytköstyyppi merkitään salmiakkikuviona sen luokan puoleiseen päähän, johon osa kuuluu Kytköstyypit korostavat toteutustapaa ero tulee siitä, voiko toinen osapuoli olla olemassa vaikka toista osapuolta ei olisikaan olemassa olemassaoloriippuvuus vai ei Mallintaminen / Auvo Häkkinen / K2013 4-25 Mallintaminen / Auvo Häkkinen / K2013 4-26 Kooste (aggregation) Ei olemassaoloriippuvuutta osa ja kokonaisuudet voivat olla olemassa toisistaan riippumatta Kumpikin osapuoli voidaan luoda ja hävittää täysin erillään toisistaan tarvitaan erillinen operaatio, jolla kytkös saadaan tehdyksi parametrinvälityksen kautta Avoin salmiakkisymboli Luokka * Oppilas Aito kooste, kompositio (composition) Olemassaoloriippuvuus osien olemassaolo täysin sidoksissa kokonaisuuden olemassaoloon osien luonti samalla kun olio itse luodaan kun kokonaisuus hävitetään, hävitetään myös sen osat Vahva kytkös osa voi sisältyä vain yhteen samantyyppisen kompositioon osa ei voi vaihtaa kompositiotaan, vaan on aina osa samaa kokonaisuutta Kokonaisuus vastuussa osien elinkaaresta luominen, tuhoaminen Täytetty salmiakkisymboli Rakennus * Huone Mallintaminen aggregation: / Auvo kokonaisuus, Häkkinen / K2013 kokonais-, yhdistelmä, keräymä 4-27 Mallintaminen composition: / Auvo koostumus, Häkkinen / K2013 S2010 rakenne, kokoonpano, lados, asetelma 4-28 Joukkue koostuu 5:stä Pelaajasta Ihmisellä on 2 Jalkaa, 2 Kättä ja Pää" Pää Joukkue Pelaaja Ihminen Käsi 0..1 5 Joukkue-kokonaisuudessa attribuutit, joiden avulla päästään käsiksi kuhunkin Pelaaja-osaan ts. Joukkue-olio voi käyttää Pelaaja-olioiden operaatioita, esim. pelaaja.getnimi() Pelaajan tiedot voi erikseen kytkeä joukkueeseen erillisellä metodilla, esim. joukkue.palkkaa(pelaaja) Pelaajan voi vaihtaa toiseksi suoritusaikana (pura vanha kytkös, tee uusi) Joukkue säilyy vaikka pelaajat vaihtuisivat Pelaaja voi olla olemassa, vaikka ei olisikaan kytköstä Joukkueeseen Joukkue koostuu aina viidestä Pelaajasta Jalka Ihminen-kokonaisuudessa attribuutit, joiden avulla päästään käsiksi koosteen osiin (Pää, Käsi, Jalka) ts. Ihminen-olio voi käyttää niihin liittyviä operaatioita, esim. käsi.vilkuta() Ruumiinjäsen-oliot luodaan silloin, kun Ihminen luodaan konstruktorissa Kun Ihminen-olio lakkaa olemasta, katoavat myös ruumiinjäsen-oliot Mallintaminen / Auvo Häkkinen / K2013 4-29 Mallintaminen / Auvo Häkkinen / K2013 4-30 Yleistys (generalization) OLIOIDEN VÄLISET SUHTEET yleistys Luokkien välinen yleistys-erikoistus suhde yleiskäsite = yliluokka (base class) esim. Ihminen erikoistus = aliluokka (subclass) esim. Suomalainen Syntyy luokkahierarkia Tutumpi oliokäsite periytyminen (inheritance) Javassa avainsana extends Jokainen aliluokan olio on myös yliluokan olio Suomalainen on Ihminen Päinvastainen ei välttämättä päde Kaikki Ihmiset eivät ole Suomalaisia Englanniksi: periytyminen on is a suhde A Finn is a Human" Yliluokka Aliluokka Ihminen Suomalainen Kolmionuoli, kolmio yleiskäsitteeseen päin Mallintaminen / Auvo Häkkinen / K2013 4-31 Mallintaminen / Auvo Häkkinen / K2013 4-32

Koska aliluokan olio on myös yliluokan olio, se perii kaikki yliluokan attribuutit Suomalaisella on kaikki Ihmisen ominaisuudet Aliluokka voi määritellä attribuutteja, joita yliluokan olioilla ei ole Suomalaisella on sisua Eli jos yliluokalla on attribuutteja tai operaatiota, niin aliluokalla on automaattisesti samat attribuutit ja operaatiot Aliluokassa voi määritellä uudelleen samannimisiä attribuutteja ja operaatioita kuin yliluokassa käytetään niitä yliluokassa esitettyjen sijasta ylikirjoittaminen (override) Aliluokka voi nähdä suoraan yliluokan attribuutit Java: määre protected Jos yliluokassa määre private, käytettävä gettereitä ja settereitä Johtaja on erikoislaatuinen Työntekijä periytyminen samat (perus)ominaisuudet ja (perus)operaatiot kuin muillakin työntekijöillä Johtajalla on Työntekijöitä alaisina luokassa lisäksi siis kytkökset alaisiinsa voi sisältää myös lisäominaisuuksia ja -operaatioita ylikirjoittaminen: peritty ominaisuus tai operaatio voi olla räätälöity public class Johtaja extends Työntekijä { ; private Työntekijä [] alainen; Työntekijä Johtaja n alainen 0..1 Mallintaminen / Auvo Häkkinen / K2013 4-33 Mallintaminen / Auvo Häkkinen / K2013 4-34 "Autoilla on omistaja. Omistaja voi olla joko tai Yritys." Omistaja on yleiskäsite on Omistajan erikoistus Yritys on Omistajan erikoistus public class Auto { public class Yritys extends Omistaja { ; private Omistaja omja; public class extends Omistaja { ; public class Omistaja { private Auto [] auto; Yritys Auto * 1 Omistaja Moniperintä (multiple inheritance) Luokka on useamman kuin yhden yliluokan välitön aliluokka perii ominaisuuksia ja operaatioita useammalta kuin yhdeltä luokalta Tyypillisesti vaikea toteuttaa (oikein); vältä ongelma: samannimiset attribuutit / operaatiot C++ tukee moniperintää, Java ei suoraan Javassa käytettävä rajapintoja (interface) Työntekijä palkka Partneri Osakkeenomistaja osakelkm Mallintaminen / Auvo Häkkinen / K2013 4-35 Mallintaminen / Auvo Häkkinen / K2013 4-36 Abstrakti luokka (abstract class) Abstrakti luokka = vähintään yksi abstrakti metodi Abstrakti metodi = ainoastaan otsikko, ei toteutusta kuvataan vain rajapinta Abstraktista luokasta ei voi luoda olioita abstrakti luokka voi olla vain yliluokkana public abstract class Ajoneuvo { private double ajokilometrit; ei pakollinen <<abstract>> Ajoneuvo ajokilometrit aja(ajokm:double) asetaajokm(ajokm:double) tulostaajokm() public abstract void aja(double ajokm); // ei toteutusta public void asetaajokm(double ajokm){ ajokilometrit = ajokm; public void tulostaajokm() { System.out.println( Ajettu = + ajokilometrit); Mallintaminen / Auvo Häkkinen / K2013 4-37 kursivoituna public class Auto extends Ajoneuvo { public void aja(double ajokm) { // toteuta abstrakti metodi System.out.println( Onko ajokorttia (k/e)? ); char vast = Oma.lueChar(); if (vast!= e ) { this.asetaajokm(ajokm); this.tulostaajokm(); else { System.out.println("Hankipa ajokortti ensin!"); public class Polkupyora extends Ajoneuvo { public void aja(double ajokm) { // toteuta abstrakti metodi this.asetaajokm(ajokm); this.tulostaajokm(); public class Ajotesti { public static void main(string[] args) { Polkupyora fillari = new Polkupyora(); Auto biili = new Auto(); Ajoneuvo neuvo = new Ajoneuvo(); // VIRHE! fillari.aja(45); biili.aja(120); Mallintaminen / Auvo Häkkinen / K2013 4-38 Rajapinta (interface) Tapa esitellä mitä operaatioita luokkaan kuuluu määrittelemättä mitään toimintaa esitellään vain operaatioiden otsakkeet, mutta yhdenkään toimintaa ei kuvata kaikki operaatiot abstrakteja kuvauksessa voi olla vain vakioarvoisia staattisia attribuutteja (public final static) Javassa rajapinta ei ole luokka vaan joukko esittelyjä (prototyyppejä) luokkien operaatioista, joiden on tarkoitus olla kuvatun prototyypin mukaisia siitä ei voi luoda suoraan olioita otsakkeessa määre interface (määreen class sijasta) Käytetään kuten periytymistä operaatioiden nimet peritään sellaisenaan, mutta toteutus (realization) aina ohjelmoitava erikseen Javassa avainsana on nyt implements (ei extends) luokka voi toteuttaa useita rajapintoja (implements api1, api2, api3) Luokka Appelsiini periytyy luokasta Hedelmä ja toteuttaa rajapinnan Pallo Luokka Jalkapallo toteuttaa rajapinnan Pallo yleistys (eli periytyminen) extends Hedelmä Appelsiini <<interface>> Pallo Jalkapallo Rajapinnan toteutus merkitään pisteviivallisena yleistyksenä kaikki abstrakteja (kursivointi) toteutus implements Mallintaminen / Auvo Häkkinen / K2013 4-39 Mallintaminen / Auvo Häkkinen / K2013 4-40

public class Hedelmä { public String tostring() { return Olen hedelmä ; public interface Pallo { public abstract void ; // vain otsake = mikä toiminto // miten toiminto tehdään toteutetaan luokissa Appelsiini ja Jalkapallo public class Appelsiini extends Hedelmä implements Pallo { public void { System.out.println( Appelsiini pyörii vaappuen ); public class Jalkapallo implements Pallo { public void { System.out.println( Jalkapallo pyörii hyvin ); public String tostring() { return Olen jalkapallo ; Mallintaminen / Auvo Häkkinen / K2013 4-41 Koska rajapinta ei oikeasti ole luokka, se kuvataan usein ympyrä- ja kuppisymbolein (jolloin operaationimet eivät näy) ympyrä = toteuttaa rajapinnan kuppi = käyttää rajapinnan tarjoamaa operaatiota Appelsiini Jalkapallo Jalkapallo Pallo Pallo rajapinnan nimi Jonglööri JokuLuokka Mallintaminen / Auvo Häkkinen / K2013 4-42 UML 2 UML 1 LUOKKAKAAVION LAATIMISESTA Mallintaminen / Auvo Häkkinen / K2013 4-43 Mallintaminen / Auvo Häkkinen / K2013 4-44 Luokkakaavion laatiminen Kartoita ehdokkaita luokiksi Kokonaisuudesta osiin (jäsentävä tapa) etsi ensin karkea (käyttötapauksista riippumaton) yleiskuva luokista ja niiden kytköksistä, lisää sitten yksityiskohtia etsi kerralla koko kohdealuetta kuvaavaa luokkamallia voi olla hankalaa, jos kohdealue on laaja Osista kokonaisuuteen (inkrementaalinen tapa) yksityiskohdista yleiskuvaan jaa ensin kokonaisuus osiin ja tee osakohtaisia malleja luokista/olioista osa voisi olla esimerkiksi käyttötapaus yhdistä ne sitten kokonaismalliksi sopii paremmin suurten ohjelmistojen kehittämiseen Kartoita ehdokkaita luokiksi. Karsi ehdokkaita. Tunnista olioiden väliset kytkökset. Täsmennä luokkakuvauksia määrittelemällä attribuutit. Määrittele kytköksiin liittyvät rajoitteet. Määrittele keskeiset operaatiot. iteratiivisuus Ota lähtökohdaksi järjestelmän sovellussanasto, jonka saat koottua sanallisesta kuvauksesta, haastatteluista käyttötapausten tilannekuvauksista Alleviivaa ehdokkaita luokiksi ja kerää niistä luetteloa Luokkina (ja olioina) voivat tulla kyseeseen toimintaan osallistujat toiminnan kohteet toimintaan liittyvät tapahtumat materiaalit tuotteet ja välituotteet toiminnalle edellytyksiä luovat asiat Ehdokkaita luokiksi: subjektit ja objektit, substantiivit esim. Auto, Asiakas, Pankkitili, jne. joku tekee jotain jollekin kuka? kenelle/mille? Mallintaminen / Auvo Häkkinen / K2013 4-45 Mallintaminen / Auvo Häkkinen / K2013 4-46 Karsi ehdokkaita Alustava karsinta järjestelmän rajaaminen karsi synonyymit Käy läpi löydetyt ehdokkaat ja arvioi, voisiko olla sopiva luokaksi liittyykö luokan ilmentymiin tietosisältöä, joka välttämätöntä järjestelmän kannalta yleensä oltava useita attribuutteja, muuten ei luokaksi tarvitaanko tietoa ilmentymien olemassaolosta onko asia riittävän tärkeä kohdealueen / mallinnettavan ilmiön kannalta Jatka karsintaa, iteroi "ei se nyt ekalla kerralla kuitenkaan mennyt oikein" Tunnista kytkökset Kytköksiä (ilmentymien välillä) voi etsiä vapaamuotoisesta kuvauksesta ehdokkaita kytköksiksi: verbit ja genetiivit esim. hoitaa, käyttää, omistaa, jne. muut ilmaukset, jotka kuvaavat kytkentää Kytkösten suhteen tulisi miettiä onko kytkös oleellinen tarkasteltavan ilmiön kannalta onko se rakenteellinen (olemassoleva asiaintila): kooste vai aito kooste tarvitaanko kytkös molempiin suuntiin Yksi asia (data) pitäisi esittää vain kertaalleen johdettavissa olevaa tietoa ei tarvitse (ei pidä) tallettaa erikseen kytköksen kautta pääsee muualla olevaan tietoon karsi tai merkitse joku tekee jotain jollekin joku omistaa jonkun joku on osa jotain joku koostuu jostakin Älä piilota kytköksiä attribuuteiksi, piirrä kaavioon! Huom. olio voi tuntea toisen olion hetkellisesti myös parametrinvälityksen kautta Mallintaminen / Auvo Häkkinen / K2013 4-47 Mallintaminen / Auvo Häkkinen / K2013 4-48

Määrittele attribuutit ja operaatiot Seuraava vaihe on täsmentää luokkien tietosisältö (attribuutit) sekä niihin liittyvät operaatiot Attribuutteja saattaa löytyä sanallisesta tilannekuvauksesta yleensä löytäminen edellyttää lisäselvityksiä kohdealueesta, esimerkiksi toiminnan osapuolten haastatteluja Määrittele kytkösrajoitteet Kytkösrajoitteet ilmaisevat rakenteellisia sääntöjä Säännöt eivät välttämättä tule esiin sanallisessa kuvauksessa, vaan edellyttää tarkempaa kohdealueen analysointia Varmista luokkamallin kattavuus vertaamalla käyttötapauksiin Attribuuttien kohdalla pitää myös selvittää mihin niitä tarvitaan Lisää luokkien tärkeimmät julkiset operaatiot käyttötapauksen tilannekuvauksessa (numeroidut) askeleet potentiaalisia ehdokkaita operaatioiksi voiko attribuuttiin vaikuttaa luokan ulkopuolelta Älä piilota yhteyksiä attribuuteiksi Älä änge liikaa yhteen kaavioon. Tee useampia kaavioita. Kaikkea ei tarvitse esittää kerralla. Keskity olennaiseen kullakin abstraktiotasolla. Sopiva määrä abouttiarallaa 7 ± 2 elementtiä per kaavio. Tärkeimmät elementit vasempaan yläreunaan. Mallintaminen / Auvo Häkkinen / K2013 4-49 Mallintaminen / Auvo Häkkinen / K2013 4-50 Välikysymyksiä Millaisista elementeistä luokkakaavio muodostuu? Miten luokkakaavio ja oliokaavio eroavat toisistaan? Miten kooste ja aito kooste eroavat toisistaan? Miten kytkös toteutetaan käytännössä? Mitä tarkoitetaan oliokäsitteellä yleistys? Hyödyt? Mitä tarkoitetaan tiedon kapseloinnilla? Millaisia määreitä attribuutteihin ja operaatioihin voi liittää? Mikä on abstrakti luokka? Miten rajapinta ja luokka eroavat toisistaan? Mallintaminen / Auvo Häkkinen / K2013 4-51