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

Samankaltaiset tiedostot
Luokkakaavion laatiminen

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

Ohjelmistotekniikan menetelmät Luokkamallit ohjelmiston mallintamisessa Harri Laine 1

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

Ohjelmistojen mallintaminen Luokkakaaviot Harri Laine 1

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

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

Olioiden yhteistoiminta

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

Ohjelmistojen mallintaminen Olioiden yhteistyö Harri Laine 1

Ohjelmistojen mallintaminen, sekvenssikaaviot

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

Johdatus sovellussuunnitteluun

Johdatus sovellussuunnitteluun

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

Ohjelmistojen mallintaminen luokkamallin laatiminen

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

UML - unified modeling language - use cases

Luokkakohtaiset eli stattiset metodit ja attribuutit

Ohjelmistojen mallintaminen luokkamallin laatiminen

Johdatus sovellussuunnitteluun

Ohjelmistojen mallintaminen olioiden elinkaaret - tilakaavio Harri Laine 1

UML - unified modeling language

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

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

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

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

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

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

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

Olioperustaisuus (object oriented)

Mitä on periytyminen?

1. Tarkastellaan seuraavaa kaaviota

Analyysi, dynaaminen mallintaminen, yhteistoimintakaavio ja sekvenssikaavio

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Analyysi, dynaaminen mallintaminen, yhteistoimintakaavio ja sekvenssikaavio

Ohjelmistojen mallintaminen kertausta Harri Laine 1

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

1. Olio-ohjelmointi 1.1

Johdatus sovellussuunnitteluun osa 2

Ohjelmistotekniikan menetelmät, UML

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

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

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

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN

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

Kertaus: yleistys-erikoistus ja perintä

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

Ohjelmistotekniikan menetelmät, koe

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

Ohjelmistojen mallintaminen, mallintaminen ja UML

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

Ohjelmistojen mallintaminen. Luento 3, 9.11.

9. Periytyminen Javassa 9.1

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

Luokka- ja oliokaaviot

Olioiden yhteistyön mallintaminen

Yhteistoimintakaavio (Esimerkki)

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

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

Ohjelmistojen mallintaminen. Luento 7,

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

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

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Javan perusteita. Janne Käki

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

HELIA 1 (17) Outi Virkki Tiedonhallinta

Ohjelmistotekniikan menetelmät

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

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

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

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

Ohjelmistotekniikan menetelmät

3. Käsiteanalyysi ja käsitekaavio

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

Ohjelmistojen mallintaminen, kesä 2010

Ohjelmistotekniikan menetelmät, kevät 2008

Ohjelmistojen mallintaminen Unified Modeling Language (UML)

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

4. Olio-ohjelmoinista lyhyesti 4.1

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Analyysi on tulkkaamista

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

Ohjelmistojen suunnittelu

Ohjelmistojen mallintaminen, kertausta

Ohjelmistotekniikan menetelmät, kesä 2008

9. Periytyminen Javassa 9.1

UML- mallinnus: Tilakaavio

1. Käyttötapalähtöinen suunnittelu. Ohjelmistotuotanto. Käyttötapalähtöinen suunnittelu. Käyttötapalähtöinen suunnittelu

UML:n yleiskatsaus. UML:n osat:

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

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

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

Ohjelmistojen mallintaminen. Luento 6,

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton

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

Ohjelmistojen mallintaminen. Luento 4,

Helsingin yliopisto, TKTL Tietokantojen perusteet, k 2000 Tietokannan suunnittelusta Harri Laine 1

Transkriptio:

