Olioperustaisuus (object oriented)

Samankaltaiset tiedostot
Johdatus sovellussuunnitteluun, s99, osa2 Helsingin yliopisto;/tktl Harri Laine 1. 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, UML

Ohjelmistotekniikan menetelmät

Ohjelmistotekniikan menetelmät

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

Ohjelmistojen mallintaminen Unified Modeling Language (UML)

UML - unified modeling language

Ohjelmistojen mallintaminen Olioperustainen ohjelmistomalli Harri Laine 1

Ohjelmistojen mallintaminen luokkamallin laatiminen

Ohjelmistojen mallintaminen

Ohjelmistojen mallintaminen kertausta Harri Laine 1

Ohjelmistojen mallintaminen luokkamallin laatiminen

Johdatus sovellussuunnitteluun

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

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

Ohjelmistojen mallintaminen Olioiden yhteistyö Harri Laine 1

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

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

Ohjelmistotekniikan menetelmät, mallintaminen ja UML

Ohjelmistotekniikan menetelmät Luokkamallit ohjelmiston mallintamisessa Harri Laine 1

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

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

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

15. Ohjelmoinnin tekniikkaa 15.1

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

Ohjelmistojen mallintaminen olioiden elinkaaret - tilakaavio Harri Laine 1

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

Luokat ja oliot. Ville Sundberg

Paikkatiedon mallinnus Dokumentoinnin ymmärtäminen. Lassi Lehto

Rajapinta (interface)

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

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.

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

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

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

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

sovellussuunnitteluun

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

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

Integrointi. Ohjelmistotekniikka kevät 2003

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

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ä

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 Olio 1 tietää Palvelu b Olio 3 Palvelu a Olio 2 Käyttää apuna Olio 4 Palvelu d Palvelu c

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

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

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

Kuvaustekniikka ja metamalli tuottaa Tekniikan laatiminen ohjaa metamalli Mallin periaatteet ja laajennettavuus Kuvaustekniikka Käsitteet ja esitystapa ohjaa Kuvauksen laatiminen tuottaa kuvaus

UML-kuvaustekniikat UML-tekniikat 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

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.

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

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

Luokan attribuutit 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ä

Luokan attribuutit 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

Luokan attribuutit 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

Luokan attribuutit 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

Luokan attribuutit 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

Luokan attribuutit 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

Luokan attribuutit 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

Luokan attribuutit 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

Luokan attribuutit 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 ]

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

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 asiakas Omistaja-> 1..3 0..10 <-Tili Koska asiakkaalla ei välttämättä ole yhtään tiliä

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