Mitä hyötyä on perinnästä?

Ensimmäisissä ohjelmointitehtävissä tehdyt luokat kuten Esine ja sen aliluokat Arkku ja Kolikkokasa ym. eivät mitenkään kertoneet minulle perimän tarkoituksesta – mitä hyötyä tästä oikein on? Mitä mieleeni ensimmäisenä tuli oli, että onpas hauska kun kytketään jokin luokka toiseen periyttämällä se toisesta luokasta. Onhan se nyt selvää, että kolikkokasa ja arkku voidaan laskea esineiksi. Mitä pidemmälle kurssi eteni, sitä useammin luokan nimen perään kirjoitettiin sana extends ja jokin toinen luokka. Tämä oli mielestäni vain hauskaa ja loi luokkien välille jonkinlaista yhteenkuuluvuuden tunnetta.

Perinnän tarkoituksesta selvisi minulle eniten viidennessä Java-tehtänässä, jossa luotiin Sikoban luokka, joka siis peri JFramen ja sai näin käyttöönsä kaikki JFramen ominaisuudet ja metodit. Koin elämyksen kun joku assareista harjoituksen aikana neuvoi käyttämään this-sanaa JFramen metodeja kutsuttaessa. Ensin näitä päästiin tietysti etsimään JavaAPIsta ja ”How to use” -kohta oli äärettömän valaiseva. Tässä vaiheessa tajusin, että tämähän itseasiassa tarkoittaakin sitä, että Sikoban-luokka on JFrame ja olisi sama kuin jos Sikoban-luokka pitäisi sisällään kaikki JFramen metodit. Ja taas tunnelmia: oli vain mahtava fiilis kun ikkuna aukeutui näytölle, ja tällä kertaa ihan itse aiheutettuna!

Jos minun nyt pitäisi selittää tärkeimmät asiat perinnästä, sen hyödyt ja käyttötarkoitukset sun muut siitä mitään tietämättömälle puhuisin varmasti ja luottavaisesti, en epäröisi asiassani. Aloittaisin kertomaan luokista ja niiden aliluokista, jotka ”periytetään” näistä yliluokista, ja siitä kuinka aliluokat saavat yliluokkiensa ominaisuudet. Luokalla voi siis olla vain yksi yliluokka, kuten ihmiselläkin vain yksi äiti (isää ei nyt saa ottaa mukaan), mutta monta aliluokkaa, kuten äidillä lapsia. Koetilanteessa joutuisin kuitenkin miettimään sana- ja lausevalintojani, niin selvää perintä kokonaisuudessaan ei minulle vielä ole.

Selittäisin varmasti eläimistä, kissoista ja koirista, ja näiden ilmentymistä eli Mirristä ja Turresta. Luodaan siis luokat Eläin, Kissa ja Koira. Luokat Kissa ja Koira laitetaan perimään luokka Eläin. Eläin-luokan ilmentymät saavat luomisvaiheessa nimen ja painon. Näin on täten myös Kissa ja Koira -luokkien kohdalla. Näille voi kuitenkin antaa nyt jotain uusia ominaisuuksia ja määritellä metodeja, jotka tekevät näiden kahden ilmentymistä eläintä tarkempia ja toisistaan eroavaisia. Koira-luokan ilmentymät voisivat nyt nimen ja painon lisäksi saada ominaisuuden ”uskollisuus” ja metodin ”hauku”. Kissat taas omiaisuuden ”hännän pituus” ja metodin ”kehrää”. (Tämähän alkaa kuulostaa jo ensimmäisissä OLO-sessioissa käydyltä keskustelulta tai lähinnä assarin selitykseltä suu auki ja silmät pyöreinä katsoville phukseille).

Mielesstäni perinnän suurin hyöty tulee esille siinä, kun halutaan pitää samantyyliset, mutta kuitenkin erilliset asiat/ilmentymät/jotainihanmuuta(?) erillään, mutta silti kytkettyinä toisiinsa. Luokkien kokoa voidaan pienentää, kun jokaiseen ei tarvitse erikseen kirjoittaa samoja ominaisuuksia ja metodeja. Samalla hahmottuu kokonaisuus paremmin, kun nähdään, mitkä luokista kuuluvat yhteen. Peli-ikkunaakaan luodessani minun ei tarvitse kirjoittaa luokan sisälle viittäkymmentä metodia, erikseen koon asettamiselle, värin vaihdolle jne. vaan voin käyttää valmiita JFramen metodeja tähän.

Kurssin aikana olen oppinut paljon, ja niinkin yksinkertainen asia kuin tämä perintä oli käsitteenä ja kaikkine ominaisuuksineen suhteellisen vajaa. Näkyvyysmääreen protected tarkoitus selvisi minulle käytännössä koodatessa, ja osoittautuikin varsin näppäräksi ratkaisuksi. Toisaalta käytännössäkään en sisäistänyt super.:n käyttöä tai lähinnä sen eroa this.:seen. This:iä käytetään kun kutsutaan jotain luokan metodia ja superia kun kyseessä on yliluokan metodi. Kuitenkin yliluokankin metodeja voi käyttää suoraan this. Tämä hämmensi täysin.

Projektissakin, nyt innostuneena tästä perinnästä loin ensin uokalle Esine viisi alaluokkaa, ja nämä toteuttamaan samat metodit. Sittemmin muutin luokan Esine abstraktiksi ja ylikirjoitin sen metodit jokaisessa sen aliluokassa. Huomasin kuitenkin kaikkien luokkien olevan niin identtisiä, että viisi luokkaa yhden enumeraation sijaan olisi ehkä sittenkin aika huono vaihtoehto. Muuten en perintää sitten hyödyntänytkään ”omilla” luokilla. Sen sijaan periytin luokkia Javan valmiista luokista kuten JFrame, JPanel ja Thread.

-Meri

 

0 Responses to “Mitä hyötyä on perinnästä?”



  1. Jätä kommentti

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: