OOP-perusasiat
Timo Ahjos 19.5.1999
Miksi OOP on paras ajattelutapa?
Keskeiset OOP-käsitteet
Tietotekniset objektit
Näillä sivuilla lyhennettä OOP, joka tulee sanoista
"Object-Oriented Programming" (oliopohjainen ohjelmointi),
käytetään ohjelmoinnin lisäksi myös hahmottamisesta, analysoinnista,
suunnittelusta ja kaikesta muustakin, missä toimitaan saman "paradigman" pohjalta,
johon oliopohjainen ohjelmointi perustuu. Suomenkielen sana "olio" tuo
helposti mieleen elollisen olennon. Näillä sivuilla käsitellään kuitenkin
lähes yksinomaan elottomia ja abstrakteja olioita. Väärinkäsitysten välttämiseksi
kutsun niitä sen vuoksi mieluummin lainasanaa käyttäen "objekteiksi".
Miksi OOP on paras ajattelutapa?
Koska se lienee ainoa ajattelutapa:-).
Monet isotkin järjestelmät ja organisaatiot on kuitenkin rakennettu OOP-periaatteiden
vastaisesti, ikäänkuin luonnonlakeja rikkoen. Tietokoneiden muistikapasiteetti
on aivan viime vuosiin asti ollut liian vähäinen OOP:n soveltamiseksi
konetasolla arkipäivän tietokonesovelluksissa.
Maailmankaikkeuden voidaan katsoa
ns. kvanttitasolla koostuvan hiukkasista, joilla on toisaalta materiaalista ja
toisaalta energialuonnetta. Elolliset olennot hahmottavat kuitenkin
ympäristönsä koostuvan erilaisista objekteista jäljempänä kuvatulla tavalla. Objektien
hahmotus tapahtuu aina ajattelijan aivoissa. Eri olennot hahmottavat
saman todellisuuden koostuvan erilaisista objekteista. Jokaisen hahmotus
on yhtä oikea ja oikeutettu. "In der Menschenwelt gibt es nur Menschendinge - In der
Libellenwelt gibt es nur Libellendinge". (Ihmisen maailmassa on vain ihmisen
esineitä - sudenkorennon maailmassa on vain sudenkorennon esineitä.)
Keskeiset OOP-käsitteet
- Objekti:
- Objekti (eli olio) on itsenäisenä kokonaisuutena hahmottuva todellisuuden
osa. Esimerkiksi vieressäni oleva kirjahylly on eräs objekti. Sinulla oleva
kirjahylly on toinen objekti. Objekti on aina tietty yksilö, eli sinun hyllysi
on eri objekti kuin minun hyllyni, vaikka ne olisivat aivan samanlaiset.
- Objektiluokka:
- Objektiluokka on abstrakti käsite, jonka ilmentymiä (instances)
yksittäiset objektit ovat. Sinun ja minun kirjahyllyni ovat molemmat objektiluokan
"kirjahylly" ilmentymiä.
- Luokkahierarkia:
- Objektiluokat rakentuvat hierarkisesti. Esim. objektiluokka "kirjahylly"
sisältyy objektiluokkaan "huonekalu". Sisältymisen relaatio
(containership) on yksi OOP:n peruskäsitteistä. Esim. jos Lahdessa lopetettaisiin
huonekalujen valmistus, se tarkoittaisi, että sekä kirjahyllyjen että
pöytien valmistus lopetettaisiin. Siis myös objektiluokka "pöytä" sisältyy
objektiluokkaan "huonekalu".
- Luokan ja objektin ero:
- Objekti voi syntyä kahdella tavalla: Se "instantioidaan" joko objektiluokasta
tai toisesta objektista. Edellistä vastaa se, että kirjahylly tehdään piirustuksista.
Piirustukset kuvaavat tietynlaisen kirjahyllyn samalla tavalla kuin objektiluokka
kuvaa objektin. Kirjahyllyn kuva ei kuitenkaan ole kirjahylly. Vastaavasti
objektiluokka ei ole objekti, vaan objektin kuvaus.
- Ominaisuuksien periytyminen:
- Objektiluokka muodostetaan usein toisesta objektiluokasta. Vastaavasti
objekti syntyy usein toisesta objektista. Syntyessään objektiluokka tai objekti
perii ominaisuuksia siitä objektiluokasta tai objektista, josta se muodostetaan.
Esim. Lundian kirjahyllyn pohjana on objektiluokan "kirjahylly"
yleinen määrittely, johin on lisätty Lundian erityispiirteet. Lundian hylly
on alunperin perinyt kaikki normaalin kirjahyllyn yleiset ominaisuudet, mutta
Lundia sittemmin muuttanut eräitä ominaisuuksia.
- Kapselointi:
- Kapselointi tarkoittaa sitä, että objektit ovat itsenäisiä toimivia
komponentteja, joiden sisäisiin asioihin ulkopuoliset eivät pääse käsiksi.
Kapselointi on kaikkien toimivien järjestelmien elinvoimaisuuden edellytys,
siis yhtä hyvin biologisten olentojen, organisaatioiden kuin tietojärjestelmienkin.
Kirjahyllyn tapauksessa kapselointi tarkoittaa esim. sitä, että myyntipakkaus
sisältää puuosien lisäksi myös tarvittavat ruuvit, hyllynkannattimet,
kokoamisohjeen, ehkä jonkin työkalun, jne. Saadessaan tuollaisen "kapselin"
asiakas saa yhdellä kertaa kaiken sen, mistä kirjahylly koostuu, eikä hänen
tarvitse mennä huonekaluostoksen jälkeen etsimään rautakaupasta siihen sopivia
ruuveja ja muita nippeleitä. Toisaalta huonekaluliike myy vain kokonaisia
kapseleita eikä esim. pura kirjahyllyn myyntipakkausta myydäkseen siitä
pelkät hyllynkannattimet.
- Polymorfismi:
- Polyformismi tarkoittaa monimuotoisuutta siinä mielessä, että sama käsite
voi tarkoittaa eri yhteyksissä yksityiskohdiltaan erilaisia asioita, jotka
tietyllä abstraktiotasolla samaistetaan. Se helpottaa ajattelemista huomattavasti.
Esim. huonekalun "kokoaminen" on tyypillinen polymorfinen ilmaus. Sekä kirjahylly
että pöytä kootaan ja kummankin pakkauksessa on sitä varten ohje. Yksityiskohdissaan
pöydän kokoaminen tapahtuu kuitenkin aivan eri tavalla kuin kirjahyllyn kokoaminen.
Silloin kun ei ole tarpeen mennä yksityiskohtiin, voidaan polymorfisesti todeta,
että kumpikin niistä kootaan oman ohjeensa mukaisesti.
- Tapahtumat ja niiden käsittelyelimet:
- Objektit kommunikoivat ympäristönsä kanssa ottamalla vastaan viestejä,
reagoimalla niihin ja lähettämällä viestejä. Kapseloinnin periaatteisiin kuuluu,
että ulkopuolelta tuleva viesti ei saa päästä suoraan objektin sisäelimiin vaan
se otetaan vastaan objektin ulkopinnalla, jossa saatu viesti arvioidaan.
Objekti reagoi vain sellaisiin viesteihin, joita varten sillä on tapahtuman
käsittelijä (event handler). Esimerkiksi kirjahylly ei reagoi musiikkiin,
mutta se reagoi kuumuuteen.
- Ominaisuudet ja metodit:
- Objekteilla on yleensä paljon erilaisia ominaisuuksia, joista osa on perittyjä
ja osa myöhemmin hankittuja tai muutettuja. Metodeiksi kutsutaan sellaisia
ominaisuuksia, joihin liittyy toimintaa. Esim. kirjahyllyn väri on vain
tavallinen ominaisuus, mutta sen taipumus kaatua tietynlaisissa tilanteissa on
toiminnallinen ominaisuus eli metodi.
Tietotekniset objektit
Hahmottaessaan todellisuutta ja erilaisia asioita ajatellessaan ihminen
soveltaa huomaamattaan kaikkia edellä lueteltuja OOP-käsitteitä.
Ihmisen aivot ovat aina toimineet OOP-periaatteella.
Tietotekniikassa emme käsittele fyysisiä objekteja, kuten kirjahyllyjä.
Sensijaan tarkastelemme sitä informaatiota, joka on aivoissa tai tietokoneessa,
vaikkapa kirjahyllystä. Pystymme luomaan täsmällisen mielikuvan esim.
punaiseksi maalatusta kirjahyllystä nähtyämme valkeaksi maalatun hyllyn.
Meillä on siis aivoissa ensin mielikuva näkemästämme valkeasta hyllystä.
Sitten muutamme tuossa mielikuvassa ominaisuuden "väri=punainen",
jonka jälkeen meillä on mielikuva punaiseksi maalatusta hyllystä.
Mielikuvamme on niin todellinen, että voimme tulostaa sen paperille
värikynillä piirtämällä, vaikka kenelläkään ei olisi punaista kirjahyllyä.
Biologisissa aivoissa on runsaasti lajikohtaisesti valmiiksi koodattua
(hard-coded) aineistoa. Sensijaan tietokoneen "sähköaivot" ovat tyhjät,
kun konetta käynnistetään. dBASE:sta puhuttaessa voimme lähteä siitä,
että objektit ovat olemassa vain tietokoneen muistissa. Ne elävät siellä enintään
niin kauan kuin kone on käynnissä. Analogia ihmisaivoihin toimii, jos
unohdamme fyysiset objektit ja ajattelemme vain sitä informaatiota, mikä
meillä on kustakin asiasta omissa aivoissamme. Esim. minulla on tuolla
pysäköintipaikalla auto, jota voisimme pitää objektina. Toisaalta minulla
on aivoissani mielikuva siitä autosta. Mielikuva pysyy aivoissani, vaikka
auto romutettaisiin. Siis myöskin se mielikuva on todellisuutta ja sitäkin
voidaan pitää objektina.
Edellä sanottu saattaa tuntua aluksi saivartelulta, mutta siihen sisältyy
oivallus, jonka jälkeen vasta aloin ymmärtää dBASE:n objekteja ja luokkahierarkiaa.
Kun tietokone on sammutettuna, sen keskusmuistissa ei ole mitään. Levyillä voi
olla objektiluokkien kuvauksia, mutta ei objekteja. Kun kone ja dBASE-istunto
käynnistetään, koneen keskusmuistiin voidaan luoda eli "instantioida" objekteja
joko objektiluokkien kuvauksista tai toisista objekteista. OOP on sitä,
että ohjelmallisesti luodaan objekteja, joilla on halutut ominaisuudet.
Toimintakin ohjelmoidaan siten, että jollekin objektille annetaan
ominaisuudeksi kyky suorittaa kyseinen tehtävä. OOP-ohjelmoija ei varsinaisesti
ohjelmoi sitä, mitä istunnon aikana tapahtuu (kuten ns. proseduraalisessa
ohjelmoinnissa oli tapana).
Kun ihminen käyttää dBASE-sovellusta, hän aiheuttaa valinnoillaan ja
toimenpiteillään erilaisia tapahtumia.
dBASE-sovellus on tapahtumaohjattu (event driven). Objektit reagoivat
tapahtumiin omien tapahtumakäsittelijöittensä (event handler) mukaisesti,
esim. muuttamalla omia ominaisuuksiaan tai suorittamalla omia metodejaan.
Eräät dBASE-objektit kommunikoivat ulkomaailman kanssa. Esim. SQL-objekteilla
on kyky käsitellä levyillä olevaa dataa ja raportti-objektilla on kyky tulostua
paperille. Siten työn tulos saadaan talteen, vaikka kaikki tietokoneen
keskusmuistissa olevat objektit kuolevatkin istunnon päättyessä.
Sivun alkuun