SlideShare a Scribd company logo
Johdatus oliopohjaiseen
      ajatteluun



                 Pasi Kellokoski
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)
Ohjelmointiparadigmat
 Paradigma = esikuva, malli, kaava
 Ohjelmointiparadigma on tapa kuvata erilaisten järjestelmien
  rakennetta ja toimintaa
Ohjelmointiparadigmoja
 Proseduraalinen (esim. Pascal, Ada, Modula-2, C)
 Funktionaalinen (Lisp, Scheme)
 Logiikkaohjelmointi (Prolog)
 Tietokantaohjelmointi (SQL)
 Olioperustainen (Smalltalk, C++, Java)
Perinteinen osittava ohjelmistokehitys




        toiminnan
        karkea
        kuvaus


                    1. tarkennus-
                    askel

                                    lopullinen
                                    koodi
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
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
Olioperustainen ohjelmistokehitys

                                                              Sovellus 1




      Sovelluksen
     käsitemaailma




                                                     Sovellus 2

      Sovellukseen liittyviä käsitteitä   Luokkia ja niiden
      ja niiden välisiä suhteita          välisiä suhteita
Syitä oliopohjaiseen ajatteluun
 70-luvulla ”Ohjelmistokriisi”
 Ylläpidon ja muutosten hallinnan ongelmat
 Koodin elinikä ja uudelleenkäyttö
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
                                           Rutiinikorjauksia
    9% rutiinikorjauksia
                                    Hätäkorjauksia


                                                               Käyttäjien uusia
                                                                 vaatimuksia



                                        Tietoesitysten
                                          muutoksia
Syitä oliopohjaiseen ajatteluun (jatkoa)
 Uudet vaatimukset johtavat ohjelmiston rakenteen
  muuttamiseen
    Yleisrakenne riippumattomaksi
       Toiminnallisista muutoksista

       Tietoesitysten muutoksista

    Pieni vaatimusmuutos <-> pieni koodimuutos
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
Syitä oliopohjaiseen ajatteluun (jatkoa)
 Vastaa hyvin reaalimaailman konkreettisia ja abstrakteja asioita
 Olioperustainen ohjelma simuloi tapahtumia
 Suora liitäntä todellisuuteen
    Ominaisuudet
    Käyttäytyminen
    Palvelut
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
Syitä oliopohjaiseen ajatteluun (jatkoa)
 Kuitenkin muistettava että:
    Uudelleenkäytettävyys huomioitava suunnittelussa
    Olioperustainen ohjelmistokehitys voi viedä enemmän aikaa
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...)
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)
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
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.)
Olioperustaisuus tänään (jatkoa)
 Yleisesti: oliolähestymistapa on levinnyt mm. ohjelmointiin,
  tietojärjestelmien suunnitteluun, tietojärjestelmien analyysiin,
  liiketoimintojen analyysiin, strategiseen suunnitteluun
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…)
Olioajattelu
 Ohjelmiston rakentamisesta tulee systemaattinen, hallittavissa
  oleva prosessi, jossa sovelluksen käsiteanalyysistä johdetaan
  vähitellen ajettavissa oleva koodi
Oliosuuntautuneisuuden tausta
 Käsitteemme muodostuvat havainnointimme perustalta
 Käsitteitä muodostuu todellisista ja kuvitteellisista
  todellisuuden ilmentymistä
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
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
Olio (jatkoa)
 Sisältää
    Tietoja
    Toimintoja

 Tällaista tiedon ja siihen liittyvien toimintojen pakkaamista
  yhdeksi kokonaisuudeksi kutsutaan ohjelmistotekniikassa
  usein kapseloinniksi
Proseduraalinen ohjelmointi
vs. olio-ohjelmointi
          tietorakenteet    +        toimintorakenne




              kapselointi       olio = tieto + toiminnot
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
Olio (jatkoa)
 Kuuluu aina johonkin luokkaan, mutta vain yhteen luokkaan
Attribuutti
 Olion pystyy tallettamaan tietoa olion attribuutteihin
 Attribuutti kuvaa luokkaan kuuluvien olioiden ominaisuutta
  (esim. nimi, ikä, paino)
 Attribuuttien arvojen yhdistelmiä kutsutaan olion tiloiksi
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
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
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)
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
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)
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
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!
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
Eri tyyppisiä olioita
 Tekninen olio (Merkkijono, Lista)
 Käyttöliittymäolio (Ikkuna, Painike)
 Liiketoimintaolio (Tilaus, Maksu, Asiakas)
 Toimialueen olio (Operaattori, Tilaaja, Palvelu, Yhteys)
 ...
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)
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
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
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ä"
Abstraktien tietotyyppien etuja
 Vähentää osien riippuvuuksia toisistaan
 Rakennettavuus
 Ylläpidettävyys
 Toteutus voidaan vaihtaa muuttamalla sisäistä osaa
