Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

Samankaltaiset tiedostot
Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

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

Ohjelmistojen mallintaminen Luokkakaaviot Harri Laine 1

Ohjelmistotekniikan menetelmät Luokkamallit ohjelmiston mallintamisessa Harri Laine 1

Luokkakaavion 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ä

Ohjelmistojen mallintaminen luokkamallin laatiminen

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

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

Ohjelmistojen mallintaminen luokkamallin laatiminen

UML - unified modeling language

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

Mitä on periytyminen?

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

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

Ohjelmistotekniikan menetelmät, kesä 2008

Ohjelmistojen mallintaminen, kesä 2009

Ohjelmistotekniikan menetelmät, kevät 2008

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN

Ohjelmistojen mallintaminen, kesä 2010

Ohjelmistojen mallintaminen kertausta Harri Laine 1

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

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

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

Luokkakohtaiset eli stattiset metodit ja attribuutit

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

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

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

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

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

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

Ohjelmistotekniikan menetelmät

Ohjelmistotekniikan menetelmät

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

POLKU LUOKKAKAAVIOISTA TAULUJEN TOTEUTUKSEEN

Nimi: Henkilötunnus: {id} {+id}

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

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

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

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Ohjelmistotekniikan menetelmät, koe

Ohjelmistojen mallintaminen, kertausta

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

1. Tarkastellaan seuraavaa kaaviota

3. Käsiteanalyysi ja käsitekaavio

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

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

9. Periytyminen Javassa 9.1

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Johdatus sovellussuunnitteluun osa 2

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

Harjoitustehtävät ja ratkaisut viikolle 48

UML Luokkakaavio 14:41

Muutamia peruskäsitteitä

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

Kertaus: yleistys-erikoistus ja perintä

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

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

9. Periytyminen Javassa 9.1

UML- mallinnus: Tilakaavio

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

19. Unified Modeling Language (UML)

TIEDONHALLINTA - SYKSY Luento 7. Pasi Ranne /10/17 Helsinki Metropolia University of Applied Sciences

HELIA 1 (14) Outi Virkki Käyttöliittymät ja ohjlmiston suunnittelu

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

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

Analyysi, dynaaminen mallintaminen, yhteistoimintakaavio ja sekvenssikaavio

SÄILYTETTÄVIEN TIETOJEN MÄÄRITYS LUOKKAMALLI

Ohjelmistojen mallintaminen. Luento 6,

Analyysi, dynaaminen mallintaminen, yhteistoimintakaavio ja sekvenssikaavio

Olio-ohjelmointi Johdanto olio-ohjelmointiin

CS-A1150 Tietokannat CS-A1150 Tietokannat / 35

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

Ohjelmistojen mallintaminen. Luento 7,

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

Liiketoimintaprosessin kuvaus (esim. osapuolten välisenä yhteistyökaaviona) Sidosryhmäkaavio. karkea keskeistä tietosisältöä kuvaava luokkakaavio

Ohjelmistojen mallintaminen. Luento 4,

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

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

Ohjelmistotekniikan menetelmät, UML

Ohjelmistojen mallintaminen, mallintaminen ja UML

Ohjelmistojen mallintaminen viikon 4 laskareiden mallivastauksia

Johdatus sovellussuunnitteluun, s99, osa5 Helsingin yliopisto;/tktl DO NOT PRINT THIS DOCUMENT. Harri Laine 1. Olioiden yhteistoiminta

Johdatus sovellussuunnitteluun, s99, osa5 Helsingin yliopisto;/tktl DO NOT PRINT THIS DOCUMENT. Harri Laine 1. Olioiden yhteistoiminta

Ohjelmistojen mallintaminen, mallintaminen ja UML

P e d a c o d e ohjelmointikoulutus verkossa

Luokka- ja oliokaaviot

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

Ohjelmistojen mallintaminen olioiden elinkaaret - tilakaavio Harri Laine 1

Olio-ohjelmointi Johdanto suunnittelumalleihin. 1. Yleistä

Javan perusteita. Janne Käki

Ohjelmistojen mallintaminen. Luento 4,

Common Lisp Object System

