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

Samankaltaiset tiedostot
Olioperustaisuus (object oriented)

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

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

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

Ohjelmistotekniikan menetelmät

Ohjelmistotekniikan menetelmät

Ohjelmistotekniikan menetelmät, UML

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

Ohjelmistojen mallintaminen Unified Modeling Language (UML)

UML - unified modeling language

Ohjelmistojen mallintaminen

Ohjelmistojen mallintaminen Olioperustainen ohjelmistomalli Harri Laine 1

Ohjelmistojen mallintaminen luokkamallin laatiminen

Ohjelmistojen mallintaminen kertausta Harri Laine 1

Ohjelmistojen mallintaminen luokkamallin laatiminen

Ohjelmistojen mallintaminen Luokkakaaviot Harri Laine 1

Johdatus sovellussuunnitteluun

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

Ohjelmistojen mallintaminen Olioiden yhteistyö Harri Laine 1

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

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

Ohjelmistotekniikan menetelmät Luokkamallit ohjelmiston mallintamisessa Harri Laine 1

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

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

UML Luokkakaavio 14:41

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

Ohjelmistotekniikan menetelmät, mallintaminen ja UML

Luokkakaavion laatiminen

Olio-ohjelmointi Javalla

UML ja luokkien väliset suhteet

Ohjelmistojen mallintaminen, mallintaminen ja UML

2. Olio-ohjelmoinnin perusteita 2.1

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

Unified Modeling Language

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

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

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

9. Periytyminen Javassa 9.1

Ohjelmistojen mallintaminen. Luento 3, 9.11.

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

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

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

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

Mikä yhteyssuhde on?

Javan perusteita. Janne Käki

Johdatus sovellussuunnitteluun osa 2

Luokka- ja oliokaaviot

Ohjelmistojen mallintaminen olioiden elinkaaret - tilakaavio Harri Laine 1

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

Ohjelmistojen mallintaminen, sekvenssikaaviot

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

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN

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

9. Periytyminen Javassa 9.1

YHTEYSSUHDE (assosiation)

UML:n yleiskatsaus. UML:n osat:

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

KOHDELUOKAN MÄÄRITTELY

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

1. Olio-ohjelmointi 1.1

15. Ohjelmoinnin tekniikkaa 15.1

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

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

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

15. Ohjelmoinnin tekniikkaa 15.1

2. Olio-ohjelmoinnin perusteita 2.1

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

Metodien tekeminen Javalla

4. Olio-ohjelmoinista lyhyesti 4.1

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

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

Luento 3 Tietokannan tietosisällön suunnittelu

Johdatus sovellussuunnitteluun, s99, osa1 Helsingin yliopisto;/tktl Harri Laine 1. Johdatus sovellussuunnitteluun

Johdatus sovellussuunnitteluun, s99, osa1 Helsingin yliopisto;/tktl Harri Laine 1

Luokat ja oliot. Ville Sundberg

Paikkatiedon mallinnus Dokumentoinnin ymmärtäminen. Lassi Lehto

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Rajapinta (interface)

1. Omat operaatiot 1.1

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

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

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

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

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

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Java kahdessa tunnissa. Jyry Suvilehto

2. Olio-ohjelmoinista lyhyesti 2.1

Tilakaaviot, sekvenssikaaviot (Haikala, Märijärvi ss , )

UML metamallina. Seminaariesitelmä Minna Majuri HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

Johdatus sovellussuunnitteluun. Johdatus sovellussuunnitteluun

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

sovellussuunnitteluun

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

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Mallinnus UML-yleiskatsaus

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

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

Ohjelmistotuotanto, s /3/2003

Transkriptio:

DO NOT PRINT THIS DOCUMENT Olioperustainen ohjelmistokehitys Olioperustaisuus (object oriented) järjestelmä (system) muodostuu joukosta olioita (object), jotka yhteistyössä toimien tuottavat järjestelmän palvelut. Olio on kokonaisuus (entity), joka kykenee suorittamaan omaan tietämykseensä (information contents) perustuvia palveluita (service / operation / method) Olioperustainen ohjelmistokehitys Olio voidaan nähdä abstraktiona, jota voidaan soveltaa eri tilanteissa eri tavoin: Olio-ohjelmoinnissa: ohjelman suoritus etenee tietokoneen sisuksissa toimivien tietojenkäsittelyolioiden yhteistyön tuloksena olioiden palvelut ovat suorituksen askelia Tietojärjestelmän palvelut saadaan aikaan suorittamalla ohjelmia Tietojärjestelmän palvelut ja olio-ohjelmointi tietojärjestelmä Palvelu tuottaa Ohjelman suoritus toteutuu Ohjelmaolioiden yhteistyönä Harri Laine 1