Olio vs. abstrakti tyyppi
 Olio vs. abstrakti tyyppi
    Tiedot ja toiminta yhteen
    Tarjottavat palvelut
    Suojaus
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ä
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
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)
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
Olion luominen
                                       2 a


          Luokka C

                                             p
               int a;         luonti
                int a;
            void p() {...}
                                        Luokan C
             void p() {...}            ilmentymä
                              luonti

                                       3 a




                                             p


                                        Luokan C
                                       ilmentymä
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ä
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)
Esimerkki - Luokka Ihminen
 Attribuutteja        Operaatioita
    Nimi                 Kävele
    Lempinimi            Juokse
    Syntymäaika          Syö
    Pituus               Juo
    Paino                Nuku
    Syntymäpaikka        ...
    Asuinpaikka
    ...
Esimerkki - Olio Teemu Selänne
 Attribuutteja                      Operaatioita
    Nimi: Teemu Selänne                Kävele
    Lempinimi: The Finnish Flash       Juokse
    Syntymäaika: 3.7.1970              Syö
    Pituus: 183 cm                     Juo
    Paino: 93 kg                       Nuku
    Syntymäpaikka: Helsinki            ...
    Asuinpaikka: Anaheim
    ...
Esimerkki - Luokka Kaupunki
 Attribuutteja        Operaatioita
    Nimi                 ...
    Pinta-ala
    Väkiluku
    Väestöntiheys
    Veroprosentti
    Työttömyysaste
    ...
Esimerkki - Olio Tampere
 Attribuutteja                        Operaatioita
    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 %
    ...
Esimerkki - Olio Helsinki
 Attribuutteja               Operaatioita
    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 %
    ...
Esimerkki - Luokka Auto
 Attribuutteja         Operaatioita
    Merkki                Kaasuta
    Malli                 Jarruta
    Ovet                  Vaihda vaihde
    Vaihteet              Käännä oikealle
    Moottori              Käännä vasemmalle
    Teho                  ...
    Huippunopeus
    Kulutus
    Rekisterinumero
    ...
Esimerkki - Olio Auto X
 Attribuutteja                         Operaatioita
    Merkki: Chrysler                      Kaasuta
    Malli: PT Cruiser Classic             Jarruta
    Ovet: 5                               Vaihda vaihde
    Vaihteet: Manuaali                    Käännä oikealle
    Moottori: 2000 ccm                    Käännä vasemmalle
    Teho: 104 kW                          ...
    Huippunopeus: 190 km/h
    Kulutus: 7 - 8.7 - 11.5 l/100km
    Rekisterinumero ABC-123
    ...
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
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?
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
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
Esimerkki - Pankkiautomaatti
 Luokkia
   Asiakas
   Pankkiautomaatti
   Pankki
   Pankkikortti
   Käteinen
   Pankin tietoliikenneverkko
   Pankin keskustietokone
   Pankkitili
   Transaktio
   ...
Esimerkki -
Kurssille rekisteröitymisjärjestelmä
 Luokkia
   Kurssi
   Kurssitoteutus
   Opiskelija
   Opettaja
   Luokka
   Tentti
   Rekisteröityminen
   Kurssin arvosana
   ...
Esimerkki - Tekstiviestijärjestelmä
 Luokkia
   Lähettäjä
   Vastaanottaja
   SMS viesti
   Puhelin
   Tietokone
   Ryhmä
   Verkko
   ...
Periytyminen
 Luokka voi periä toisen luokan ominaisuudet eli olemassa
  olevaa luokkaa voidaan jalostaa erikoistuneemmaksi
 Perintärelaatiossa perittyä luokkaa kutsutaan yliluokaksi ja
  johdettua luokkaa aliluokaksi
Luokkahierarkia
                                         a               piirteet:: a, b
                                         b

                                             Luokka A
                                              Luokka A




    piirteet:: a, b, c   c                                d                     piirteet:: a, b, d, e
                                                          e

                             Luokka BB                        Luokka C
                              Luokka                           Luokka C




                                         f               piirteet:: a, b, d, e, f


                                             Luokka D
                                              Luokka D
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
Luokkahierarkia ja kerroksittaisia olioita
               A
               A


                            A        A

           B
           B       C
                   C
                            C        C

                                   C-olio
                            D
               D
               D
                            F

                          F-olio
           E
           E       F
                   F
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
Periytyminen - esimerkkejä
                            Henkilö
                       sosiaaliturvatunnus
                       nimi
                       ikö
                       pituus
                       paino
                       osoite
                       puhelinnumero
                       kotipaikka




                           Työntekijä
                    henkilönumero
                    työsuhteen alkamispäivä
                    työsuhteen loppumispäivä
                    kuukausipalkka
                    työosoite
                    työpuhelinnumero
                    osasto




