Luokka (ohjelmointi)

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

Luokan ja olion suhde
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äytetään sen jälkeen kun ne on valmistettu.

Luokan muodostaminen olioksi 

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 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ä funktiot pystyvät lukemaan myös niitä muuttujia, jotka on määritelty yksityiksiksi tiedoiksi ().

Periytyminen
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 (tai kantaluokaksi), 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 kuin 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).

Lähteet 

Olio-ohjelmointi