Luokka (ohjelmointi)

Wikipedia
Loikkaa: valikkoon, hakuun
Tämä artikkeli käsittelee olio-ohjelmoinnin luokkaa. Sanan muita merkityksiä on erillisellä täsmennyssivulla.


Luokka (class) tarkoittaa olio-ohjelmoinnissa olion tyyppiä.[1] Luokan ohjeiden mukaan luodaan ohjelmaa ajettaessa olio (object).

Luokan ja olion suhde[muokkaa | muokkaa wikitekstiä]

Ajatus luokan ja olion suhteesta pohjautuu Platonin ideaoppiin. Olio vastaa Platonin aistimaailman jäljitelmää. Luokka eli idea antaa rakennusohjeet olion muodostamiselle: se määrittelee olion rakenteen ja käyttäytymisen. Havainnollistava esimerkki on piparkakkumuotti: luokka on kuin metallinen piparimuotti, jolla tehdään taikinasta pipari-olioita. Kukin pipari on erilainen, vaikka kaikissa käytettiin samaa mallia. Esimerkissä huomataan myös luokan rooli: vaikka luokka-piparimuotilla on mahdollista tehdä pipareita, ei luokka kuitenkaan itse ole syötävä pipari, vaan pelkkä mallina toimiva muotti. Konkreettinen ero syntyy myös ohjelmaa ajettaessa: luokat kirjoitetaan ohjelmakoodiin, oliot syntyvät luokista vasta sitten kun ohjelma ajetaan.

  • Esimerkiksi 1. Talon pohjapiirustus on luokka, jonka pohjalta voidaan luoda olio talo.
  • Esimerkiksi 2. DNA on luokka jonka pohjalta voidaan luoda olio proteiini.

Tietokoneohjelmissa luokassa määritellään lisäksi tiedot siitä, miten olioita käyttään sen jälkeen kun ne on valmistettu.

Luokan muodostaminen olioksi[muokkaa | muokkaa wikitekstiä]

Jotta luokasta voidaan muodostaa olio, tarvitaan kolmas osapuoli, joka lukee ja tulkitsee luokan ja muodostaa siitä toimivan olion. Esimerkiksi talon pohjapiirustus ei yksinään tee taloa, vaan tarvitaan vielä lisäksi

  • Raaka-aineita
  • Osaavaa työvoimaa, joka osaa rakentaa kohteen

Tietokone-ohjelmien tapauksessa raaka-aineena toimii tietojärjestelmän muisti (paikallinen tai hajautettu), jonne olioiden tiedot talletetaan. Työvoimana toimii tietokoneen prosessori, joka lukee olion piirustuksista kuinka se rakennetaan. Olion valmistusvaiheessa tietokone luo varaa osoite-avaruuden, jonne olio lopullisesti sijoitetaan sekä sen yhteyteen olion yhteyssä etukäteen määritellyt funktiot (proseduurit). Olioiden funktioiden toteutustapa on proseduraalinen ohjelmointikieli ja niiden erikoispiirteenä on, että nämä funkiot pystyvät lukemaan myös niitä muuttujia, jotka on määritelty yksityiksiksi tiedoiksi (engl. private variables).

Periytyminen[muokkaa | muokkaa wikitekstiä]

Olio-ohjelmoinnissa käytetään käsitettä periytyminen kun uusi luokka saa (perii) jo olemassa olevan luokan ominaisuudet. Periytymisen ansiosta ohjelmoinnin työmäärä vähenee, kun aiemmin tehtyjä luokkia voidaan käyttää hyväksi vain tarpeelliset komponentit lisäämällä. Sellaista luokkaa, josta on periytetty muita luokkia, kutsutaan periytetyn luokan yläluokaksi, ja periytettyä luokkaa vastaavasti alaluokaksi (tai aliluokaksi). Alaluokassa voidaan peittää yläluokan ominaisuuksia sekä lisätä uusia.

Esimerkiksi luokka "kissa" voi periä luokan "eläin". Tällöin kissaluokalla on samat ominaisuudet ja toiminnot eläinluokalla. Tässä tapauksessa eläin olisi yläluokka ja kissa alaluokka.

  • Esimerkiksi 1. Piirto-ohjelmassa voisi olla luokka 'kuvio' ja tällä aliluokat 'kolmio' ja 'ympyrä'. Ikkunaa piirrettäessä käydään läpi listaa 'kuvio'-luokkaan kuuluvista olioista ja pyydetään jokaista oliota piirtämään itsensä. Jokainen kuvio piirtää itsensä oikein sen mukaan, onko kyseessä 'kolmio' vai 'ympyrä'. Kun ikkunan piirto ei ota kantaa siihen, mitä kuvioita ikkunassa on, on helppo laajentaa ohjelmaa periyttämällä kuvio-luokasta vaikkapa 'neliö'-luokka.

Joissakin ohjelmointikielissä yhdellä luokalla voi olla vain yksi yläluokka, joissakin taas rajattomasti. Jos yläluokkia voi olla useita, käytetään termiä moniperintä. Moniperintää tukemattomissa ohjelmointikielissä, kuten Javassa, ongelman voi kiertää rajapintaluokkia käyttämällä.

Joissakin ohjelmointikielissä on olemassa myös abstrakteja luokkia, joista ei voi luoda ilmentymiä (olioita).

Viitteet[muokkaa | muokkaa wikitekstiä]

  1. Päivi Hietanen: C++ ja olio-ohjelmointi, s. 8. Teknolit, 2000. ISBN 951-846-000-0.