Olioiden yhteistoiminta

12. Monimuotoisuus 12.1

Transkriptio:

582101 - Ohjelmistotekniikan menetelmät, luokkamallin laatiminen 1

Lähestymistapoja Kokonaisvaltainen lähestymistapa (top-down) etsitään kerralla koko kohdealuetta kuvaavaa mallia hankalaa, jos kohdealue on laaja ensin karkea yleiskuva, sitten lisää yksityiskohtia JA/TAI Osista kokonaisuuteen (bottom-up) jaetaan kokonaisuus osiin ja tehdään osakohtaisia malleja, jotka sitten yhdistetään kokonaismalliksi osa voisi olla esimerkiksi käyttötapaus yksityiskohdista yleiskuvaan 2

Luokkamallin laatimisen yleisohje Laadi kohdealueen perussanasto Muodosta alustava luokkakaavio Tunnista luokkien ilmentymien väliset yhteydet Täsmennä mallia määrittelemällä attribuutit Määrittele yhteyksien moniarvoisuusmääreet Liitä luokkiin operaatiot ja lisää tarvittaessa uusia luokkia käyttötapausten perusteella Varmista käyttötapausten ja luokkamallin yhteensopivuus 3

Perussanaston laatiminen (harjoitus 1) Etsi kohdealueen potentiaaliset luokat ja oliot esim. keskeiset toimijat, toiminnan kohteet, ilmiöt, tapahtumat, materiaalit, tuotteet, käsitteet, termit, Lähtökohtana esim. vapaamuotoinen tekstikuvaus Kerää luokkaehdokkaat perussanastoksi luokkaehdokkaat tekstissä usein subjekteja tai objekteja verbit voivat ilmaista yhteyksiä, samoin genetiivit 4

Turhien ehdokkaiden karsiminen perussanastosta Luokka oleellinen mallinnettavan ilmiön kannalta? Luokalla (useita) ilmentymiä? Ilmentymillä järjestelmän kannalta välttämätöntä tietosisältöä (yleensä oltava useita attribuutteja)? Poista synonyymit Karsiminen tyypillisesti iteratiivista 5

Yhteyksien tunnistaminen Etsi yhteyksiä sanastosta (ja muista kuvauksista) Käy läpi verbit ja genetiivit sekä muut ilmaukset, jotka kuvaavat kytkentää Onko yhteys oleellinen tarkasteltavan ilmiön kannalta? Onko se rakenteellinen? (vallitseva asiaintila) Esitä kukin asia vain kertaalleen Karsi tai merkitse johdettavissa olevat yhteydet Älä piilota yhteyksiä attribuuteiksi! Työntekijä osastonnimi Osasto nimi Työntekijä osasto nimi Osasto 6

Attribuuttien tunnistaminen Attribuutteja saattaa löytyä sanastosta Yleensä niiden löytäminen edellyttää lisäselvityksiä kohdealueesta, esimerkiksi toiminnan osapuolten haastatteluja Attribuuttien kohdalla pitäisi myös selvittää, mihin niitä tarvitaan Ja uudelleen: älä piilota yhteyksiä attribuutteihin! 7

Moniarvoisuusmääreet Moniarvoisuusmääreiden eli osallistumisrajoitteiden avulla ilmaistaan rakenteellisia sääntöjä Säännöt eivät välttämättä tule esiin sanastossa, vaan edellyttävät tarkempaa kohdealueen analysointia 8

Käyttötapausten rooli operaatioiden ja luokkien tunnistamisessa Käydään läpi kukin käyttötapaus ja sen määrittelemät toiminnalliset vaatimukset esimerkiksi taulukkomuodossa (ks. Maciaszek & Liong, Ch. 11.1, s. 332-339) Määritellään yksi (tai useampi) pääluokka, joka vastaa toiminnallisuuden toteuttamisesta Määritellään yksi tai useampia operaatioita, jotka vastaavat toiminnallisuuden toteuttamisesta Määritellään tarvittaessa apuluokkia, joita pääluokka käyttää hyväksi 9

