Rajattomat mahdollisuudet rajapinnoilla!

Mitä hyötyä on rajapinnoista?

Kurssin alkaessa en tiennyt, mikä on rajapinta. Se vilahteli salaperäisesti eri yhteyksissä luennoilla, harkoissa ja ohjelmointikirjassa. Sana kuulosti minusta aika hienolta. Yritin miettiä, mitä se voisi tarkoittaa. Raja ja pinta… se voisi olla pinta jonkin rajassa, vaikka kahden eri asian välissä. Sitten jostain kuulin, että niitä sanottiin myös liittymiksi. Periaatteessa ihan järkevää, liittymä on yleensä kahden instanssin välissä, ajattelin. Sanojen varsinainen merkitys jäi kuitenkin vielä hieman epäselväksi. Kun käsite ”toteuttaa rajapinnan” tuli eteen, olin jo aivan sekaisin. Miksi ohjelmoinnissa jonkun pitäisi toteuttaa jotakin, joka on jossain välissä? Onko siitä jotakin hyötyä?

Konkreettisesti rajapinnat tulivat eteen neljännessä Java-tehtävässä. Piti luoda oma rajapinta (interface) nimeltään Sektorintarkkailija. Rajapinnan olemus alkoi valjeta, kun huomasin, että määrittelemällä rajapinnalle metodeja, jotka kaikkien sen toteuttavien luokkien pitää ylikirjoittaa eli toteuttaa omalla tavallaan, pystyin käsittelemään kahta täysin erityyppistä oliota, eli Ninjaa tai Tryffeliä samalla tavalla. Muuta yhteistähän niillä ei ollut kuin se, että molempien oli tarpeellista tarkkailla sijaintisektoriaan. Asiat, mitä Ninja tai Tryffeli halusi tehdä esimerkiksi olennon saavuttua sektoriin, olivat erilaisia, mutta tarkkailu itsessään oli samanlaista molemmilla. Kylläpä rajapinnat ovat jänniä!

Toisaalta, sen verran kuin tiedän luokista ja perimisestä, asiat olisi voitu hoitaa toisellakin tavalla. Olisin voinut tehdä esimerkiksi abstraktin yliluokan, jonka perillisiä nämä kaksi Sektorintarkkailijaa sitten olisivat. Peritytkin metodit voidaan ylikirjoittaa jokaisen aliluokan tarpeiden mukaisiksi. Mitä järkeä koko tässä rajapintatouhussa sitten oikein on?

Esimerkissäni yliluokka tuottaisi kuitenkin perustavanlaatuisen ongelman. Ninja on selkeästi instanssiltaan olento, kuten merirosvo ja sienestäjäkin. Tryffeli taas on sienikuntaan kuuluva olio, jollaisia ovat myös jalkasienet, herkkusienet ja myrkkysienet. Kun ohjelman oleellisimmat luokat ovat tälläisessä sukulaisuussuhteessa keskenään, ne kannattaa periyttää yliluokasta, joko abstraktista tai konkreettisesta. Terve järki sanoo, että olennot ja sienet kannattaa pitää erillään, eli periyttää ne omista yliluokistaan. Tällöin sekä ninjalla että tryffelillä olisi molemmilla omat yliluokkansa, Olento ja Sieni. Javassa luokka ei voi periä useampaa kuin yhden luokan, joten Sektorintarkkailija-yliluokan luominen vielä lisäksi ei onnistuisi. Tässä kohtaa rientääkin avuksi rajapinta, sillä se ei välitä kuinka monta muuta rajapintaa toteutat, kunhan toteutat kaikki sen määräämät metodit!

Luokkahierarkiat ovat siis ikäänkuin sukuja, mutta kuten oikeassakin elämässä, kaikkea tarpeellista ei voi periä vanhemmilta, vaan se pitää omaksua muualta. Kuten ihmiset, oliotkin voivat olla sekä sukunsa että jonkin muun yhteisön, esimerkiksi työympäristön jäseniä. Kaikkien perheenjäsenten ei tarvitse osata samoja asioita. Jännää, eikö totta! Rajapinnoista on siis oikeasti hyötyä.

– Asta

1 Response to “Rajattomat mahdollisuudet rajapinnoilla!”


  1. 1 ullap tammikuu 19, 2008 12:20 pm

    Ihanasti valittu kuvat❤


Vastaa

Please log in using one of these methods to post your comment:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out / Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out / Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out / Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s





%d bloggers like this: