Tapaus 1 - Luokat ja oliot

Oliopohjaisissa ohjelmointikielissä (kuten Javassa) käsiteltäviä ongelmia mallinnetaan tavalla, joka on jäljitettävissä Platonin ideaoppiin. Tämä mahdollistaa kompleksisten rakenteiden yksinkertaistamisen abstraktiolla ja ajattelumallin, joka on lähellä ihmisten omaa ongelmanratkaisua.

Scala on moniparadigmainen ohjelmointikieli — se tukee niin olio-ohjelmointia kuin funktionaalista ohjelmointia.

Virike:

Platonin ideaoppi

Platonin mukaan ympärillämme havaittavan maailman ohella on myös toinen maailma, ideoiden maailma.

Ajatusta voidaan havainnollistaa seuraavasti: Kun hiekkaan piirretään kolmioita, ne ovat kaikki erilaisia, ja niissä on paljon sellaista, mikä ei oikeastaan kuulu kolmioon, esim. reunaviivan paksuus ja mutkaisuus. Niinpä on luontevaa ajatella, että piirretyt kolmiot eivät ole todellisia kolmioita vaan kolmion idean enemmän tai vähemmän tarkkoja jäljitelmiä; kolmion idea ilmenee, kuvastuu tai on läsnä niissä. Vaikka kaikki maailman kolmiot hävitettäisiin, olisi kolmion idea silti olemassa. Se on häviämätön ja muuttumaton; sitä ei voi aistia, sen voi tajuta vain ajattelemalla.

Kaikkea tai paljon muutakin aistimaailmassa havaittavaa vastaa muuttumaton idea: on ihmisen idea, sängyn idea, oikeudenmukaisuuden ja kauneuden idea.

Scala naturae

Olio-ohjelmoinnissa luokkien hierarkia koostuu luokista ja aliluokista, missä aliluokat ovat yksityiskohtaisempia esityksiä yliluokista (esimerkiksi Opiskelija voisi olla Ihminen-luokan aliluokka). Ohjelmien rakennetta ei tosin aina rakenneta tällä tavalla ja luokkajaon voi suunnitella kullekin tilanteelle otollisimmaksi.

Latinankielinen ilmaisu scala naturae tarkoittaa kirjaimellisesti luonnon portaikkoa (arvojärjestystä). Käsitteellä viitataan Aristoteleen, Platonin oppilaan, kehittelemään luonnon luokittelujärjestelmään, joka perustuu olentojen täydellisyyteen. Portaikon ylimpänä on Jumala, jonka alapuolella enkelit, demonit, tähdet, kuu, kuninkaat, prinssit, aatelisto, ihmiset, villieläimet, kotieläimet, puut, muut kasvit, jalokivet, jalometallit, ja muut mineraalit. [1] [2]

Jumala ja enkelit, jotka ilmenevät puhtaasti henkisessä muodossa, ovat arvojärjestyksessä korkeimmalla. Niiden olemus on muuttumaton ja pysyvä, toisin kuin maallisen lihan, joka on erehtyväistä ja alati muuttuvaa. Pysyvyyden taju on tälle todellisuuden käsitykselle kriittinen — objektin asemaa on mahdotonta muuttaa hierarkiassa. [1]

Luonnollisessa järjestyksessä maa (kivi) on hierarkian alimmaisena: tällä objektilla on ainoastaan olemassaolon ominaisuus. Jokainen seuraavaksi ylemmän tason objekti sisältää edellisen tason positiiviset ominaisuudet ja lisäksi lisää (ainakin) yhden uuden ominaisuuden. Kivillä on ainoastaan olemassaolon ominaisuus, kasvit ovat lisäksi elollisia, eläimet tämän lisäksi liikkuvat ja niillä on ruokahalu. [1]

