Top Banner
Johdatus oliopohjaiseen Johdatus oliopohjaiseen ajatteluun ajatteluun Pasi Kellokoski Pasi Kellokoski
97

Johdatus oliopohjaiseen ajatteluun

May 17, 2015

Download

Technology

Pasi Kellokoski

Johdatus oliopohjaiseen ajatteluun
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Johdatus oliopohjaiseen ajatteluun

Johdatus oliopohjaiseen Johdatus oliopohjaiseen ajatteluunajatteluun

Pasi KellokoskiPasi Kellokoski

Page 2: Johdatus oliopohjaiseen ajatteluun

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

Ohjelmointiparadigmat

Paradigma = esikuva, malli, kaava

Ohjelmointiparadigma on tapa kuvata erilaisten järjestelmien rakennetta ja toimintaa

Page 4: Johdatus oliopohjaiseen ajatteluun

Ohjelmointiparadigmoja

Proseduraalinen (esim. Pascal, Ada, Modula-2, C)

Funktionaalinen (Lisp, Scheme)

Logiikkaohjelmointi (Prolog)

Tietokantaohjelmointi (SQL)

Olioperustainen (Smalltalk, C++, Java)

Page 5: Johdatus oliopohjaiseen ajatteluun

Perinteinen osittava ohjelmistokehitys

toiminnankarkeakuvaus

1. tarkennus-askel

lopullinenkoodi

Page 6: Johdatus oliopohjaiseen ajatteluun

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

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

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

Syitä oliopohjaiseen ajatteluun

70-luvulla ”Ohjelmistokriisi”

Ylläpidon ja muutosten hallinnan ongelmat

Koodin elinikä ja uudelleenkäyttö

Page 10: Johdatus oliopohjaiseen ajatteluun

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

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

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

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

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

Syitä oliopohjaiseen ajatteluun (jatkoa)

Kuitenkin muistettava että:

Uudelleenkäytettävyys huomioitava suunnittelussa

Olioperustainen ohjelmistokehitys voi viedä enemmän aikaa

Page 16: Johdatus oliopohjaiseen ajatteluun

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

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

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

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

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

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

Olioajattelu

Ohjelmiston rakentamisesta tulee systemaattinen, hallittavissa oleva prosessi, jossa sovelluksen käsiteanalyysistä johdetaan vähitellen ajettavissa oleva koodi

Page 23: Johdatus oliopohjaiseen ajatteluun

Oliosuuntautuneisuuden tausta

Käsitteemme muodostuvat havainnointimme perustalta

Käsitteitä muodostuu todellisista ja kuvitteellisista todellisuuden ilmentymistä

Page 24: Johdatus oliopohjaiseen ajatteluun

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

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

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

Proseduraalinen ohjelmointivs. olio-ohjelmointi

toimintorakennetietorakenteet +

olio = tieto + toiminnotkapselointi

Page 28: Johdatus oliopohjaiseen ajatteluun

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

Olio (jatkoa)

Kuuluu aina johonkin luokkaan, mutta vain yhteen luokkaan

Page 30: Johdatus oliopohjaiseen ajatteluun

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Abstraktien tietotyyppien etuja

Vähentää osien riippuvuuksia toisistaan

Rakennettavuus

Ylläpidettävyys

Toteutus voidaan vaihtaa muuttamalla sisäistä osaa

Page 45: Johdatus oliopohjaiseen ajatteluun

Olio vs. abstrakti tyyppi

Olio vs. abstrakti tyyppi

Tiedot ja toiminta yhteen

Tarjottavat palvelut

Suojaus

Page 46: Johdatus oliopohjaiseen ajatteluun

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

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

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

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

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

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

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

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

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

Esimerkki - Luokka Kaupunki

Attribuutteja

Nimi

Pinta-ala

Väkiluku

Väestöntiheys

Veroprosentti

Työttömyysaste

...

Operaatioita

...

Page 56: Johdatus oliopohjaiseen ajatteluun

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

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

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

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

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

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

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

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

Esimerkki - Pankkiautomaatti

Luokkia

Asiakas

Pankkiautomaatti

Pankki

Pankkikortti

Käteinen

Pankin tietoliikenneverkko

Pankin keskustietokone

Pankkitili

Transaktio

...

Page 65: Johdatus oliopohjaiseen ajatteluun

Esimerkki - Kurssille rekisteröitymisjärjestelmä

Luokkia

Kurssi

Kurssitoteutus

Opiskelija

Opettaja

Luokka

Tentti

Rekisteröityminen

Kurssin arvosana

...

Page 66: Johdatus oliopohjaiseen ajatteluun

Esimerkki - Tekstiviestijärjestelmä

Luokkia

Lähettäjä

Vastaanottaja

SMS viesti

Puhelin

Tietokone

Ryhmä

Verkko

...

Page 67: Johdatus oliopohjaiseen ajatteluun

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

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

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

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

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

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

Periytyminen - esimerkkejä (jatkoa)

Alkoholijuoma

nimihintatuotenumerokuvausalkoholipitoisuusalkuperämaapullokokopakkauskokovalmistaja

OlutJuomasekoitus Katkero Siideri Long drinkLikööriViini Glögi

Page 74: Johdatus oliopohjaiseen ajatteluun

Periytyminen - esimerkkejä (jatkoa)

Alkoholijuoma

nimihintatuotenumerokuvausalkoholipitoisuusalkuperämaapullokokopakkauskokovalmistaja

Olut

oluttyyppi

IV A-olut Vahva olut III olut

Page 75: Johdatus oliopohjaiseen ajatteluun

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

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

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

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

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

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

Moniperiytymisen ongelmia

Monimutkaiset periytymissuhteet, vaikea hallita

Nimikonfliktit

Perii samannimisen ominaisuuden eri teitä

Kumpi voimassa?

Ratkaisuja

Kielletty

Uudelleennimeäminen

Yhdistyminen

Page 82: Johdatus oliopohjaiseen ajatteluun

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

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

Moniperiytyminen (jatkoa)

Kuljettaja

ajokortti

Kuljettaja

ajokortti

myöntö-vuosi

Kuljettaja

ajokortti

Rahastaja

virheitä

tilitys-numero

Taksinkuljettajaalue

Page 85: Johdatus oliopohjaiseen ajatteluun

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

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

Luokkahierarkian linearisointi

AA

CC

BB AA

CC

BB

AA

BB

CCluokkahierarkian linearisointi

Page 88: Johdatus oliopohjaiseen ajatteluun

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

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

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

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

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

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

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

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

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

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