Käyttötapausten ja luokkamallin yhteensopivuus Käyttötapausmallin ja tietosisältömallin yhteensopivuuden varmistamiseksi voidaan käyttää riippuvuusmatriisia luokat ja yhteydet vs. käyttötapaukset alkiona riippuvuustieto: luo, muuttaa, poistaa, käyttää matriisit voidaan esittää myös attribuuttitasolla, jolloin kuvataan kunkin attribuutin käsittely (tällä tasolla matriisit on kuitenkin syytä pilkkoa luokkakohtaisiksi) 10

Riippuvuusmatriisi 11

Riippuvuusmatriisin käyttö Jokaiselle luokalle ja yhteydelle täytyisi löytyä käyttötapaus, jolla voidaan luoda luokan ilmentymiä ja kytkeä olioita ko. yhteyteen Jokaiselle luokalle ja yhteydelle täytyisi löytyä käyttötapaus, joka hyödyntää luokan tietoja ja yhteyksiä Jos ilmentymät eivät ole ikuisia, pitää löytyä käyttötapaus, jolla poistetaan ilmentymiä Jos ilmentymän tietosisältö ei ole muuttumaton, pitää löytyä käyttötapaus, jolla tietosisältöä voidaan muuttaa Jos osapuoli voidaan irrottaa yhteydestä, täytyy tähän tarkoitukseen löytyä käyttötapaus Lisäksi: jokaisen käyttötapauksen täytyy jollain tavoin liittyä sisältöluokkiin 12

Luokkamallin lisäpiirteitä Erilaiset yhteystyypit kooste kompositio Muita luokkien välisiä suhteita riippuvuudet periytyminen eli luokkahierarkia 13

Kooste (aggregation) Erikoistapaus, jossa yhteyden osapuolta voidaan pitää osana toista osapuolta Esitetään yhteysviivan kokonaisuuden puoleisen pään avoimella salmiakkisymbolilla Selventää olioiden välistä semanttista suhdetta ei välttämättä vaikutusta navigointimahdollisuuksiin yleensä kuitenkin kokonaisuudesta on pääsy sen osiin Joukkue * jäsen Pelaaja 14

Kompositio (composition) Koostetta merkittävämpi erikoistapaus, jossa osan olemassaolo kytketty kokonaisuuteen: kun kokonaisuus poistetaan, häviävät myös osat (vrt. kooste) osa(-olio) voi sisältyä vain yhteen kompositio(- olioon) osa ei voi vaihtaa kompositiotaan kokonaisuus vastuussa osien luonnista ja poistamisesta (yksityiskohdat riippuvat yhteyden toteutuksesta) Merkitään suljetulla salmiakkisymbolilla Rakennus 1..* Huone osoite koodi 15

Kompositiosta Kompositio on UML:ssä ainoa tapa ilmaista olemassaoloriippuvuus mallintamisessa tärkeä asia (tärkeämpi kuin osan ja kokonaisuuden yhteys) jos olemassaoloriippuvuus pitää kyetä esittämään, on syytä käyttää kompositiota, vaikka osa-kokonaisuus -yhteys ei aivan selvältä näyttäisikään Kompositiota käytetään myös usein hyväksi olioiden identifioinnissa esim. Exactum-rakennuksen huone C227 16

Muita luokkien välisiä suhteita 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) 17

Riippuvuus (dependency) 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ä stereotyypillä Esim. luontiriippuvuus 18

Luokkahierarkia Luokkahierarkiassa (class hierarchy, inheritance hierarchy) luokka voidaan määritellä toisen luokan aliluokaksi (subclass) Esimerkiksi: luokka Johtaja on luokan Henkilö aliluokka luokat Auto, Laiva ja Lentokone ovat luokan Kulkuväline aliluokkia 19

Ilmentymät ja luokkahierarkia Jos luokka A on luokan B aliluokka (ja B vastaavasti A:n yliluokka), niin jokainen A:n ilmentymä on myös B:n ilmentymä esim. jokainen Johtaja on myös Henkilö Tästä seuraa, että kaikki ominaisuudet, jotka on määritelty luokan B ilmentymille, liittyvät myös A:n ilmentymiin esim. jos Henkilölle on määritelty attribuutti nimi, niin myös Johtajalla on automaattisesti nimiattribuutti esim. jos Henkilö on määritelty osapuoleksi työsuhde-yhteyteen, myös Johtajalla on työsuhdeyhteys 20