Ohjelmoija   Suunnittelija            Päällikkö                 Asiantuntija




                        Projektipäällikkö    Ryhmäpäällikkö   Tietokanta-asiantuntija   Käyttöliittymäasiantuntija   Menetelmäasiantuntija
Periytyminen - esimerkkejä (jatkoa)
                                           Alkoholijuoma
                                           nimi
                                           hinta
                                           tuotenumero
                                           kuvaus
                                           alkoholipitoisuus
                                           alkuperämaa
                                           pullokoko
                                           pakkauskoko
                                           valmistaja




       Viini   Juomasekoitus   Likööri   Katkero      Olut     Siideri   Long drink   Glögi
Periytyminen - esimerkkejä (jatkoa)
            Alkoholijuoma
            nimi
            hinta
            tuotenumero
            kuvaus
            alkoholipitoisuus
            alkuperämaa
            pullokoko
            pakkauskoko
            valmistaja




                Olut
               oluttyyppi




IV A-olut    Vahva olut         III olut
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
           Ilmojenkorkeajännitys, Merten korkeajännitys, Aavikon
            korkeajännitys, Viidakon korkeajännitys...
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)
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
Yksittäisperiytyminen
 Jokaisella luokalla on enintään yksi yliluokka
 Luokkahierarkia on puu
 Oliokielissä Java ja Smalltalk ainoastaan yksittäisperiytyminen
  on mahdollista
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.”
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
Moniperiytymisen ongelmia
 Monimutkaiset periytymissuhteet, vaikea hallita
 Nimikonfliktit
    Perii samannimisen ominaisuuden eri teitä
    Kumpi voimassa?
    Ratkaisuja
       Kielletty

       Uudelleennimeäminen

       Yhdistyminen
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
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".
Moniperiytyminen (jatkoa)
                   ajokortti              ajokortti
                                           virheitä
                   myöntö-                tilitys-
                   vuosi                  numero
                Kuljettaja
                Kuljettaja         Rahastaja
                                    Kuljettaja




                   alue
                       Taksinkuljettaja
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
Toistuva periytyminen (jatkoa)
             nimi                                      nimi                      nimi
                          Henkilö                   Henkilö                 Henkilö


              ajokortti                 ajokortti
                                         virheitä       ajokortti                  ajokortti
                                                                                   virheitä
             myöntö-                   tilitys-        myöntö-                   tilitys-
             vuosi                     numero          vuosi                     numero
          Kuljettaja
           Kuljettaja           Rahastaja
                                  Kuljettaja        Kuljettaja
                                                     Kuljettaja          Rahastaja
                                                                           Kuljettaja




             alue                                      alue
                    Taksinkuljettaja                          Taksinkuljettaja
Luokkahierarkian linearisointi

 A
 A          B
            B                         A
                                      A


                                      B
                                      B

      C
      C


                                          C
                                          C
                       A
                       A




                              B
                              B




 luokkahierarkian linearisointi   C
                                  C
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
Virtuaalioperaatiot
 Virtuaaliset operaatiot
    Avoin virtuaalioperaatio
       Ilman runkoa

       Runko jälkeläisluokissa

       Luokalla ei voi olla ilmentymiä: abstrakti luokka

    Kiinnitetty virtuaalioperaatio
       Sisältää (oletus) rungon
Avoin virtuaalioperaatio - esimerkki

                                        Henkilö
                                 nimi
                                 ikä

                                 ristiminen(nimi : String)
                                 {abstract} tervehdi()
                                 vanhene()
                                 sano(viesti : String)




                     Mies                                    Nainen

                    tervehdi()                               tervehdi()
                    kumarrus()                               niiaus()
    sano("Moro!")                                                         sano("Hei")
    kumarrus()                                                            niiaus()
Kiinnitetty virtuaalioperaatio - esimerkki

                                            Henkilö
                                     nimi
                                     ikä

                                     ristiminen(nimi : String)
                                     tervehdi()
                                     vanhene()
                                     sano(viesti : String)
    sano("Tervehdys")




                         Mies                                    Nainen

                        tervehdi()                               tervehdi()
                        kumarrus()                               niiaus()
    kumarrus()                                                                niiaus()
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ä?
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


                                h                h                     h
                                     Henkilö          Henkilö               Henkilö


                                     Nainen                Mies

                                    Henkilö h;       Henkilö h;            Henkilö h;
                                    ...              ...                   ...
                                    h = new          h = new Mies();       h = new
                                    Nainen();                              Henkilö();
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
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
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
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

More Related Content

