Ohjelmistojen mallintaminen luokkamallin laatiminen

Samankaltaiset tiedostot
Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

Ohjelmistojen mallintaminen luokkamallin laatiminen

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

Ohjelmistotekniikan menetelmät Luokkamallit ohjelmiston mallintamisessa Harri Laine 1

Ohjelmistotekniikan menetelmät

Ohjelmistotekniikan menetelmät

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

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

Olioperustaisuus (object oriented)

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

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

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

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

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

Luokkakaavion laatiminen

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

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

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

Ohjelmistojen mallintaminen Luokkakaaviot Harri Laine 1

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

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

Luokkakohtaiset eli stattiset metodit ja attribuutit

UML Luokkakaavio 14:41

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

UML - unified modeling language

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

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

Ohjelmistojen mallintaminen kertausta Harri Laine 1

Ohjelmistotekniikan menetelmät, kesä 2008

3. Käsiteanalyysi ja käsitekaavio

Ohjelmistotekniikan menetelmät, kevät 2008

Olio-ohjelmointi Javalla

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

Ohjelmistojen mallintaminen. Luento 3, 9.11.

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

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

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

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

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

Ohjelmistojen mallintaminen, kesä 2009

Ohjelmistotekniikan menetelmät, UML

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

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

9. Periytyminen Javassa 9.1

UML ja luokkien väliset suhteet

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

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

Ohjelmistojen mallintaminen, kertausta

Ohjelmistojen mallintaminen, kesä 2010

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

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

Luokka- ja oliokaaviot

Ohjelmistojen mallintaminen, sekvenssikaaviot

KOHDELUOKAN MÄÄRITTELY

Ohjelmistojen mallintaminen Unified Modeling Language (UML)

Johdatus sovellussuunnitteluun osa 2

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

Ohjelmistotekniikan menetelmät, koe

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN

Metodien tekeminen Javalla

Ohjelmistojen mallintaminen, mallintaminen ja UML

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

Mikä yhteyssuhde on?

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

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

Javan perusteita. Janne Käki

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Oliot viestivät metodeja kutsuen

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

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

19. Unified Modeling Language (UML)

2. Olio-ohjelmoinnin perusteita 2.1

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

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

Paikkatiedon mallinnus Dokumentoinnin ymmärtäminen. Lassi Lehto

HELIA 1 (17) Outi Virkki Tiedonhallinta

UML- mallinnus: Tilakaavio

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

9. Periytyminen Javassa 9.1

Ohjelmistotekniikan menetelmät, toteutuksesta ja testauksesta

Ohjelmistojen mallintaminen. Luento 3,

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

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

POLKU LUOKKAKAAVIOISTA TAULUJEN TOTEUTUKSEEN

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Luokat ja oliot. Ville Sundberg

Mitä on periytyminen?

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

2. Olio-ohjelmoinnin perusteita 2.1

Analyysi, dynaaminen mallintaminen, yhteistoimintakaavio ja sekvenssikaavio

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

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

Ohjelmistojen mallintaminen. Luento 6,

Ohjelmistojen mallintaminen Olioiden yhteistyö Harri Laine 1

Transkriptio:

582104 Ohjelmistojen mallintaminen 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

Perussanasto Luettelo organisaation toiminnan kannalta keskeisistä käsitteistä ja niiden määritelmistä Voidaan esittää Koko organisaatiolle liiketoimintatason sanasto Kullekin kohdealueelle tarkemmin ja liiketoimintatason sanastoa laajentaen Auttaa luokkamallin laatimisessa Olioiden, olioiden välisten suhteiden ja olioluokkien löytäminen 3

Liiketoimintatason luokkamalli Liiketoiminnalliset oliot (business entity) Vain organisaation päätoiminnallisuus ja peruskäsitteet Ei sisällä suunnittelu- eikä toteutustason käsitteitä (esim. käyttöliittymä- tai tietokantayhteysluokkia) Olioiden väliset yhteydet (association) Osallistumisrajoitteet (multiplicity) Koosteisuus (aggregation, composition) Yleistyssuhteet (generalizations) eli periytymishierarkia Ns. POJO-malli (Plain Ordinary Java Objects) 4

Luokkakaaviot UML:ssä Luokkakaavioilla kuvataan Ohjelmiston tai muun järjestelmän rakenne Olioiden tietosisältö Olioiden ja olioluokkien väliset suhteet Olioiden tarjoamat palvelut 5

Yhteysviivatyypeistä Erilaisia viivatyyppejä käytetään merkitsemään erilaisia asioita Assosiaatio, riippuvuus, yleistys Yhteystyypin valinta kertoo painotuksesta Kaavioiden tehtävänä parantaa ihmisten välistä kommunikaatiota 6