Olioiden yhteistyö ohjelmassa Ohjaa suoritusta Olio 1 Palvelu a Olio 2 Palvelu d tietää Käyttää apuna Olio 3 Palvelu b Olio 4 Palvelu c Tietojärjestelmän palvelun suoritus ohjelmassa tj Ohjaa suoritusta Palvelu a Olio 1 tietää Palvelu b Olio 3 Palvelu d Olio 2 Käyttää apuna Palvelu c Olio 4 Liiketoiminta olioiden yhteistyönä Toisena ääripäänä liiketoiminta voidaan myös hahmottaa liiketoiminnan osapuolten (jälleen olioita) välisenä yhteistyönä - yleensä liiketoiminnan osapuolina ovat organisaatioyksiköt ja henkilöt Harri Laine 2

Liiketoiminnan osapuolten yhteistyötä Vastaanota tilaus Virkailija Asiakas toimitus varasto Tietojärjestelmä avustavana oliona Vastaanota tilaus Virkailija Asiakas toimitus varasto varastojärjestelmä käyttää Tilauksen vastaanotto Tee kuormakirja Olioperustainen kuvaaminen Tietojärjestelmä ja sen ympäristö voidaan siis hahmottaa erilaisen olioiden yhteistyön avulla. Miten tämä sitten pitäisi kuvata? Mikä on oleellista ja välttämätöntä Eri menetelmät korostavat eri asioita, tärkeänä voidaan pitää: oliorakennetta, yhteistyötä, olioiden elinkaarta, järjestelmän käyttöä, tiedon kulkua, Kuvausjärjestelmät enimmäkseen graafisia: yksi kuva kertoo enemmän kuin 1000 sanaa Harri Laine 3

UML UML (unified modeling language) on kokoelma käsitteitä ja kaaviotekniikoita oliokeskeiseen järjestelmäkehitykseen Yhdistelmä hyviksi havaituista (of best practices) tekniikoista OMT+Booch+OOSE Rumbaugh, Booch, Jacobson http://www.rational.com/ UML Kehitetty Rational Software Corp. toimesta 1996 -> OMG:n (Object Management Group) valinta kuvaustekniikaksi (viimeisin versio 1.3 heinäkuu 99) OMG on olioteknologian kehittämiseen tähtäävä yritysten perustama organisaatio - tuotoksia mm. CORBA-teknologia Useat CASE- välineet (Computer Aided Software Engineering) tukevat tai ovat siirtymässä tukemaan UML UML sisältää: metamallin, jolla määritellään varsinainen kuvausjärjestelmä, UML-mallit peruskäsitteet, käsitteiden väliset yhteydet, säännöt, laajennettavuus kokoelman graafisia kuvaustekniikoita eri tarkoituksiin Harri Laine 4

Kuvaustekniikka ja metamalli tuottaa Tekniikan laatiminen ohjaa metamalli Mallin periaatteet ja laajennettavuus Kuvaustekniikka Käsitteet ja esitystapa ohjaa Kuvauksen laatiminen tuottaa kuvaus UML-tekniikat UML-kuvaustekniikat Käyttötapausmalli (use case model) kuvaa mitä järjestelmällä tehdään Luokkakaavio ja oliokaavio (class/object diagram) tiedot ja mitä niille/niillä tehdään Tilakaavio (statechart diagram) olioiden elinkaaret tilakoneina UML-tekniikat Olioiden yhteistyökaaviot palveluketjut (sequence diagram) yhteistyörakenteet (collaboration diagram) Kummatkin kuvaavat sitä kuinka toiminta hoidetaan olioiden välisenä yhteistyönä. Toimintoketjuissa korostuu olioiden palvelujen hyväksikäyttö. Yhteistyörakenteissa olioiden välisten kytkentöjen hyödyntäminen yhteistyön perustana. Aktiviteettikaavio (activity diagram) kontrollin kulku prosessissa tai ohjelman operaatiossa haarautumat, workflow Harri Laine 5

UML-tekniikat Komponenttikaavio (component diagram) ohjelmiston koostuminen komponenteista Sijoittelukaavio (deployment diagram) ohjelmiston osien sijoittuminen tietoverkkoon Molemmat voidaan ajatella erikoistuneisiin olioihin perustuvina oliokaavioina Luokka- ja oliokaaviot Luokka- ja oliokaavioilla kuvataan ohjelmiston / järjestelmän koostuminen olioista, olioiden tietämys, niiden tarjoamat palvelut sekä olioiden väliset yhteydet Olio tiedon ja sen käsittelyyn liittyvien palveluiden muodostama kokonaisuus olio pitää sisällään tietoja, joita olion palvelut käsittelevät / hyödyntävät Puhtaassa olio-ohjelmoinnissa olion tietoihin pääse käsiksi vain olion palveluiden kautta Luokka- ja oliokaaviot (Olio)luokka (class, object class) on samankaltaisten olioiden malli Saman mallin mukaiset oliot kuuluvat samaan luokkaan. Ne ovat kyseisen luokan ilmentymiä (instance). Luokkakuvaus määrittelee luokan. Harri Laine 6

Reaalimaailma ja luokka luokka ilmentymät eläin määrittelee Eläin on.. Ominaisuuksia: paino, väri, sukupuoli,... Toimintoja: syöminen, liikkuminen,... luokkakuvaus Olio-ohjelma ja luokka public class elain { int elain_numero; String laji; Color vari; float paino; Luokkakuvaus ohjelmointikielellä public elain( ){ } public setpaino( ){ } public float getpaino(){ } } elain otus = new elain(.); elain toinen = new elain(.); ilmentymä 1 ilmentymä 2 Luokkakuvaus UML:llä elain elain_numero: int laji: String vari: Color paino: float * * laji vari 1 1 String +elain( ) +setpaino( ) +getpaino(): float Color otus: elain Instance of Instance of toinen: elain Pitäisi oikeastaan poistaa täältä toisteisina Harri Laine 7

Ilmentymän kuvaaminen Otus1: elain elain_numero=12345 laji=norsu vari=harmaa paino=2300 Otus2: elain elain_numero=12346 laji=aasi vari=ruskea paino=220 Ilmentymiä esitetään yleensä vain esimerkkeinä Luokkakuvaus UML:ssä välttämätön nimi attribuutit palvelut mukana tarvittaessa Olioiden tietämys (tietosisältö) kuvataan attribuutteina Attribuutista voidaan esittää nimi (välttämätön) tietotyyppi arvojen määrä (hakasuluissa, alaraja..yläraja, *=epämääräisen monta) näkyvyys vain ohjelmointiläheisessä kuvauksessa oletusarvo muita määreitä Harri Laine 8