Similar to Johdatus oliopohjaiseen ajatteluun

Mihin robotit hajoavat?
Mihin robotit hajoavat?Mihin robotit hajoavat?
Mihin robotit hajoavat?
Integrata Oy
 
02 - Johdanto EAI 1 (BD2226 Tietojärjestelmien integrointi)
02 - Johdanto EAI 1 (BD2226 Tietojärjestelmien integrointi)02 - Johdanto EAI 1 (BD2226 Tietojärjestelmien integrointi)
02 - Johdanto EAI 1 (BD2226 Tietojärjestelmien integrointi)
Jarmo Talvivaara
 
Koodiaapinen MOOC - keynote
Koodiaapinen MOOC - keynoteKoodiaapinen MOOC - keynote
Koodiaapinen MOOC - keynote
Tiina Partanen
 
Johdatus ohjelmointiin
Johdatus ohjelmointiinJohdatus ohjelmointiin
Johdatus ohjelmointiin
JukkaWallenius
 
03 - Johdanto EAI 2 (BD2226 Tietojärjestelmien integrointi)
03 - Johdanto EAI 2 (BD2226 Tietojärjestelmien integrointi)03 - Johdanto EAI 2 (BD2226 Tietojärjestelmien integrointi)
03 - Johdanto EAI 2 (BD2226 Tietojärjestelmien integrointi)
Jarmo Talvivaara
 
Net ohjelmointi kertaus
Net ohjelmointi kertausNet ohjelmointi kertaus
Net ohjelmointi kertausTimo Tanila
 
Open mind 2010_workshop_elias_aarnio
Open mind 2010_workshop_elias_aarnioOpen mind 2010_workshop_elias_aarnio
Open mind 2010_workshop_elias_aarnio
eliasaarnio
 
Windows 7 - uudet ominaisuudet
Windows 7 - uudet ominaisuudetWindows 7 - uudet ominaisuudet
Windows 7 - uudet ominaisuudet
Vaihde 7
 
System Center 2012 - tulevaisuuden teknologiaa - saatavilla nyt!
System Center 2012 - tulevaisuuden teknologiaa - saatavilla nyt!System Center 2012 - tulevaisuuden teknologiaa - saatavilla nyt!
System Center 2012 - tulevaisuuden teknologiaa - saatavilla nyt!
Jarno Mäki
 
System Center 2012 - tulevaisuuden teknologiaa - saatavilla nyt!
System Center 2012 - tulevaisuuden teknologiaa - saatavilla nyt!System Center 2012 - tulevaisuuden teknologiaa - saatavilla nyt!
System Center 2012 - tulevaisuuden teknologiaa - saatavilla nyt!Salcom Group
 
GUIDE_PROJECT_MANAGERS_MEMOLIST_ES_2020
GUIDE_PROJECT_MANAGERS_MEMOLIST_ES_2020GUIDE_PROJECT_MANAGERS_MEMOLIST_ES_2020
GUIDE_PROJECT_MANAGERS_MEMOLIST_ES_2020
Eero Siljander
 
Dev ops atlassianway-final-2017-10
Dev ops atlassianway-final-2017-10Dev ops atlassianway-final-2017-10
Dev ops atlassianway-final-2017-10
Ambientia
 
Luento SFS:n seminaarissa 09.9.2009
Luento SFS:n seminaarissa 09.9.2009Luento SFS:n seminaarissa 09.9.2009
Luento SFS:n seminaarissa 09.9.2009reijoju
 
Sovellusvirtualisointi - Mitä missä milloin 2015
Sovellusvirtualisointi - Mitä missä milloin 2015Sovellusvirtualisointi - Mitä missä milloin 2015
Sovellusvirtualisointi - Mitä missä milloin 2015
Teemu Tiainen
 
WOA: Web APIt
WOA: Web APItWOA: Web APIt
WOA: Web APItExove
 
AgileJKL Meetup 2016 - Antti Vartiainen
AgileJKL Meetup 2016 - Antti VartiainenAgileJKL Meetup 2016 - Antti Vartiainen
AgileJKL Meetup 2016 - Antti Vartiainen
Digia Plc
 
Avoin lähdekoodi Suomessa
Avoin lähdekoodi SuomessaAvoin lähdekoodi Suomessa
Avoin lähdekoodi Suomessa
Matti Saastamoinen
 
Nebula Cloud 9, for Software development Professional
Nebula Cloud 9, for Software development ProfessionalNebula Cloud 9, for Software development Professional
Nebula Cloud 9, for Software development Professional
Markus Vuorinen
 
Nebula pilvi 9 kehittäjille - tukemassa ketterää kehitystä
Nebula pilvi 9 kehittäjille - tukemassa ketterää kehitystäNebula pilvi 9 kehittäjille - tukemassa ketterää kehitystä
Nebula pilvi 9 kehittäjille - tukemassa ketterää kehitystä
Nebula Oy
 
