johdatus oliopohjaiseen ajatteluun
DESCRIPTION
Johdatus oliopohjaiseen ajatteluunTRANSCRIPT
![Page 1: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/1.jpg)
Johdatus oliopohjaiseen Johdatus oliopohjaiseen ajatteluunajatteluun
Pasi KellokoskiPasi Kellokoski
![Page 2: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/2.jpg)
Mitä on oliokeskeisyys?
Oliolähestymistavan tavoitteena on sovelluskehitystyön tuottavuuden ja laadun kohottaminen
Oliolähestymistapa (eli oliokeskeisyys) tarkoittaa kehittämis- ja ohjelmointiparadigmaa, jonka mukaan todellisuus nähdään joukkona toisiinsa vuorovaikutuksessa olevia olioita (Koskimies, 1995)
![Page 3: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/3.jpg)
Ohjelmointiparadigmat
Paradigma = esikuva, malli, kaava
Ohjelmointiparadigma on tapa kuvata erilaisten järjestelmien rakennetta ja toimintaa
![Page 4: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/4.jpg)
Ohjelmointiparadigmoja
Proseduraalinen (esim. Pascal, Ada, Modula-2, C)
Funktionaalinen (Lisp, Scheme)
Logiikkaohjelmointi (Prolog)
Tietokantaohjelmointi (SQL)
Olioperustainen (Smalltalk, C++, Java)
![Page 5: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/5.jpg)
Perinteinen osittava ohjelmistokehitys
toiminnankarkeakuvaus
1. tarkennus-askel
lopullinenkoodi
![Page 6: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/6.jpg)
Perinteinen osittava ohjelmistokehitys (jatkoa)
Osittava (top-down) suunnittelu toimintasuuntautunutta
Toiminnallisuus kuvataan tarkentuvilla abstraktiotasoilla
Tietorakenteet määritellään kun niiden rooli tulee esille
Ohjelmisto riippuvainen ylempien tasojen ratkaisuista
Tietorakenteet irrallisia toimintojen kohteita
Sopii hyvin pienehköjen ohjelmien toteutukseen
![Page 7: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/7.jpg)
Perinteinen osittava ohjelmistokehitys (jatkoa)
Ongelmia
Pieni muutos ylätasolla aiheuttaa suuria muutoksia koko ohjelmaan (esim. käyttöliittymä)
Heikko uudelleenkäytettävyys
Ylläpito hankalaa
![Page 8: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/8.jpg)
Olioperustainen ohjelmistokehitys
Sovelluksenkäsitemaailma
Sovellus 1
Sovellus 2
Sovellukseen liittyviä käsitteitäja niiden välisiä suhteita
Luokkia ja niidenvälisiä suhteita
![Page 9: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/9.jpg)
Syitä oliopohjaiseen ajatteluun
70-luvulla ”Ohjelmistokriisi”
Ylläpidon ja muutosten hallinnan ongelmat
Koodin elinikä ja uudelleenkäyttö
![Page 10: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/10.jpg)
Syitä oliopohjaiseen ajatteluun (jatkoa)
Ohjelmiston kokonaiskustannukset:
30-50% rakentaminen, 50-70% ylläpito
Ylläpitokustannukset
42% käyttäjien uusia vaatimuksia
17% tietoesitysten muutoksia
12% hätäkorjauksia
9% rutiinikorjauksia
Käyttäjien uusia vaatimuksia
Tietoesitysten muutoksia
Hätäkorjauksia
Rutiinikorjauksia
![Page 11: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/11.jpg)
Syitä oliopohjaiseen ajatteluun (jatkoa)
Uudet vaatimukset johtavat ohjelmiston rakenteen muuttamiseen
Yleisrakenne riippumattomaksi
Toiminnallisista muutoksista
Tietoesitysten muutoksista
Pieni vaatimusmuutos <-> pieni koodimuutos
![Page 12: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/12.jpg)
Syitä oliopohjaiseen ajatteluun (jatkoa)
Ohjelmiston rakentamiskustannukset
Ohjelmistot suuria, monimutkaisia ja vaativia
Ohjelmistokomponenttien uudelleen käytettävyys
Alentaa kustannuksia
15% uusista ohjelmistoista uutta koodia, 85% muokattu vanhasta
Uudelleenkäytön tuki
![Page 13: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/13.jpg)
Syitä oliopohjaiseen ajatteluun (jatkoa)
Vastaa hyvin reaalimaailman konkreettisia ja abstrakteja asioita
Olioperustainen ohjelma simuloi tapahtumia
Suora liitäntä todellisuuteen
Ominaisuudet
Käyttäytyminen
Palvelut
![Page 14: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/14.jpg)
Syitä oliopohjaiseen ajatteluun (jatkoa)
Toiminnan muutos EI aiheuta syvällisiä muutoksia ohjelmaan
Muutoskohdat helppo löytää
Ohjelmiston rakentaminen systemaattinen hallittava prosessi
Koodin uudelleenkäyttö helpompaa
![Page 15: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/15.jpg)
Syitä oliopohjaiseen ajatteluun (jatkoa)
Kuitenkin muistettava että:
Uudelleenkäytettävyys huomioitava suunnittelussa
Olioperustainen ohjelmistokehitys voi viedä enemmän aikaa
![Page 16: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/16.jpg)
Syitä oliopohjaiseen ajatteluun (jatkoa)
Sopii kaikkiin sovelluksiin
Ei tehokkuushäviöitä
Ohjelmointikulttuuri (kielet, ohjelmointiympäristöt, kirjastot, analysointi- ja suunnittelumenetelmät, suunnittelumallit, sovelluskehykset, CASE-välineet...)
![Page 17: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/17.jpg)
Olioparadigman historiaa
V. 1966: Simula (Dahl, Nygaard) (object-oriented programming)
V. 1972: Smalltalk (Kay, Xerox), termi ’object-oriented’ tuli yleisemmin käyttöön
V.1972: Boochin menetelmä: object-oriented design
1980-luvun puolivälistä alkaen uusia olio-ohjelmointikieliä: C++, Eiffel, Oberon-2
1980-luvun puolivälistä alkaen ensimmäisiä kaupallisia oliotietokantoja
Käynnistettiin useita konferenssisarjoja: (OOPSLA, ECOOP, TOOLS)
![Page 18: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/18.jpg)
Olioparadigman historiaa (jatkoa)
1980-luvun lopussa menetelmiä, jotka kattavat myös määrittelyn: OOA, OOSE
1990-luvulla: object-oriented domain analysis, olio-ohjelmistojen testaus, oliopohjaiset CASE-välineet
![Page 19: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/19.jpg)
Olioperustaisuus tänään
Suunnittelumenetelmät käytössä (esim. OMT, OMT++, Octopus)
Ohjelmistokehitysprosessit käytössä (RUP ym.)
CASE-välineet käytössä (Rational Rose, Select ym.)
Oliokielet käytössä (Java, C++, Smalltalk ym.)
Ohjelmointiympäristöt markkinoilla (MS Visual C++, Symantec Visual Café ym.)
![Page 20: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/20.jpg)
Olioperustaisuus tänään (jatkoa)
Yleisesti: oliolähestymistapa on levinnyt mm. ohjelmointiin, tietojärjestelmien suunnitteluun, tietojärjestelmien analyysiin, liiketoimintojen analyysiin, strategiseen suunnitteluun
![Page 21: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/21.jpg)
Olioperustaisuus tänään (jatkoa)
Oliotaitoja tarvitaan useissa tehtävissä (ohjelmointi, testaus, tietokannat, ohjelmistoarkkitehtuurit, käyttöliittymät, määrittely…)
Eri kehitysympäristöissä (Windows, sulautettu, web…)
Eri toimialoilla (e-business, tietoliikenne, langattomat päätelaitteet…)
![Page 22: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/22.jpg)
Olioajattelu
Ohjelmiston rakentamisesta tulee systemaattinen, hallittavissa oleva prosessi, jossa sovelluksen käsiteanalyysistä johdetaan vähitellen ajettavissa oleva koodi
![Page 23: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/23.jpg)
Oliosuuntautuneisuuden tausta
Käsitteemme muodostuvat havainnointimme perustalta
Käsitteitä muodostuu todellisista ja kuvitteellisista todellisuuden ilmentymistä
![Page 24: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/24.jpg)
Abstrahointi
Periaate, jonka mukaan nostetaan esille ongelman kannalta relevantit piirteet ja jätetään huomiotta epärelevantit
Tehdään tarkastelukohteen yksinkertaistamiseksi tiettyä tarkoitusta varten
Saadaan muodostetuksi yleiskäsitteitä
Mallinnetaan todellisuutta
![Page 25: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/25.jpg)
Olio
Rajattavissa ja yksilöitävissä oleva asia tai käsite, joka on merkityksellinen käsillä olevan tarkastelun kannalta
Ympäristöstä erottuva kokonaisuus, jolla oma identiteetti, sisäinen rakenne ja suhteet tiettyyn ympäristöön
Teknisessä mielessä ohjelman strukturoinnin perusyksikkö, joka ei ole puhtaasti toiminnallinen (esim. aliohjelma) tai puhtaasti tietoa sisältävä (esim. tietue), vaan sisältää molempia ominaisuuksia
![Page 26: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/26.jpg)
Olio (jatkoa)
Sisältää
Tietoja
Toimintoja
Tällaista tiedon ja siihen liittyvien toimintojen pakkaamista yhdeksi kokonaisuudeksi kutsutaan ohjelmistotekniikassa usein kapseloinniksi
![Page 27: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/27.jpg)
Proseduraalinen ohjelmointivs. olio-ohjelmointi
toimintorakennetietorakenteet +
olio = tieto + toiminnotkapselointi
![Page 28: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/28.jpg)
Olio (jatkoa)
Pystyy suorittamaan tietyt tälle oliolle ominaiset toiminnot eli operaatiot
Pystyy tallettamaan tietoa olion attribuutteihin
Oliolla on sen yksilöivä viite
Suojattu kokonaisuus, jonka käyttö on rajattu tiettyihin muotoihin
![Page 29: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/29.jpg)
Olio (jatkoa)
Kuuluu aina johonkin luokkaan, mutta vain yhteen luokkaan
![Page 30: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/30.jpg)
Attribuutti
Olion pystyy tallettamaan tietoa olion attribuutteihin
Attribuutti kuvaa luokkaan kuuluvien olioiden ominaisuutta (esim. nimi, ikä, paino)
Attribuuttien arvojen yhdistelmiä kutsutaan olion tiloiksi
![Page 31: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/31.jpg)
Operaatio
On olioon kohdistuva tai olion suorittama toimenpide
Tehtävät, joista olio on vastuussa
Mitä tehdään
Operaatiot ovat tyypillisesti
Olion tilaa muuttavia
Tilaa tutkivia
Olion osille tietyn toiminpiteen tekeviä toimintoja
![Page 32: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/32.jpg)
Oliot ja viestit
Oliot kommunikoivat keskenään lähettämällä viestejä (palvelupyyntöjä) toisilleen
Viesti toimii eräänlaisena herätteenä, joka saa vastaanottavan olion käynnistämään viestissä viitatun operaation suorituksen
Oliokeskeinen tietojärjestelmä mallinnetaan palvelujen tarjoajina ja käyttäjinä, jotka tekevät keskenään yhteistyötä tietojärjestelmän vastuun täyttämiseksi
Palvelua käyttävä olio ei tunne palvelun tarjoajan sisäistä rakennetta
![Page 33: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/33.jpg)
Terminologiaa
Täydellisesti olioperustainen ohjelma
Kaikki toiminta olioiden operaatioissa
Kaikki data olioiden attribuuteissa tai operaatioissa paikallisena
Puhdas oliokieli
Kieli, jossa ohjelmat ovat aina täydellisesti olioperustaisia
Juuriolio
Olio, joka luodaan ensin ja joka luo muut oliot (suoraan tai välillisesti)
![Page 34: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/34.jpg)
Terminologiaa (jatkoa)
Moniparadigmakieli
Tukee usean eri ohjelmointiparadigman käsitteitä
Ohjelmoija voi valita haluamansa välineet
Hybridikieli
Perinteinen ohjelmointikieli, johon on lisätty olioperustaisen ohjelmoinnin vaatimat mekanismit
![Page 35: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/35.jpg)
Terminologiaa (jatkoa)
Oliotyyppejä
Passiivinen olio: olio toimii vain silloin kun sen palveluja pyydetään
Aktiivinen olio: olio on jatkuvasti toimiva prosessi, joka toimii muiden olioiden kanssa rinnakkain
Koosteolio: oliolla on osinaan toisia olioita osa- tai asiakassuhteessa
Alistettu olio: toisen olion attribuuttina oleva kokonainen olio (eikä vain viite)
![Page 36: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/36.jpg)
Olioiden elinikä
Oliotyyppejä eliniän mukaan:
Väliaikainen olio: häviää kun sen tehtävä on suoritettu (esim. tyyppimuunnoksien yhteydessä)
Alistettu olio: häviää kun isäntäolio häviää
Paikallinen olio: häviää kun ko. aktivaatio päättyy
Vapaa olio: häviää roskien keruussa tai erikseen tuhottaessa
Staattinen olio: häviää sovelluksen päättyessä
Pysyvä olio eli kantaolio: pysyvät sovelluksesta riippumatta
![Page 37: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/37.jpg)
Miten löydän oliot?
Fyysiset oliot (talo, hevonen, auto)
Käsitteet (maksuaikatalu, juna-aikataulu)
Roolit (operaattori, käyttäjä, työntekijä)
Tapahtumia (keskeytys, hälytys, varaus)
Paikkoja (toimisto, valvomo)
Etsi siis substantiiveja! Älä ole liian kriittinen!
![Page 38: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/38.jpg)
Järkevien olioiden etsintä
Karsi synonyymit
Jätä pois epäolennaiset ja epämääräiset
Jätä pois attribuutit
Unohda toteutuskäsitteet (listat, pinot jne.)
Karsi pois käyttöliittymäelementit, niiden aika on myöhemmin
![Page 39: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/39.jpg)
Eri tyyppisiä olioita
Tekninen olio (Merkkijono, Lista)
Käyttöliittymäolio (Ikkuna, Painike)
Liiketoimintaolio (Tilaus, Maksu, Asiakas)
Toimialueen olio (Operaattori, Tilaaja, Palvelu, Yhteys)
...
![Page 40: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/40.jpg)
Esimerkki
Short Message System
Mitä olioita järjestelmässä?
”Mikä Häkkinen” (Lähettäjä)
”Michael Schumacher” (Vastaanottaja)
”Ilmoja pidellyt. Terveisin Mika.” (SMS viesti)
Nokia 6110 (Puhelin)
Pentium III (Tietokone)
Kaverit (Ryhmä)
Soneran GSM-verkko (Verkko)
![Page 41: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/41.jpg)
Historiaa: abstraktit tietotyypit
70-luvulla käytettiin abstrakteja tietotyyppejä, mm. ohjelmointikielissä Ada ja Modula-2
Abstrakteissa tietotyyppien idea ohjelmistojen modularisoinnista osaksi sama kuin olioperustaisessa ajattelussa
![Page 42: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/42.jpg)
Abstrakti tietotyyppi
Määrittelee ilmentymiin sovellettavat kutsumuodot
Ei niiden toteutustapaa
Kapselointimekanismi
Rajapinta
Toteutus esim. moduulina
Liittymä: tyypille sovellettavat operaatiot
Runko: toteutus, ei näy ulos
![Page 43: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/43.jpg)
Abstrakti tietotyyppi (jatkoa)
Ohjelmiston ”sisäinen käyttöliittymä” ohjelmiston komponenteille
Kytkimet, napit <-> operaatiot
Mittarit, lamput <-> arvon palautus
Ei tarvitse välittää "sisäisistä kytkennöistä"
![Page 44: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/44.jpg)
Abstraktien tietotyyppien etuja
Vähentää osien riippuvuuksia toisistaan
Rakennettavuus
Ylläpidettävyys
Toteutus voidaan vaihtaa muuttamalla sisäistä osaa
![Page 45: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/45.jpg)
Olio vs. abstrakti tyyppi
Olio vs. abstrakti tyyppi
Tiedot ja toiminta yhteen
Tarjottavat palvelut
Suojaus
![Page 46: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/46.jpg)
Luokka
Oliokielissä olioiden piirteet (attribuutit ja operaatiot) määritellään tavallisesti olion luokassa
Luokka = malli, muotti tai aihio, jonka mukaisia olioita voidaan luoda
Olio = luokan ilmentymä
![Page 47: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/47.jpg)
Luokka (jatkoa)
Luokka kertoo, mitä attribuutteja ja operaatioita luokan ilmentymillä on
Jokaisella tietyn luokan ilmentymällä on samat attribuutit ja operaatiot, vain attribuuttien arvot vaihtelevat
Jokaisella oliolla on yksikäsitteinen luokka, jonka mukaan olio on luotu
![Page 48: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/48.jpg)
Luokka (jatkoa)
Kuvaa joukkoa , joka muodostuu rakenteeltaan ja käyttäytymiseltään (yleisesti ominaisuuksiltaan) samanlaisista olioista (esim. Asiakas,Työntekijä, Osasto)
Olioluokat muodostavat hierarkian, jossa on yliluokkia (esim. Työntekijä) ja niiden aliluokkia (esim. Projektipäällikkö, Suunnittelija, Ohjelmoija)
![Page 49: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/49.jpg)
Luokka (jatkoa)
Tarjoaa eräänlaisen sisäisen käyttöliittymäkuvauksen luokan ilmentymille
Luokka on staattinen, käännösaikainen käsite
Olio on dynaaminen, ajonaikana (luokasta) luotava rakenne
![Page 50: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/50.jpg)
Olion luominen
int a;
void p() {...}
int a;
void p() {...}
Luokka C
a
p
Luokan C ilmentymä
luonti
luonti
a
p
Luokan C ilmentymä
2
3
![Page 51: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/51.jpg)
Olion rakentaja
Olio luodaan luontioperaatiolla
Rakentaja = olion operaatio, jonka olio suorittaa automaattisesti ensimmäisenä toimenpiteenään
Alustaa olion attribuutit
Oletusrakentaja tai ohjelmoijan määrittämä
![Page 52: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/52.jpg)
Olion purkaja
Purkaja = olion operaatio, jonka olio suorittaa automaattisesti viimeisenä toimenpiteenään
Suorittaa toimenpiteitä, jotka ovat välttämättömiä ennen olion hävittämistä (esim. resurssien vapauttaminen)
![Page 53: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/53.jpg)
Esimerkki - Luokka Ihminen
Attribuutteja
Nimi
Lempinimi
Syntymäaika
Pituus
Paino
Syntymäpaikka
Asuinpaikka
...
Operaatioita
Kävele
Juokse
Syö
Juo
Nuku
...
![Page 54: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/54.jpg)
Esimerkki - Olio Teemu Selänne
Attribuutteja
Nimi: Teemu Selänne
Lempinimi: The Finnish Flash
Syntymäaika: 3.7.1970
Pituus: 183 cm
Paino: 93 kg
Syntymäpaikka: Helsinki
Asuinpaikka: Anaheim
...
Operaatioita
Kävele
Juokse
Syö
Juo
Nuku
...
![Page 55: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/55.jpg)
Esimerkki - Luokka Kaupunki
Attribuutteja
Nimi
Pinta-ala
Väkiluku
Väestöntiheys
Veroprosentti
Työttömyysaste
...
Operaatioita
...
![Page 56: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/56.jpg)
Esimerkki - Olio Tampere
Attribuutteja
Nimi: Tampere
Pinta-ala: 522,7 km2
Väkiluku: 195 000
Väestöntiheys: 370 henkilö/km2
Veroprosentti: 17,25
Työttömyysaste: 15,4 %
...
Operaatioita
...
![Page 57: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/57.jpg)
Esimerkki - Olio Helsinki
Attribuutteja
Nimi: Helsinki
Pinta-ala: 686 km2
Väkiluku: 550 000
Väestöntiheys: 2976 henkilöä/maa-km2
Veroprosentti: 16,5
Työttömyysaste: 7,3 %
...
Operaatioita
...
![Page 58: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/58.jpg)
Esimerkki - Luokka Auto
Attribuutteja
Merkki
Malli
Ovet
Vaihteet
Moottori
Teho
Huippunopeus
Kulutus
Rekisterinumero
...
Operaatioita
Kaasuta
Jarruta
Vaihda vaihde
Käännä oikealle
Käännä vasemmalle
...
![Page 59: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/59.jpg)
Esimerkki - Olio Auto X
Attribuutteja
Merkki: Chrysler
Malli: PT Cruiser Classic
Ovet: 5
Vaihteet: Manuaali
Moottori: 2000 ccm
Teho: 104 kW
Huippunopeus: 190 km/h
Kulutus: 7 - 8.7 - 11.5 l/100km
Rekisterinumero ABC-123
...
Operaatioita
Kaasuta
Jarruta
Vaihda vaihde
Käännä oikealle
Käännä vasemmalle
...
![Page 60: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/60.jpg)
Luokkaehdokkaiden löytäminen
Reaalimaailman ja erityisesti sen rajatun alueen, kohdealueen, analysointi
Lähteitä kohdealueen analysointiin
Kirjallinen aineisto: toimintakertomukset, raportit ja muistiot, liiketoiminnan kuvaukset
Käyttäjien ja muiden kohdealueen asiantuntijoiden haastattelu
Protoilu
Reaalimaailman havainnointi
Paljon käytetty tapa luokkaehdokkaiden löytämiseen: substantiivien alleviivaus tekstissä
Luetteloi luokkaehdokkaat
![Page 61: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/61.jpg)
Luokkaehdokkaiden arviointi / analyysi
Kriteereitä luokkaehdokkaiden arvioimiseksi
Ovatko luokan oliot reaalimaailman olioita vs. teknisiä oliota
Luokan sisällön määrittely
Olioilmentymien tarkastelu
Yksilöivän avaimen määrittely
Olion attribuuttien etsiminen (attribuutti vai luokka?)
Olion tarjoamien palvelujen arviointi
Kapselointiratkaisujen arviointi
Kriittinen suhtautuminen --> jos 1 : 1, tarvitaanko molempia?
![Page 62: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/62.jpg)
Luokkaehdokkaiden arviointi / analyysi
Luokka on epäilyttävä, jos
Luokassa ei ole operaatioita
Luokka = operaatio
Luokka perii tietorakenteita, joita se ei käytä
Luokkaa on vaikea nimetä
Luokka on suuri (satoja rivejä – riippuu tilanteesta...)
Luokan palveluja ei käytetä
Operaatiot käsittelevät erillisiä attribuuttijoukkoja
Luokassa on samankaltaista operaatiokoodia kuin jossakin muussa luokassa
![Page 63: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/63.jpg)
Luokkien nimeäminen
Kohdealueen terminologiaan kuuluvat, yleisesti hyväksytyt nimet, mikäli mahdollista
Käytä luokan nimenä joko substantiivia tai adjektiivia ja substantiivia
Käytä luokan nimenä yksikössä oleva sanaa
Käytä täsmällisiä ja kuvaavia ilmaisuja, vaikka ne olisivatkin hieman pidempiä
Ei numeroita
![Page 64: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/64.jpg)
Esimerkki - Pankkiautomaatti
Luokkia
Asiakas
Pankkiautomaatti
Pankki
Pankkikortti
Käteinen
Pankin tietoliikenneverkko
Pankin keskustietokone
Pankkitili
Transaktio
...
![Page 65: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/65.jpg)
Esimerkki - Kurssille rekisteröitymisjärjestelmä
Luokkia
Kurssi
Kurssitoteutus
Opiskelija
Opettaja
Luokka
Tentti
Rekisteröityminen
Kurssin arvosana
...
![Page 66: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/66.jpg)
Esimerkki - Tekstiviestijärjestelmä
Luokkia
Lähettäjä
Vastaanottaja
SMS viesti
Puhelin
Tietokone
Ryhmä
Verkko
...
![Page 67: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/67.jpg)
Periytyminen
Luokka voi periä toisen luokan ominaisuudet eli olemassa olevaa luokkaa voidaan jalostaa erikoistuneemmaksi
Perintärelaatiossa perittyä luokkaa kutsutaan yliluokaksi ja johdettua luokkaa aliluokaksi
![Page 68: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/68.jpg)
Luokkahierarkia
Luokka ALuokka A
a
b
Luokka BLuokka B
c
Luokka CLuokka C
d
e
Luokka DLuokka D
f
piirteet:: a, b, c
piirteet:: a, b, d, e, f
piirteet:: a, b, d, e
piirteet:: a, b
![Page 69: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/69.jpg)
Periytyminen (jatkoa)
Keskeisiä käsitteitä
Yleistäminen: määritellään luokalle yleisempi yliluokka
Erikoistaminen: määritellään tietylle tapaukselle erikoistettu aliluokka
Olion perusluokka: luokka, jonka ilmentymänä olio on luotu
Yliluokka, aliluokka
Esi-isä, jälkeläiset
![Page 70: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/70.jpg)
Luokkahierarkia ja kerroksittaisia olioita
AA
BB
DD
CC
EE FF
C
D
F
A A
C
F-olio
C-olio
![Page 71: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/71.jpg)
Periytyminen (jatkoa)
Tavoitteita
Koodin uudelleenkäyttö
Inkrementaalinen ohjelmistokehitys
Käsitteelliseen mallintamiseen perustuva ohjelmistokehitys
Periytymisen merkitys
Pragmaattinen näkökulma: koodin uudelleenkäyttö, inkrementaalisuus
Käsitteellinen näkökulma: käsitteellisesti oikein olevat yleistys-erikoistus-suhteet
![Page 72: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/72.jpg)
Periytyminen - esimerkkejäHenkilö
sosiaaliturvatunnusnimiiköpituuspainoosoitepuhelinnumerokotipaikka
Työntekijä
henkilönumerotyösuhteen alkamispäivätyösuhteen loppumispäiväkuukausipalkkatyöosoitetyöpuhelinnumeroosasto
Ohjelmoija Suunnittelija Päällikkö
Projektipäällikkö Ryhmäpäällikkö
Asiantuntija
Tietokanta-asiantuntija Käyttöliittymäasiantuntija Menetelmäasiantuntija
![Page 73: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/73.jpg)
Periytyminen - esimerkkejä (jatkoa)
Alkoholijuoma
nimihintatuotenumerokuvausalkoholipitoisuusalkuperämaapullokokopakkauskokovalmistaja
OlutJuomasekoitus Katkero Siideri Long drinkLikööriViini Glögi
![Page 74: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/74.jpg)
Periytyminen - esimerkkejä (jatkoa)
Alkoholijuoma
nimihintatuotenumerokuvausalkoholipitoisuusalkuperämaapullokokopakkauskokovalmistaja
Olut
oluttyyppi
IV A-olut Vahva olut III olut
![Page 75: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/75.jpg)
Periytyminen - esimerkkejä (jatkoa)
Eläin
Kissa, Ankka, Koira…
Spanieli, Collie...
Kulkuneuvo
Juna, Moottoripyörä, Polkupyörä, Auto…
Bussi, Henkilöauto, Kuorma-auto, Traktori…
Lehti
Perhelehti, Naistenlehti, Miestenlehti, Sarjakuvalehti...
Korkeajännitys
Ilmojen korkeajännitys, Merten korkeajännitys, Aavikon korkeajännitys, Viidakon korkeajännitys...
![Page 76: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/76.jpg)
Importointi vs. periytyminen
Importointi
Keskinäiset käyttösuhteet
Mahdollisuus viitata kirjastoon
Käännettävä ja ladattava
Periytyminen
Luodaan uusi tyyppi (luokka)
Sama käyttäytymismalli
Lisätyt tai muutetut käyttäytymismuodot
Voi edellyttää importoinnin käyttöä (yli-aliluokka viittaukset)
![Page 77: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/77.jpg)
Suojaukset
Yleensä perityt piirteet perijän käyttöön
Mahdollisuuksia rajoituksiin (Java, C++)
Jos luokka esittelee samannimisen piirteen se peittää perityn
Samoin operaation uudelleenmäärittely
a
b
c
![Page 78: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/78.jpg)
Yksittäisperiytyminen
Jokaisella luokalla on enintään yksi yliluokka
Luokkahierarkia on puu
Oliokielissä Java ja Smalltalk ainoastaan yksittäisperiytyminen on mahdollista
![Page 79: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/79.jpg)
Moniperiytyminen
Olioilla voi olla useita rinnakkaisia yliluokkia
Luokkahierarkia on syklitön verkko (luokka ei voi periä itseään suoraan tai epäsuorasti)
Käytännössä ongelmallinen ja vaikeasti miellettävä
Hyödyllinen koodin uudelleenkäytössä
Javassa vain abstraktien rajapintojen moniperiytyminen
Grady Booch: ”Moniperiytyminen on kuin laskuvarjo. Yleensä et sitä tarvitse, mutta se on hyvä olla olemassa.”
![Page 80: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/80.jpg)
Moniperiytyminen (jatkoa)
Moniperiytymisen käyttötavat
Käsitteellinen moniperiytyminen
Moniperiytyminen käsitteellisesti oikein, kuvaa luokkien välisiä todellisia suhteita
Pragmaattinen moniperiytyminen
Väline koodin uudelleenkäyttöön
![Page 81: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/81.jpg)
Moniperiytymisen ongelmia
Monimutkaiset periytymissuhteet, vaikea hallita
Nimikonfliktit
Perii samannimisen ominaisuuden eri teitä
Kumpi voimassa?
Ratkaisuja
Kielletty
Uudelleennimeäminen
Yhdistyminen
![Page 82: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/82.jpg)
Moniperiytymisen ongelmia (jatkoa)
Sama luokka peritään useaan kertaan
Toistuva periytyminen
Esim. henkilötiedot Kuljettajalta ja Rahastajalta Taksinkuljettajalle
Kahdentuminen
Erotteleva moniperiytyminen
Vain kertaalleen
Yhdistävä moniperiytyminen
Ratkaisuja
Kielletään
Kieli tai ohjelmoija määrittelee ratkaisun
![Page 83: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/83.jpg)
Moniperiytyminen (jatkoa)
Oletetaan, että käsitteisiin liittyvät ominaisuudet:
Kuljettaja:
Ajokortin laatu (Integer-koodi)
Ajokortin myöntämisvuosi
Rahastaja:
Tilitysnumero
Tilitysvirheitä (Boolean)
Bussissa on erikseen henkilö, joka toimii rahastajana, mutta taksissa kuljettaja rahastaa. Näin ollen "Bussinkuljettaja" on "Kuljettajan" erikoistapaus, kun taas "Taksinkuljettaja" on sekä eräänlainen "Kuljettaja" että eräänlainen "Rahastaja".
![Page 84: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/84.jpg)
Moniperiytyminen (jatkoa)
Kuljettaja
ajokortti
Kuljettaja
ajokortti
myöntö-vuosi
Kuljettaja
ajokortti
Rahastaja
virheitä
tilitys-numero
Taksinkuljettajaalue
![Page 85: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/85.jpg)
Toistuva periytyminen
Toistuvassa periytymisessä sama attribuutti peritään useita reittejä pitkin
Erotteleva periytyminen
Molemmat perityt attribuutit ovat olemassa
Yhdistävä periytyminen
Luokka perii piirteen vain kerran
![Page 86: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/86.jpg)
Toistuva periytyminen (jatkoa)
Henkilönimi
Kuljettaja
ajokortti
Kuljettaja
ajokortti
myöntö-vuosi
Kuljettaja
ajokortti
Rahastaja
virheitä
tilitys-numero
Taksinkuljettajaalue
Henkilönimi
Kuljettaja
ajokortti
Kuljettaja
ajokortti
myöntö-vuosi
Kuljettaja
ajokortti
Rahastaja
virheitä
tilitys-numero
Taksinkuljettajaalue
Henkilönimi
![Page 87: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/87.jpg)
Luokkahierarkian linearisointi
AA
CC
BB AA
CC
BB
AA
BB
CCluokkahierarkian linearisointi
![Page 88: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/88.jpg)
Myöhäinen sidonta
Aikainen sidonta
Aliohjelman kutsu liitetään käännösaikana määrittelyyn
Kutsuttava koodi tiedossa tuottamisvaiheessa
Myöhäinen sidonta
Oliokielissä
Toteutustapa tarkennetaan jälkeläisluokissa
![Page 89: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/89.jpg)
Virtuaalioperaatiot
Virtuaaliset operaatiot
Avoin virtuaalioperaatio
Ilman runkoa
Runko jälkeläisluokissa
Luokalla ei voi olla ilmentymiä: abstrakti luokka
Kiinnitetty virtuaalioperaatio
Sisältää (oletus) rungon
![Page 90: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/90.jpg)
Avoin virtuaalioperaatio - esimerkki
Henkilö
nimiikä
ristiminen(nimi : String){abstract} tervehdi()vanhene()sano(viesti : String)
Mies
tervehdi()kumarrus()
Nainen
tervehdi()niiaus()
sano("Hei")niiaus()
sano("Moro!")kumarrus()
![Page 91: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/91.jpg)
Kiinnitetty virtuaalioperaatio - esimerkki
Henkilö
nimiikä
ristiminen(nimi : String)tervehdi()vanhene()sano(viesti : String)
Mies
tervehdi()kumarrus()
Nainen
tervehdi()niiaus()
niiaus()kumarrus()
sano("Tervehdys")
![Page 92: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/92.jpg)
Virtuaalinen vs. ei-virtuaalinen
Virtuaalinen operaatio
+ lisää uudelleenkäytön mahdollisuuksia
+ antaa mahdollisuuden muuttaa perittyjen operaatioiden toimintatapaa
- tekee ohjelmasta vaikeammin ymmärrettävän
- pieni ajoaikainen rasite
Operaation merkityksen säilyminen uudelleenmäärittelyssä?
![Page 93: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/93.jpg)
Monimuotoisuus eli polymorfismi
Ohjelmassa esiintyvä kohde voi tarkoittaa useita eri asioita
Perustuu myöhäiseen sidontaan ja luokille määriteltyyn yhteensopivuuteen
Muuttujan viittaama olio voi siis olla montaa eri luokkaa tarpeesta riippuen
Henkilö
Nainen
h
Henkilö h;
...
h = new Nainen();
Henkilö
Mies
h
Henkilö h;
...
h = new Mies();
Henkilöh
Henkilö h;
...
h = new Henkilö();
![Page 94: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/94.jpg)
Operaatiopolymorfismi
Oliota pyydetään suorittamaan operaatio
Myöhäinen sidonta → suoritus riippuu olion perusluokasta (ei muuttujan staattisesta luokasta)
Tiedossa vasta ajonaikana
Kutsu aktivoi eri suorituskerroilla eri operaatioita
![Page 95: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/95.jpg)
Myöhäisen sidonnan käyttötapoja
Rajapintaluokat
Samaan ohjelmaan erilaisia toteutuksia
Määrittelee avoimet virtuaalioperaatiot
Ei määrittele toteutusta
Operaatioita voidaan kutsua
Toteutusluokka
Perii rajapinnan eli attribuutit ja operaatiot
Samalla rajapintaluokalla voi olla useita toteutusluokkia
![Page 96: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/96.jpg)
Myähäisen sidonnan käyttötapoja (jatkoa)
Avoin virtuaalioperaatio kun ei riittävästi tietoa toteuttamiseen
Ohjelmiston rakentaminen kiinnittämättä huomiota tarpeettomiin yksityiskohtiin
Määritysmoduulien rakentaminen
Voidaan tehdä useita eri toteutuksia tai kiinnittää toteutus myöhemmin
![Page 97: Johdatus oliopohjaiseen ajatteluun](https://reader031.vdocuments.pub/reader031/viewer/2022020207/55586c29d8b42a8d018b4be8/html5/thumbnails/97.jpg)
Monimuotoisuuden käyttötapoja
Säiliöluokka (heterogeeniset tietorakenteet)
Voi tallentaa mitä olioita hyvänsä
Luokka tarkentuu jälkeläisluokaksi
Olioiden luokka vaihtelee eri ilmentymissä
Käyttää periytymistä
Esim. pino, jono, verkko, puu, joukko