Luokkakaavion tarkoitus Järjestelmän tietosisällön kuvaaminen tiedot ja niiden väliset kytkennät järjestelmän tiedot kuvaavat kohdealueiden ilmiöitä, joten luokkakaavion tulisi määrittellä kohdealueen rakenne Luokkakaavion tarkoitus Ohjelman rakenteen kuvaaminen tiedot ja niiden väliset kytkennät tietojen yhteys toimintaan Olio-ohjelman idea on usein simuloida vastaavaa reaalimaailman (kohdealueen) ilmiötä, joten luokat löytyvät reaalimaailmaa analysoimalla kordealueen rakenteen mukaiset luokat muodostavat tällöin ohjelman luokkarakenteen ytimen Luokkakaavion laatiminen Kokonaisvaltainen lähestymistapa pyritään löytämään kerralla koko kohdealuetta kuvaava malli hankalaa, jos kohdealue on laaja ensin karkea yleiskuva sitten lisää yksityiskohtia Osista kokonaisuuteen jaetaan kokonaisuus osiin ja tehdään osakohtaisia malleja, jotka sitten yhdistetään kokonaismallisksi osa voisi olla käyttötapaus yksityiskohdista yleiskuvaan Luokkakaavion laatiminen Kartoita luokkaehdokkaita Karsi ehdokkaita Tunnista olioiden väliset yhteydet Täsmennä luokkakuvauksia määrittelemällä attribuutit Määrittele yhteyksiin liittyvät osallistumisrajoitteet. Liitä luokkiin palvelut. Varmista palvelujen ja tietosisällön yhteensopivuus Kartoita luokkaehdokkaita Laadi luettelo tarkasteltavan ilmiön kannalta keskeisistä kohteista tai ilmiöistä, jotka voisivat tulla kyseeseen luokkina tai olioina. osallistujat, toiminnan kohteet, toimintaan liittyvät tapahtumat, materiaalit, tuotteet ja välituotteet, toiminnalle edellytyksiä luovat asiat.. Kartoita luokkaehdokkaita Kartoituksen pohjana voi käyttää vapaamuotoista tekstikuvausta tarkasteltavasta ilmiöstä. Kuvauksesta alleviivattaan luokkaehdokkaita ja kerätään ne luetteloon. Luokkaehdokkaat esiintyvät kuvauksessa usein substantiiveina. Verbit voivat ilmaista yhteyksinä. Alustavaa karsintaa voi tehdä sen perusteella onko asia lainkaan oleellinen mallinnettavan ilmiön kannalta. Harri Laine 1

Karsi ehdokkaita Luetteloon saadut ehdokkaat käydään läpi ja arvioidaan voisiko ehdokas tulla kyseeseen luokkana. Liittyykö luokan ilmentymiin tietosisältöä, joka on välttämätöntä järjestelmän kannalta (yleensä oltava useita attribuutteja) Tarvitaanko tietoa ilmentymien olemassaolosta Onko asia riittävän tärkeä kohdealueen kannalta. Synomyymit karsitaan Karsintaa ja ehdokkaiden kartoitusta voidaan joutua tekemään iteratiivisesti. Ensimmäinen karsintakierros ei välttämättä tuota lopullista tulosta. Tunnista yhteydet Yhteyksiä (ilmentymien välillä) voi etsiä vapaamuotoisesta kuva-uksesta verbit, genetiivit, muut ilmaukset jotka kuvaavat kytkentää. Yhteyksienkin suhteen tulisi miettiä onko yhteys oleellinen tarkasteltavan ilmiön kannalta onko se rakenteellinen. Asia pitäisi esittää vain kertaalleen johdettavissa olevat yhteydet? Karsitaan tai merkitään Älä piilota yhteyksiä attribuuteiksi Määrittele attribuutit Attribuutteja saattaa löytyä vapaamuotoisesta kuvauksesta 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 Määrittele osallistumisrajoitteet Osallistumisrajoitteiden avulla ilmaistaan rakenteellisia sääntöjä. Säännöt eivät välttämättä tule esiin vapaamuotoisessa kuvauksessa vaan edellyttävät tarkempaa kohde-alueen analysointia. Yhteyden piilottaminen Sama asia kahteen kertaan osaton nimi Osasto Osaston nimi osasto Osasto osaston nimi osasto Osasto Osaston nimi osasto Osasto osaton nimi Harri Laine 2