Mystes Integraatioaamupala - Ratkaisuja järjestelmäintegrointien tyypillisiin...
Mystes Integraatioaamupala - Ratkaisuja järjestelmäintegrointien tyypillisiin...Mystes Integraatioaamupala - Ratkaisuja järjestelmäintegrointien tyypillisiin...
Mystes Integraatioaamupala - Ratkaisuja järjestelmäintegrointien tyypillisiin...
Mystes
 

Similar to Johdatus oliopohjaiseen ajatteluun (20)

Mihin robotit hajoavat?
Mihin robotit hajoavat?Mihin robotit hajoavat?
Mihin robotit hajoavat?
 
02 - Johdanto EAI 1 (BD2226 Tietojärjestelmien integrointi)
02 - Johdanto EAI 1 (BD2226 Tietojärjestelmien integrointi)02 - Johdanto EAI 1 (BD2226 Tietojärjestelmien integrointi)
02 - Johdanto EAI 1 (BD2226 Tietojärjestelmien integrointi)
 
Koodiaapinen MOOC - keynote
Koodiaapinen MOOC - keynoteKoodiaapinen MOOC - keynote
Koodiaapinen MOOC - keynote
 
Johdatus ohjelmointiin
Johdatus ohjelmointiinJohdatus ohjelmointiin
Johdatus ohjelmointiin
 
03 - Johdanto EAI 2 (BD2226 Tietojärjestelmien integrointi)
03 - Johdanto EAI 2 (BD2226 Tietojärjestelmien integrointi)03 - Johdanto EAI 2 (BD2226 Tietojärjestelmien integrointi)
03 - Johdanto EAI 2 (BD2226 Tietojärjestelmien integrointi)
 
Net ohjelmointi kertaus
Net ohjelmointi kertausNet ohjelmointi kertaus
Net ohjelmointi kertaus
 
Open mind 2010_workshop_elias_aarnio
Open mind 2010_workshop_elias_aarnioOpen mind 2010_workshop_elias_aarnio
Open mind 2010_workshop_elias_aarnio
 
Windows 7 - uudet ominaisuudet
Windows 7 - uudet ominaisuudetWindows 7 - uudet ominaisuudet
Windows 7 - uudet ominaisuudet
 
System Center 2012 - tulevaisuuden teknologiaa - saatavilla nyt!
System Center 2012 - tulevaisuuden teknologiaa - saatavilla nyt!System Center 2012 - tulevaisuuden teknologiaa - saatavilla nyt!
System Center 2012 - tulevaisuuden teknologiaa - saatavilla nyt!
 
System Center 2012 - tulevaisuuden teknologiaa - saatavilla nyt!
System Center 2012 - tulevaisuuden teknologiaa - saatavilla nyt!System Center 2012 - tulevaisuuden teknologiaa - saatavilla nyt!
System Center 2012 - tulevaisuuden teknologiaa - saatavilla nyt!
 
GUIDE_PROJECT_MANAGERS_MEMOLIST_ES_2020
GUIDE_PROJECT_MANAGERS_MEMOLIST_ES_2020GUIDE_PROJECT_MANAGERS_MEMOLIST_ES_2020
GUIDE_PROJECT_MANAGERS_MEMOLIST_ES_2020
 
Dev ops atlassianway-final-2017-10
Dev ops atlassianway-final-2017-10Dev ops atlassianway-final-2017-10
Dev ops atlassianway-final-2017-10
 
Luento SFS:n seminaarissa 09.9.2009
Luento SFS:n seminaarissa 09.9.2009Luento SFS:n seminaarissa 09.9.2009
Luento SFS:n seminaarissa 09.9.2009
 
Sovellusvirtualisointi - Mitä missä milloin 2015
Sovellusvirtualisointi - Mitä missä milloin 2015Sovellusvirtualisointi - Mitä missä milloin 2015
Sovellusvirtualisointi - Mitä missä milloin 2015
 
WOA: Web APIt
WOA: Web APItWOA: Web APIt
WOA: Web APIt
 
AgileJKL Meetup 2016 - Antti Vartiainen
AgileJKL Meetup 2016 - Antti VartiainenAgileJKL Meetup 2016 - Antti Vartiainen
AgileJKL Meetup 2016 - Antti Vartiainen
 
Avoin lähdekoodi Suomessa
Avoin lähdekoodi SuomessaAvoin lähdekoodi Suomessa
Avoin lähdekoodi Suomessa
 
Nebula Cloud 9, for Software development Professional
Nebula Cloud 9, for Software development ProfessionalNebula Cloud 9, for Software development Professional
Nebula Cloud 9, for Software development Professional
 