Jokainen taso on edelleen jaettavissa osatekijöihin. Esimerkiksi eläinten luokan huipulla ovat villieläimet (kuten leijona), jotka nähtiin korkeampiarvoisina, sillä ne uhmasivat koulutusta ja kesytystä. Villieläinten alapuolella ovat kotieläimet, jotka edelleen jaetaan hyödyllisiin eläimiin (kuten koira ja hevonen), jotka ovat hierarkiassa ylempänä kuin säyseät olennot, kuten lampaat. Linnut on myöskin jaettu omiin luokkiinsa esimerkiksi kotkien sijoittuessa puluja korkeammalle. Kalat ovat lintujen alapuolella ja jaetaan varsinaisiin kaloihin ja muihin mereneläviin. Näiden alapuolella ovat hyönteiset, joista korkeammalla ovat hyödylliset hyönteiset, kuten hämähäkit ja mehiläiset sekä viehättävät olennot, kuten leppäkertut ja sudenkorennot. Epämiellyttävät hyönteiset, kuten kärpäset ja torakat ovat hyönteisten luokan pohjalla. Eläin luokan hierarkian alimpana ovat käärmeet, jotka ovat ansainneet asemansa rangaistuksena toiminnastaan Edenin puutarhassa. [1]

Vastaava jako voidaan tehdä myös muilla tasoilla. Keskeinen käsitys luonnon portaikossa on, että kaikki mahdollinen sijoittuu johonkin kohtaan hierarkiaa antaen järjestyksen ja merkityksen maailmankaikkeudelle. [1]

Muutama käsite olio-ohjelmointiin liittyen

Polymorphism

Polymorfismilla (monimuotoisuus) voidaan ohjelmoinnin kontekstissa tarkoittaa ominaisuutta, jonka avulla eri tietotyypin muuttujia voidaan käsitellä yhteisellä mekanismilla. [3] Esimerkiksi sekä henkilöautoa että höyryjunaa voidaan yhtälailla ajaa ja niiden äänisignaalia tuutata. Niiden yhteiset ominaisuudet ovat ajoneuvojen luokan ominaisuuksia. Vastaavasti esimerkiksi Scalassa olet saattanut käyttää samoja laskuoperaattoreita eri tietotyypin luvuille. Voit tarkemmin tutustua polymorfismiin esimerkiksi täältä: http://en.kioskea.net/contents/424-oop-polymorphism

Encapsulation

Enkapsuloinnilla (suomeksi voitaisiin kääntää esimerkiksi "kotelointi") voidaan tarkoittaa toteutuksen piilottamista tai datan ja sitä käyttävien metodien yhdistämistä. [4] Esimerkki ensimmäisestä voisi olla seinäkello, josta tämänhetkisen ajan katsominen ja ymmärtäminen ei vaadi ymmärrystä taustalla toimivan kellon koneistosta. Vastaavasti Scalassa sinun ei tarvitse tietää kuinka modulo-operaattorin toiminnallisuus on toteutettu käyttääksesi sitä jakojäännösten laskemiseen.

Interface

Rajapinnalla (engl. interface) voidaan olio-ohjelmoinnin yhteydessä tarkoittaa yhteistä kommunikointikeinoa toisiinsa liittymättömien olioiden välillä. [5] Tällaisen rakenteen avulla voidaan esimerkiksi vertailla olioita keskenään tai määritellä metodeja olioiden käyttöön. Scalassa vastaava toiminnallisuus on toteutettu trait:ien avulla. trait:issa voidaan määritellä metodi, joka ottaa tietyntyyppisiä olioita parametrinaan ja palauttaa tietyntyyppisen olion tuloksena. Sitten tämä sama trait voidaan ottaa käyttöön useammassa toisiinsa liittymättömässä luokassa. Näin nähdään jo luokkamäärittelyn yhteydessä luokkien mahdollinen samankaltainen toiminta. Voit tutustua edelleen trait:eihin esimerkiksi täältä: http://www.tutorialspoint.com/scala/scala_traits.htm

Tehtäviä

Työotsake:
Oppimistavoitteet:

Lähteet

  1. [1]  Wikipedia. Great chain of being, 3.6.2013. Saatavilla: http://en.wikipedia.org/wiki/Great_chain_of_being, viitattu 12.6.2013
  2. [2]  Macroevolution.net. The Scala Naturae. Saatavilla: http://www.macroevolution.net/scala-naturae.html#.UbhNFvb88k9, viitattu 12.6.2013
  3. [3]  Wikipedia. Polymorphism in object-oriented programming, 3.6.2013. Saatavilla: http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming, viitattu 12.6.2013
  4. [4]  Wikipedia. Encapsulation (object-oriented programming), 6.6.2013. Saatavilla: http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming), viitattu 12.6.2013
  5. [5]  Wikipedia. Protocol (object-oriented programming), 17.7.2013. Saatavilla: http://en.wikipedia.org/wiki/Protocol_(object-oriented_programming), viitattu 31.7.2013