Käyttötapaukset määrittelevät toiminnalliset vaatimukset järjestelmälle, mutta ne asettavat vaatimuksia myös järjestelmän tietosisällölle, koska toiminnot edellyttävät tietojen olemassaoloa Eräs tapa järjestelmän sisältöluokkien suunnitteluun onkin tehdä suunnittelu käyttötapauksittain ja sitten yhdistää käyttötapauskohtaiset mallit Lähtökohtana käyttötapaukset Mitä tietoja ja tietokokonaisuuksia tarvitaan käyttötapauksen hoitamiseksi? Jokaisen käyttötapauksen perusteella laaditaan käyttötapauskohtainen näkymä tarvittavista tiedoista, eli pelkästään käyttötapauksen tarpeet huomioon ottava luokkakaavio Näkymät yhdistetään sisällön kokonaismallin aikaansaamiseksi KT-1 KT-i KT-n Näkymä-1 Näkymä-i Näkymä-n Käyttötapauksittain sisältömallia muodostettaessa ainakin periaatteessa saadaan malliin mukaan kaikki käyttötapauksen tarvitsemat tiedot Käyttötapausmallin ja tietosisältömallin yhteensopivuuden varmistamiseksi voidaan käyttää riippuvuusmatriisia integrointi Koottu malli Riippuvuusmatriiseja: Luokat ja yhteydet / käyttötapaukset Matriisin alkiona riippuvuustieto: Luo, muuttaa, poistaa, käyttää Matriisit voidaan esittää myös attribuuttitasolla, jolloin näkyisi attribuuttien käsittely. Tällöin matriisit on kuitenkin syytä pilkkoa luokkakohtaisiksi Käyttötapaukset Uusi artikkeli Uusi artikkeliversio Tiedustelu artikkelin tilasta Lausunnonantajan valinta Lausunnon saapuminen Muistutus lausunnosta Puuttumaan jäänyt lausunto Valituksen käsittely Julkaisupäätöksen kirjaus Palautus korjattavaksi Julkaistavaksi hyväksymine Hylkääminen Viimeistellyn saapuminen Oikovedoksen lähettäminen Korjausten vastaanotto Eripainosten tilaus tietojen rekisteröinti Sisällysluettelo Vuosikertatiedot www-sivut Raportit Olioluokat Article L M K K K K K K M M M M M M M K K K K K Article version L L K M K K K M M M M M K Person X X X K K K K K K K K X K Reference K L M M M M K Journal L K K K K= Käyttää, L = Luo, M= Muuttaa, P= Poistaa, X=Luo tai muuttaa Harri Laine 3

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 ilmentymien hävitykseen Jos ilmentymän tietosisältö ei ole muuttumaton pitää löytyä käyttötapaus, jolla tietosisältöä voidaan muuttaa Jos osapuoli voidaan irroittaa yhteydestä täytyy tähän tarkoitukseen löytyä käyttötapaus Toisaalta jokaisen käyttötapauksen täytyy jollain tavoin liittyä sisältöluokkiin. Luokkia määrittelemällä luodaan luokitusjärjestelmä Eri menetelmät asettavat erilaisia vaatimuksia luokitusjärjestemälle joissakin edellytetään, että luokat ovat erillisiä (ei yhteisiä ilmentymiä) toisissa sallitaan päällekkäisyys (yhteiset ilmentymät) ssa luokka voidaan määritellä toisen luokan alaluokaksi esim. luokka on luokan alaluokka luokka on luokan alaluokka luokat auto, laiva ja lentokone ovat luokan kulkuväline alaluokkia Siitä, että luokka A on luokan B alaluokka seuraa, että jokainen A:n ilmentymä on myös B:n ilmentymä jokainen on myös tästä taas seuraa, että kaikki attribuutit, palvelut ja yhteydet, jotka on määritelty luokan B ilmentymille liittyvät myös A:n ilmentymiin. Jos lle on määritelty attribuutti Nimi, niin myös lla on automaattisesti Nimi-attribuutti Jos on määritelty osapuoleksi työsuhdeyhteyteen, myös voi olla osapuolena työsuhde yhteydessä. Tätä ilmiötä kutsutaan periytymiseksi (inheritance) Harri Laine 4