Luokkasymbolin osat 7

Luokan ilmentymän (olion) kuvaaminen Ilmentymäviitteessä esitetään alleviivattuna joko Ilmentymän nimi/tunniste Luokan nimi Molemmat Alemmassa osassa annetaan ilmentymän attribuuttien arvot Ilmentymiä käytetään yleensä vain esimerkkeinä 8

Kirahvi (Giraffa camelopardalis) Korkein maanisäkäs. Uroksen korkeus on 4,8 5,5 metriä ja paino jopa 900 kiloa. Kaulanikamia on seitsemän kuten muillakin nisäkkäillä ja niiden pituus on noin 40 cm. Kirahvin turkissa on vaalealla pohjalla eri kokoisia ja muotoisia läiskiä, joiden väri vaihtelee oranssista lähes mustaan. Jokaisen yksilön kuviointi on erilainen. Kirahvi voi elää luonnossa noin 25- vuotiaaksi, tavallisesti elämänkaaren pituus on noin 15 20 vuotta. [Wikipedia] 9

Luokan attribuutit Kuvaavat olioiden tietosisällön muodon Attribuutista voidaan esittää Nimi (välttämätön) Tietotyyppi (String, Date, int, Kirahvi). Arvojen lukumäärä (multiplicity) Oletusarvona 1, epämääräisen monta = * Annetaan hakasuluissa, [5..*] Näkyvyys (visibility) Oletusarvo Muita määreitä 10

Attribuutin tyyppi ja arvo Attribuutin arvolla on tyyppi Tyyppi erotetaan attribuutin nimestä kaksoispisteellä (vrt. ilmentymän esittäminen) pvm: Date tai merkki: char Arvo voi olla perustietotyypin arvo, vaikkapa int UML ei rajoita perustietotyyppejä Olio, jolloin tietotyyppinä on olion luokka Olioarvoiset attribuutit esitetään tässä yhteydessä vain, jos olion luokka on perustietotyyppimäinen. String, Date, Color, Point Muutoin kyseessä on yhteys (association) 11

Attribuuttilajit ja lisämääreet Attribuutit ovat yleensä ilmentymäattribuutteja (instance attribute) Jokaisella luokan ilmentymällä on oma arvonsa UML:ssä myös luokka-attribuutteja (class attribute) Attribuutilla luokkakohtainen arvo Ilmaistaan alleviivaamalla attribuutin nimi Esim. Eläinten lukumäärän laskeminen Attribuutille voi antaa kaarisulkeissa { } lisämääreitä UML:ssä valmiina, esim. Frozen Mallintaja voi käyttää myös omia lisämääreitä 12

