Rajapintaluokat

Rajapinta esiintyy olio-ohjelmoinnissa useassa eri roolissa. Käsitteenä rajapinnan tarkoitus on kertoa komponentin käyttäjälle, miten sitä on tarkoitus käyttää ja miten sen on tarkoitus toimia. Jokaisella luokalla on myös rajapinta, joka täyttää rajapinnan tehtävän eli kertoo, miten luokan oliot käyttäytyvät ulospäin. Luokkahierarkioissa on varsin tyypillistä, ettei abstrakteissa kantaluokissa määritellä lainkaan toiminnallisuutta vaan ne sisältävät vain kuvauksen rajapinnan funktioista. Lisäksi hierarkiassa törmätään tilanteisiin, joissa jokin toiminnallisuus ei sovi suoraan mihinkään kohtaan periytymispuuta. Tällaisissa tilanteissa hyödyllisiä ovat rajapintaluokat (engl. interface class) eli luokat, jotka toimivat abstrakteina kantaluokkina ilman mitään sisäistä toteutusta. Niiden tehtävänä luokkahierarkiassa on paljastaa pelkkä julkinen rajapinta. Itse rajapinnan toteutus tehdään konkreettisissa luokissa, joiden julkiseen rajapintaan rajapintaluokan määrittämät metodit tarvitaan.

kuva, jossa luokkahierarkia eliöstöstä

Eliöstön luokkahierarkia rajapintaluokkia hyödyntäen

Eliöstöesimerkissä päänvaivaa aiheuttivat olion toiminnallisuuksista mm. liikkuminen ja muniminen. Hierarkisesti näitä toimintoja ei voitu sijoittaa mihinkään yhteiseen kohtaan hierarkiaa. Yllä sama luokkahierarkia on toteutettu hyödyntäen rajapintaluokkia: Liikkuva (Movable) ja Muniva (Oviparous). Nyt luokille yhteinen toiminnallisuus saadaan tuotua niiden rajapintaan käyttämällä rajapintaluokkaa. Kaikki eläimet liikkuvat, joten kantaluokkatasolla Eläimeen otetaan mukaan liikkuminen rajapintaluokan avulla. Näin liikkuminen saadaan myös limasienelle (SlimeMold), vaikka se on eri puolella luokkahierarkiaa muun toiminnallisuutensa kantilta.

Rajapintaluokkien avulla useampi luokka voi siis toteuttaa saman rajapinnan riippumatta niiden suhteesta toisiinsa periytymishierarkiassa. Samoin yksi luokka voi tarvittaessa toteuttaa useampia rajapintoja. Ohjelmointikielissä rajapintaluokat on toteutettu erilaisilla mekanismeilla. Meitä kiinnostavin on luonnollisesti Java, jossa rajapintaluokille on oma luokista erillinen toteutuksensa Interface.

Rajapintaluokat (kesto 7:49)

Mitkä seuraavista pitävät paikkansa rajapintaluokista