Nebula pilvi 9 kehittäjille - tukemassa ketterää kehitystä
Nebula pilvi 9 kehittäjille - tukemassa ketterää kehitystäNebula pilvi 9 kehittäjille - tukemassa ketterää kehitystä
Nebula pilvi 9 kehittäjille - tukemassa ketterää kehitystä
 
Mystes Integraatioaamupala - Ratkaisuja järjestelmäintegrointien tyypillisiin...
Mystes Integraatioaamupala - Ratkaisuja järjestelmäintegrointien tyypillisiin...Mystes Integraatioaamupala - Ratkaisuja järjestelmäintegrointien tyypillisiin...
Mystes Integraatioaamupala - Ratkaisuja järjestelmäintegrointien tyypillisiin...
 

Johdatus oliopohjaiseen ajatteluun

  • 1. Johdatus oliopohjaiseen ajatteluun Pasi Kellokoski
  • 2. 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)
  • 3. Ohjelmointiparadigmat  Paradigma = esikuva, malli, kaava  Ohjelmointiparadigma on tapa kuvata erilaisten järjestelmien rakennetta ja toimintaa
  • 4. Ohjelmointiparadigmoja  Proseduraalinen (esim. Pascal, Ada, Modula-2, C)  Funktionaalinen (Lisp, Scheme)  Logiikkaohjelmointi (Prolog)  Tietokantaohjelmointi (SQL)  Olioperustainen (Smalltalk, C++, Java)
  • 5. Perinteinen osittava ohjelmistokehitys toiminnan karkea kuvaus 1. tarkennus- askel lopullinen koodi
  • 6. 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
  • 7. 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
  • 8. Olioperustainen ohjelmistokehitys Sovellus 1 Sovelluksen käsitemaailma Sovellus 2 Sovellukseen liittyviä käsitteitä Luokkia ja niiden ja niiden välisiä suhteita välisiä suhteita
  • 9. Syitä oliopohjaiseen ajatteluun  70-luvulla ”Ohjelmistokriisi”  Ylläpidon ja muutosten hallinnan ongelmat  Koodin elinikä ja uudelleenkäyttö
  • 10. 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 Rutiinikorjauksia  9% rutiinikorjauksia Hätäkorjauksia Käyttäjien uusia vaatimuksia Tietoesitysten muutoksia
  • 11. Syitä oliopohjaiseen ajatteluun (jatkoa)  Uudet vaatimukset johtavat ohjelmiston rakenteen muuttamiseen  Yleisrakenne riippumattomaksi  Toiminnallisista muutoksista  Tietoesitysten muutoksista  Pieni vaatimusmuutos <-> pieni koodimuutos
  • 12. 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
  • 13. Syitä oliopohjaiseen ajatteluun (jatkoa)  Vastaa hyvin reaalimaailman konkreettisia ja abstrakteja asioita  Olioperustainen ohjelma simuloi tapahtumia  Suora liitäntä todellisuuteen  Ominaisuudet  Käyttäytyminen  Palvelut
  • 14. 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
  • 15. Syitä oliopohjaiseen ajatteluun (jatkoa)  Kuitenkin muistettava että:  Uudelleenkäytettävyys huomioitava suunnittelussa  Olioperustainen ohjelmistokehitys voi viedä enemmän aikaa
  • 16. 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...)
  • 17. 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)
  • 18. 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
  • 19. 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.)
  • 20. Olioperustaisuus tänään (jatkoa)  Yleisesti: oliolähestymistapa on levinnyt mm. ohjelmointiin, tietojärjestelmien suunnitteluun, tietojärjestelmien analyysiin, liiketoimintojen analyysiin, strategiseen suunnitteluun
  • 21. 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…)
  • 22. Olioajattelu  Ohjelmiston rakentamisesta tulee systemaattinen, hallittavissa oleva prosessi, jossa sovelluksen käsiteanalyysistä johdetaan vähitellen ajettavissa oleva koodi
  • 23. Oliosuuntautuneisuuden tausta  Käsitteemme muodostuvat havainnointimme perustalta  Käsitteitä muodostuu todellisista ja kuvitteellisista todellisuuden ilmentymistä
  • 24. 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
  • 25. 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
  • 26. Olio (jatkoa)  Sisältää  Tietoja  Toimintoja  Tällaista tiedon ja siihen liittyvien toimintojen pakkaamista yhdeksi kokonaisuudeksi kutsutaan ohjelmistotekniikassa usein kapseloinniksi
  • 27. Proseduraalinen ohjelmointi vs. olio-ohjelmointi tietorakenteet + toimintorakenne kapselointi olio = tieto + toiminnot
  • 28. 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
  • 29. Olio (jatkoa)  Kuuluu aina johonkin luokkaan, mutta vain yhteen luokkaan
  • 30. Attribuutti  Olion pystyy tallettamaan tietoa olion attribuutteihin  Attribuutti kuvaa luokkaan kuuluvien olioiden ominaisuutta (esim. nimi, ikä, paino)  Attribuuttien arvojen yhdistelmiä kutsutaan olion tiloiksi
  • 31. 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
  • 32. 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
  • 33. 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)
  • 34. 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
  • 35. 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)
  • 36. 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
  • 37. 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!
  • 38. 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
  • 39. Eri tyyppisiä olioita  Tekninen olio (Merkkijono, Lista)  Käyttöliittymäolio (Ikkuna, Painike)  Liiketoimintaolio (Tilaus, Maksu, Asiakas)  Toimialueen olio (Operaattori, Tilaaja, Palvelu, Yhteys)  ...
  • 40. 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)
  • 41. 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
  • 42. 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
  • 43. 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ä"
  • 44. Abstraktien tietotyyppien etuja  Vähentää osien riippuvuuksia toisistaan  Rakennettavuus  Ylläpidettävyys  Toteutus voidaan vaihtaa muuttamalla sisäistä osaa
  • 45. Olio vs. abstrakti tyyppi  Olio vs. abstrakti tyyppi  Tiedot ja toiminta yhteen  Tarjottavat palvelut  Suojaus
  • 46. 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ä
  • 47. 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
  • 48. 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)
  • 49. 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
  • 50. Olion luominen 2 a Luokka C p int a; luonti int a; void p() {...} Luokan C void p() {...} ilmentymä luonti 3 a p Luokan C ilmentymä
  • 51. 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ä
  • 52. 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)
  • 53. Esimerkki - Luokka Ihminen  Attribuutteja  Operaatioita  Nimi  Kävele  Lempinimi  Juokse  Syntymäaika  Syö  Pituus  Juo  Paino  Nuku  Syntymäpaikka  ...  Asuinpaikka  ...
  • 54. Esimerkki - Olio Teemu Selänne  Attribuutteja  Operaatioita  Nimi: Teemu Selänne  Kävele  Lempinimi: The Finnish Flash  Juokse  Syntymäaika: 3.7.1970  Syö  Pituus: 183 cm  Juo  Paino: 93 kg  Nuku  Syntymäpaikka: Helsinki  ...  Asuinpaikka: Anaheim  ...
  • 55. Esimerkki - Luokka Kaupunki  Attribuutteja  Operaatioita  Nimi  ...  Pinta-ala  Väkiluku  Väestöntiheys  Veroprosentti  Työttömyysaste  ...
  • 56. Esimerkki - Olio Tampere  Attribuutteja  Operaatioita  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 %  ...
  • 57. Esimerkki - Olio Helsinki  Attribuutteja  Operaatioita  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 %  ...
  • 58. Esimerkki - Luokka Auto  Attribuutteja  Operaatioita  Merkki  Kaasuta  Malli  Jarruta  Ovet  Vaihda vaihde  Vaihteet  Käännä oikealle  Moottori  Käännä vasemmalle  Teho  ...  Huippunopeus  Kulutus  Rekisterinumero  ...
  • 59. Esimerkki - Olio Auto X  Attribuutteja  Operaatioita  Merkki: Chrysler  Kaasuta  Malli: PT Cruiser Classic  Jarruta  Ovet: 5  Vaihda vaihde  Vaihteet: Manuaali  Käännä oikealle  Moottori: 2000 ccm  Käännä vasemmalle  Teho: 104 kW  ...  Huippunopeus: 190 km/h  Kulutus: 7 - 8.7 - 11.5 l/100km  Rekisterinumero ABC-123  ...
  • 60. 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
  • 61. 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?
  • 62. 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
  • 63. 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
  • 64. Esimerkki - Pankkiautomaatti  Luokkia  Asiakas  Pankkiautomaatti  Pankki  Pankkikortti  Käteinen  Pankin tietoliikenneverkko  Pankin keskustietokone  Pankkitili  Transaktio  ...
  • 65. Esimerkki - Kurssille rekisteröitymisjärjestelmä  Luokkia  Kurssi  Kurssitoteutus  Opiskelija  Opettaja  Luokka  Tentti  Rekisteröityminen  Kurssin arvosana  ...
  • 66. Esimerkki - Tekstiviestijärjestelmä  Luokkia  Lähettäjä  Vastaanottaja  SMS viesti  Puhelin  Tietokone  Ryhmä  Verkko  ...
  • 67. Periytyminen  Luokka voi periä toisen luokan ominaisuudet eli olemassa olevaa luokkaa voidaan jalostaa erikoistuneemmaksi  Perintärelaatiossa perittyä luokkaa kutsutaan yliluokaksi ja johdettua luokkaa aliluokaksi
  • 68. Luokkahierarkia a piirteet:: a, b b Luokka A Luokka A piirteet:: a, b, c c d piirteet:: a, b, d, e e Luokka BB Luokka C Luokka Luokka C f piirteet:: a, b, d, e, f Luokka D Luokka D
  • 69. 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
  • 70. Luokkahierarkia ja kerroksittaisia olioita A A A A B B C C C C C-olio D D D F F-olio E E F F
  • 71. 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
  • 72. Periytyminen - esimerkkejä Henkilö sosiaaliturvatunnus nimi ikö pituus paino osoite puhelinnumero kotipaikka Työntekijä henkilönumero työsuhteen alkamispäivä työsuhteen loppumispäivä kuukausipalkka työosoite työpuhelinnumero osasto Ohjelmoija Suunnittelija Päällikkö Asiantuntija Projektipäällikkö Ryhmäpäällikkö Tietokanta-asiantuntija Käyttöliittymäasiantuntija Menetelmäasiantuntija
  • 73. Periytyminen - esimerkkejä (jatkoa) Alkoholijuoma nimi hinta tuotenumero kuvaus alkoholipitoisuus alkuperämaa pullokoko pakkauskoko valmistaja Viini Juomasekoitus Likööri Katkero Olut Siideri Long drink Glögi
  • 74. Periytyminen - esimerkkejä (jatkoa) Alkoholijuoma nimi hinta tuotenumero kuvaus alkoholipitoisuus alkuperämaa pullokoko pakkauskoko valmistaja Olut oluttyyppi IV A-olut Vahva olut III olut
  • 75. 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  Ilmojenkorkeajännitys, Merten korkeajännitys, Aavikon korkeajännitys, Viidakon korkeajännitys...
  • 76. 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)
  • 77. 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
  • 78. Yksittäisperiytyminen  Jokaisella luokalla on enintään yksi yliluokka  Luokkahierarkia on puu  Oliokielissä Java ja Smalltalk ainoastaan yksittäisperiytyminen on mahdollista
  • 79. 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.”
  • 80. 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
  • 81. Moniperiytymisen ongelmia  Monimutkaiset periytymissuhteet, vaikea hallita  Nimikonfliktit  Perii samannimisen ominaisuuden eri teitä  Kumpi voimassa?  Ratkaisuja  Kielletty  Uudelleennimeäminen  Yhdistyminen
  • 82. 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
  • 83. 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".
  • 84. Moniperiytyminen (jatkoa) ajokortti ajokortti virheitä myöntö- tilitys- vuosi numero Kuljettaja Kuljettaja Rahastaja Kuljettaja alue Taksinkuljettaja
  • 85. 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
  • 86. Toistuva periytyminen (jatkoa) nimi nimi nimi Henkilö Henkilö Henkilö ajokortti ajokortti virheitä ajokortti ajokortti virheitä myöntö- tilitys- myöntö- tilitys- vuosi numero vuosi numero Kuljettaja Kuljettaja Rahastaja Kuljettaja Kuljettaja Kuljettaja Rahastaja Kuljettaja alue alue Taksinkuljettaja Taksinkuljettaja
  • 87. Luokkahierarkian linearisointi A A B B A A B B C C C C A A B B luokkahierarkian linearisointi C C
  • 88. 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
  • 89. Virtuaalioperaatiot  Virtuaaliset operaatiot  Avoin virtuaalioperaatio  Ilman runkoa  Runko jälkeläisluokissa  Luokalla ei voi olla ilmentymiä: abstrakti luokka  Kiinnitetty virtuaalioperaatio  Sisältää (oletus) rungon
  • 90. Avoin virtuaalioperaatio - esimerkki Henkilö nimi ikä ristiminen(nimi : String) {abstract} tervehdi() vanhene() sano(viesti : String) Mies Nainen tervehdi() tervehdi() kumarrus() niiaus() sano("Moro!") sano("Hei") kumarrus() niiaus()
  • 91. Kiinnitetty virtuaalioperaatio - esimerkki Henkilö nimi ikä ristiminen(nimi : String) tervehdi() vanhene() sano(viesti : String) sano("Tervehdys") Mies Nainen tervehdi() tervehdi() kumarrus() niiaus() kumarrus() niiaus()
  • 92. 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ä?
  • 93. 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 h h h Henkilö Henkilö Henkilö Nainen Mies Henkilö h; Henkilö h; Henkilö h; ... ... ... h = new h = new Mies(); h = new Nainen(); Henkilö();
  • 94. 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
  • 95. 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
  • 96. 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
  • 97. 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