Näkyvyysmääreet Tekniikka attribuutin tai operaation käytön rajoittamiseen Merkitään erikoismerkillä tai ikonilla nimen eteen Vaihtoehdot: Private (-) sallii käytön vain luokan omissa operaatioissa Protected (#) sallii käytön myös luokan aliluokissa määriteltävissä operaatioissa Package (~) sallii käytön myös muissa saman paketin luokissa määriteltävissä operaatioissa Public (+) sallii käytön kaikkialla Käytetään usein vain ohjelmointiläheisessä kuvauksessa 13

Esimerkki: erilaisia attribuutteja Luokka-attribuutti seurvapaanro Näkyvyyssäännöt Private (-) Protected (#) Package (~) Public (+) Tietotyypit Int, String, decimal, Date Lisämääreet {frozen} 14

Esimerkki: erilaisia attribuutteja Luokkakohtainen seurvapaanro kertoo seuraavan vapaan tilinumeron Protected-määreet ovat käytettävissä tämän luokan ja aliluokkien operaatioissa Tilinumero:a ei voi muuttaa olion luonnin jälkeen 15

Esimerkki: erilaisia attribuutteja Tapahtumat on moniarvoinen attribuutti, tyyppi jätetty määrittelemättä Attribuutteihin tapahtumat ja saldo voi viitata vain luokan omissa operaatioissa Attribuuttiin valuuttakoodi voi viitata kaikissa niissä luokissa, jotka sijaitsevassa samassa pakkauksessa kuin tämä luokka 16

Attribuutit: UML ja Java UML-luokka vastaa Javan luokkaa Javan staattiset kentät (static field) vastaavat luokka-attribuutteja Muut Java-luokassa määritellyt kentät vastaavat ilmentymäattribuutteja UML:n näkyvyysmääreet vastaavat varsin hyvin Javan modifier-määreitä UML:n lisämääreet ({frozen}) saatetaan joutua toteuttamaan itse Javasta löytyy määreitä, jotka jäävät UML:ssä mallintajan kirjoitettavaksi (synchronized, strictfp) 17

Yhteydet (association) Yhteydet merkitään luokkakaavioon luokkien välisinä viivoina tai nuolina Yhteys merkitsee kyseisten luokkien ilmentymien välistä suhdetta Olioiden väliset yhteydet toteutetaan ohjelmakoodissa olioarvoisena attribuuttina.. Tai jotain muuta epäsuoraa, mutta pysyväisluonteista viittausta käyttäen 18

Moniarvoisuusmääreet (multiplicity) Kertoo, moniko yhteysluokan ilmentymä yhteyteen liittyy Esim. 1, *, 0..1 tai 1..* Alaraja 0 kertoo yhteyden olevan valinnainen Yläraja * kertoo yhteyksiä voivan olevan määrittelemätötömästi Lyhennysmerkinnät 1=1..1 ja * = 0..* 19

Esimerkki moniarvoisuusmääreestä Määritellään Java-ohjelmassa Pankkitili-luokan omistus-attribuutti seuraavasti Asiakas[] omitus = new Asiakas[3]; Tarkoittaen, että pankkitilillä voi olla korkeintaan kolme omistajaa Vaaditaan lisäksi, että pankkitilillä on oltava vähintään yksi omistaja Tämä ilmaistaan UML:llä näin: 20

Yhteyden navigoituvuus Yhteyskuvauksiin liitetty nuoli ilmaisee, että kyseessä on suunnattu yhteys Pankkitili tuntee omistajansa, mutta omistaja ei muista tilejään Tarvittaessa yhteydet voidaan suunnata molemminsuuntaisiksi 21

Esimerkki oliokaaviona 22

Yhteyksien yhdistäminen ja nimeäminen Ilmentymätasolla navigoitavat yhteydet ovat aina kaksisuuntaisia. Tällöin yhteydet voidaan yhdistää: Yhteydelle voi antaa nimen molempiin suuntiin Yhteyttä ei ole pakollista nimetä Nuoli yhteyden nimessä merkitsee lukusuunnan 23

Roolinimet Roolinimiä voidaan käyttää yhteysnimien lisäksi Esim. tili, omistaja Roolinimi voidaan [joskus] johtaa ohjelmakoodista, yhteyden toteuttavan kentän nimestä Roolinimi merkitään yhteyden kohteen päähän 24

Yhteyksien kuvaaminen eri abstraktiotasoilla Luokkia korkealla abstraktion tasolla kuvattaessa voimme jättää attribuutit ja/tai operaatiot merkitsemättä Vastaavasti, navigointimahdollisuus voidaan pudottaa pois Yhteysviivan kummassakaan päässä ei merkitä nuolenkärkeä 25

Yhteyksien kuvaamisen abstrahointi Navigointimahdollisuus jätetty esittämättä: Tämä tarkoittaa, että navigoiminen on mahdollista kumpaankin suuntaan Nuolenpää omistajasta suuntaan pankkitili Tämä kuvaa sveitsiläistä pankkitiliä omistaja tietää tilinsä, mutta tili ei omistajaansa. 26

Yhteys samaan luokkaan Molemmat yhteyden osapuolina olevat oliot voivat kuulua samaan luokkaan Esimerkki: työntekijällä on vain yksi välitön esimies Esimiehellä taas n alaista Ylimmällä päälliköllä ei ole esimiestä 27

Esimies-alainen suhde oliokaaviona 28

Ilmentymien järjestys Yhteyteen voidaan liittää järjestysmääre ilmaisemaan, että olioon yhteydessä olevien olioiden joukko on jollain perusteella järjestetty Esimerkki: kirjan kirjoittajat on järjestetty 29

Operaatioiden määritteleminen UML:ssä Operaatioille annettavat tiedot Näkyvyys (kuten attribuuteille) Nimi (ainut pakollinen osa) Parametrit Paluuarvon tyyppi Muut määreet Syntaksi (hakasuluilla merkitään optionaalinen osuus) [näkyvyys] nimi [(parametrit)] [: paluuarvon tyyppi] [{muut määreet}] l parametrimäärittelyn muoto on l[suunta] nimi: tyyppi [= oletusarvo] 30

Henkilötunnus-luokan attribuutit ja operaatiot Henkilötunnusta mallintavalla luokalla on neljä julkista operaatiota Yksi operaatioista on konstruktori Operaatio getbirthdate palauttaa Date-tyyppisen olion Konstruktorille annetaan parametrina henkilötunnus merkkijonona 31

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 32

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 33

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 34

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 35

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! 36

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 37

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 38

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) 39

Riippuvuusmatriisi 40

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 41

Kysymyksiä? 42