Periytymisessä yläluokkaan liitetyt attribuutit, palvelut ja yhteydet periytyvät alaluokalle Yläluokan ja alaluokan välinen riippuvuussuhde kuvataan kaaviossa: Huom. periytyminen on luokkien välistä määrittelyjen periytymistä - ilmentymät eivät peri mitään toisilta ilmentymiltä. Alaluokka Yläluokka Johtaja Alaluokkaan voidaan liittää yläluokalta perittyjen attribuuttien, palvelujen ja yhteyksien lisäksi omia attribuutteja, yhteyksiä ja palveluja lla on vastuualue ja alaisten määrä ominaisuudet, joita ei ole llä yleisesti vain lla voi olla oikeus käyttää edustustiliä lla voi olla alaisia 1 Johtaja vastuualue alaisten määrä 0..* Käyttöoikeus 1 alainen 0..* Edustustili Alaluokaan 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ä. 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ö Syrjäyttäminen on erityisesti olioohjelmoinnissa hyödyllinen tekniikka Olio-ohjelmoinnin merkittävimmät hyödyt tulevat esiin juuri syrjäyttämismahdollisuuden kautta muokattavat kirjastopalvelut yksinkertaisemmat ohjelmat Harri Laine 5

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) Järjestelmää mallinnettaessa luokkahierarkiasta on eniten hyötyä sääntöjen ilmaisemisessa kuvauksen ekonoomisuudessa (ei tarvitse toistaa samoja asioita useassa luokassa) kenraali sotilas Esimerkki säännöistä: Autolla täytyy olla omistaja. Omistaja voi olla yritys tai. Ellei yläluokkaa käytettäisi mahdollinen omistaja 1..* 0..* auto yritys 0..* 0..* yritysomistus auto 0..* omistus yritys 0..* Aliluokkia voidaan muodostaa monin erilaisin perustein erillisin perustein muodostettuja aliluokkia Samaan luokitteluperusteeseen perustuvat poissulkevat luokat overlaps ehto mies Harri Laine 6

Kun reaalimaailmassa luokitellaan ilmiöitä voidaan käyttää useita erilaisia luokitteluperusteita samanaikaisesti: sukupuoli, kengännumero, virka-asema, auton omistus, jne. monissa oliomenetelmissä ja olioohjelmointikielissä ollaan paljon rajoittuneempia overlaps reaalimaailmassa olio voi olla usean luokan välitön ilmentymä Liisa nais olio-ohjelmointikielissä olio ei yleensä voi olla usean luokan välitön ilmentymä Liisa oliokielissä olio on vain yhden luokan välitön ilmentymä Liisa Edellinen tilanne johtuu siitä, että olioohjelmoinnissa, olio on esiteltävä johonkin (yhteen) luokkaan kuuluvaksi ja tämä luokka perii vain yläluokkiensa ominaisuudet Kohdealueen analyysin kannalta rakenne on kömpelö Olioiden yhteistoiminta: Oliojärjestelmän toiminta perustuu olioiden yhteistyöhön. Olioiden yhteistyön selvittäminen on kiinteästi sidoksissa olioiden palveluiden määrittelyyn, sillä yhteistyö toteutuu palvelujen kautta. Yhteistoimintakuvauksilla kuvataan, miten palveluja käytetään. Olioiden yhteistoiminnan kuvaaminen on ohjelmiston suunnitteluvaiheen tehtävä Yhteistyökuvauksia voidaan määrittelyvaiheessa käyttää liiketoiminnan kuvaamiseen Harri Laine 7

UML esittelee kaksi tekniikkaa yhteistoiminnan kuvaamiseen. n (yhteistyöpolut) (sequence diagram), jossa keskitytään erityisesti kuvaamaan operaatioiden tapahtumajärjestystä ja toimintaan liittyvien viestien kulkua. n toinen ulottuvuus on aika. Yhteistyörakennekaavion (collaboration diagram), jossa keskitytään kuvaaman, sitä miten yhteistyö hyödyntää olioiden välisiä kytkentöjä kuvaa: olion (myös järjestelmä on olio) palvelun suoritukseen liittyvän olioiden yhteistyön mitä avustavia olioita palvelun suoritukseen osallistuu ja mitä näiden palveluja käytetään missä järjestyksessä avustavien olioiden palveluita käytetään aloitus viesti operaatio / palvelu palkin pituus kuvaa palvelun kestoa olio1:luokka [ehto] viesti (parametrit) olio2:luokka nimeää käytettävän palvelun aika Viestit ovat yleensä palvelujen kutsuja (palvelupyyntöjä) = pavelun nimi (parametrit) käytännössä metodikutsu oliohjelmassa ehto ei ole välttämätön palveluun liittyvä paluunuoli jätetään yleensä piirtämättä vaikka palaute saataisiinkin (kaavio tulee näin yksinkertaisemmaksi) Esimerkki class A { B oliob; C olioc; D oliod; public int doit() { oliob.assist1(); olioc.assist2(oliod); } class B { E olioe; public void assist1() { olioe.dosomething(); } class C { public void assist2(d od) { od.serviced()} doit olioa:a oliob:b olioe:e olioc:c oliod:d assist1() dosomething assist2(oliod); serviced Harri Laine 8