Periytyminen Em. ilmiötä kutsutaan periytymiseksi (inheritance) yliluokkaan (super class, base class) liitetyt attribuutit, operaatiot ja yhteydet periytyvät aliluokalle aliluokkaan voidaan liittää lisäksi omia ominaisuuksia Periytyminen on luokkien välistä määrittelyrakenteiden periytymistä, joten ilmentymät eivät peri attribuuttien arvoja toisiltaan moniarvoisuusmäärettä ei voi merkitä periytymissuhteeseen, sillä moniarvoisuus täsmentää ilmentymien välistä yhteyttä 21

Luokkahierarkia eli yleistyssuhteet (generalization) Viiva, jossa yliluokan päässä avoin kolmio Esimerkiksi: johtajalla on vastuualue, jota ei ole henkilöillä yleisesti vain johtajalla voi olla oikeus käyttää edustustiliä johtajalla voi olla alaisia esimies 0..1 Johtaja alainen 0..* Henkilö vastuualue 0..* käyttöoikeus 0..1 Edustustili 22

Luokkahierarkia mallinnuksessa Järjestelmää korkealla tasolla mallinnettaessa luokkahierarkiasta on eniten hyötyä rakenteellisten sääntöjen ilmaisemisessa esim. jokin on joko A tai B kuvauksen ekonomisuudessa ei tarvitse toistaa samoja asioita useassa luokassa tarvittaessa voidaan esittää vain hierarkian juuriluokka 23

Esimerkki rakenteellisesta säännöstä Autolla on tasan yksi omistaja, joka voi olla joko yritys tai henkilö Auto Auto * yritysomistus * henkilöomistus * 0..1 0..1 1 Yritys Henkilö Omistaja Voiko autolla olla - sekä yritys- että henkilöomistaja? - nolla omistajaa? Yritys Henkilö 24

Luokkahierarkian kattavuus Aliluokkia voidaan muodostaa monin eri perustein Luokittelut voivat olla kattavia (complete) tai ei-kattavia (incomplete) poissulkevia (disjoint) tai osittain päällekkäisiä (overlapping) Henkilö Henkilö {complete, disjoint} Nainen Johtaja Nainen Mies Erillisin perustein muodostettuja osin päällekkäisiä aliluokkia Yhteen luokitteluperusteeseen perustuva kattava ja poissulkeva luokittelu 25

Luokittelu mallinnuksessa ja ohjelmoinnissa Kun reaalimaailmassa luokitellaan ilmiöitä, voidaan käyttää samanaikaisesti useita erilaisia luokitteluperusteita esim. sukupuoli, virka-asema, auton omistus, Monissa oliomenetelmissä ja oliokielissä ollaan kuitenkin paljon rajoittuneempia, mikä voi pakottaa kömpelöihin mallinnusratkaisuihin Tyypillisesti esim. ohjelmointikielissä olio ei voi olla usean luokan välitön ilmentymä 26

Luokittelu mallinnuksessa ja ohjelmoinnissa Henkilö Henkilö Nainen Johtaja Nainen Johtaja «instanceof» «instanceof» Naisjohtaja liisa Reaalimaailmassa olio voi olla usean luokan välitön ilmentymä liisa «instanceof» Oliokielissä tarvitaan usein esim. keinotekoinen kokoava yliluokka, koska olio ei voi olla usean luokan välitön ilmentymä 27

Moniperiytyminen (multiple inheritance) Tarkoittaa tilannetta, jossa luokka on useamman kuin yhden luokan välitön aliluokka Johtaja Sotilas Erityisesti toteutuksen moniperiytyminen voi aiheuttaa monikäsitteisyysongelmia Kenraali esim. kaksi signatuuriltaan samaa operaatiota kaikki olio-ohjelmointikielet eivät tarjoa (toteutuksen eli lauseiden ja lausekkeiden) moniperiytymistä esim. Javassa ei ole, C++:ssa on 28