Näkyvyys (visibility) on esim. C++ ja Javaohjelmointikielissä käytetty tekniikka, jolla säädellään luokkakuvauksessa esitellyn muuttujan tai metodin (palvelun) käyttöä. private (#) rajaa käytön luokan omiin palveluihin protected (-) sallii käytön luokan aliluokissa määriteltävissä palveluissa puhdasoppisesti ajateltuna kaikkien attribuuttien tulisi olla näkyvyydeltään protected public (+) sallii käytön myös luokan ulkopuolelta UML käyttää yllä sulkeissa olevaa merkkiä attribuutin nimen edessä osoittamaan näkyvyyden pankkitili #tilinumero #tilin_tila -tapahtumat[*] +viimeeksi_käytetty_pvm Attribuutit tilinumero ja tilin_tila ovat käytettävissä suoraan luokan pankkitili palveluissa (esim. annatilinumero,annatilityyppi, lopeta, sulje) Moniarvoiseen attribuuttiin tapahtumat voi viitata pankkitilin aliluokissa esim. luokassa käyttötili. Atribuuttiin viimeeksi_käytetty voi viitata myös ulkopuolisten luokien palveluissa UML:ssä on mahdollista määritellä luokka-attribuutteja (class attribute), luokkakohtainen arvo ilmaistaan alleviivaamalla attribuutin nimi ilmentymäattribuutteja (instance attribute) arvo erikseen jokaisessa luokan ilmentymässä henkilötunnus #tarkistusmerkit[31] #päiväys #jnro #tarkmerkki Luokkakohtainen tarkistusmerkkitaulukko Ilmentymäkohtaisia osasia Harri Laine 9

Attribuutin arvo on jotain tyyppiä. Tyyppi ilmaistaan antamalla se nimen perässä kaksoispisteellä erotettuna päiväys:date jnro:int tarkastusmerkki: char Arvo voi olla perustietotyyppin arvo UML ei ota kantaa tietotyyppeihin vaan sallii mitä tahansa perustietotyyppejä yllä int ja char Olio, jolloin tietotyyppinä on olion luokka Olioarvoinen attribuutti muodostaa yhteyden attribuutin sisältävän olion ja attribuutin arvona olevan olion välille. Tällaiset yhteydet pitäisi tuoda selkeästi esiin ja kuvata omalla tekniikallaan (luokkia yhdistävinä viivoina) Jos attribuutin arvona on olio tämä tulisi esittää attribuuttimäärittelyn yhteydessä vain mikäli olion luokka on perustietotyyppimäinen, esim Date, String, Color, Point, päiväys:date nimi:string Attribuuttimäärittelyyn voi liittää muiden määrittelyjen jälkeen kaarisulkeissa {...} lisämääreitä UML tarjoaa valmiina lisämääreet changeable (oletus) arvon muuttamiseen ei ole rajoitteita frozen arvoa ei voi muuttaa addonly moniarvoiselle attribuutille voi vain lisätä arvoja ei koskaan poistaa Harri Laine 10

UML-mallin soveltaja voi ottaa käyttöön omia lisämääreitä. Hyödyllisiä voisivat olla id ulkoinen tunniste, attribuutin arvo ei voi olla sama kahdella eri ilmentymällä pankkitili tilinumero {frozen, id} Tilinumeroa ei voi muuttaa, se yksilöi tilit ja Java ohjelma UML-luokka vastaa Java-luokkaa. Static-muuttujat vastaavat luokka-attribuutteja muut luokassa määritellyt muuttujat vastaavat ilmentymäattribuutteja Luokan palvelut Palvelusta UML:ssä voidaan kuvata näkyvyys - kuten attribuuttien kohdalla nimi (välttämätön) parametrit paluuarvon tyyppi muut määreet [näkyvyys] nimi [(parametrit)] [:paluuarvon tyyppi] [{muut määreet}] parametrimäärittelyn muoto on [suunta] nimi: tyyppi [= oletusarvo ] Harri Laine 11

Luokan palvelut Esim. henkilötunnus #tarkistusmerkit[31] #päiväys #jnro #tarkmerkki +tostring():string +isok():boolean +getbirthdate():date +getsex():int Olioiden väliset yhteydet Olioiden (ilmentymien) välisiä rakenteellisia kytkentöjä kutsutaan yhteyksiksi (association) Ohjelmakoodissa rakenteellinen kytkentä ilmenee siten, että luokalla on olioarvoinen attribuutti tai jokin epäsuora viittaus toiseen olioon. Olioiden väliset yhteydet pankkitili Omistaja[*]:Asiakas Tarkoittaa, että pankkitili-olioiden ja asiakas-olioiden välillä on kytkentä, joka voidaan kuvata seuraavasti: pankkitili Omistaja-> * asiakas Yhden tilin voi omistaa useita asiakkaita Harri Laine 12

Olioiden väliset yhteydet Oletetaan, että Java-ohjelmassa pankkitilin omistaja olisi määritelty seuraavasti Asiakas[] Omistaja = new Asiakas[3]; eli tilillä voi olla enintään 3 omistajaa. Pankkitilillä täytyy aina olla omistaja (tämä on Java-ohjelmassa tarkistettava ohjelmassa) Ylläoleva esitettäisiin: pankkitili Omistaja-> 1..3 asiakas Olioiden väliset yhteydet Edellä on kyseessä suunnattu yhteys: pankkitilistä päästään asiakkaaseen, mutta asiakkaasta ei päästä pankkitiliin, eli ilmentymätasolla tilanne olisi 1234:pankkitili omistaja omistaja Aku Ankka:Asiakas Ines Ankka:Asiakas Olioiden väliset yhteydet Jos haluttaisiin yhteys myös toiseen suuntaan (ja edelleen taulukoilla), voisimme määritellä asiakkaalle attribuutin pankkitili[] tili=new pankkitili[10]; pankkitili Omistaja-> 1..3 asiakas 0..10 <-Tili Koska asiakkaalla ei välttämättä ole yhtään tiliä Harri Laine 13

Olioiden väliset yhteydet Ilmentymätasolla tilanne voisi olla 1235:pankkitili 1236:pankkitili 1234:pankkitili tili tili tili tili omistaja omistaja 4567:pankkitili tili Aku Ankka:Asiakas Ines Ankka:Asiakas Olioiden väliset yhteydet Kun huomaamme, että kyseessä tili ja omistaja yhteydet kuvaavat samaa asiaa voimme yhdistää ne. Ilmentymätasolla mikään ei muutu pankkitili 0..10 Omistaja-> 1..3 asiakas <-Tili Harri Laine 14