Java-ohjelmointi, syksy 2006 Arvosteluperusteet, tehtävä 3 Arvostelija Jaakko Sorri (pääpiirteissään Teemu Sjöblomin perusteita noudattaen) Tehtävä 3: "Mä en kestä noita sun puheitasi 'abstrakteista tietotyypeistä', ja 'kapseloinnista'!" Näin parahti ystäväsi kuunneltuaan intoiluasi hyvästä ohjelmointityylistä. Ystäväsi osaa kyllä ohjelmoida - algoritmeja syntyy, metodeita kutsutaan (tosin vain niitä "pääohjelman pikku apulaisia"), parametrivälityskin sujuu - mutta olio-ohjelmoinnin yksi keskeinen idea herättää hänessä vain asiantuntematonta ärtymystä. Auta ystävääsi ymmärtämään, mistä oikein on kysymys. Laadi siis asiasta kirjallinen selitys, joka sisältää valaisevia ohjelmaesimerkkejä (enimmäispituus 1 konseptiarkki). Vastauksen arvioinnissa otetaan huomioon selostuksen ajateltu lukija. Älä siis kirjoita tarkastajalle, joka jo tuntee asian, kirjoita tuolle ystävälle! Pisteytys: 3p jotakin aiheeseen liittyvää, mutta joko pahoja virheitä tai kovin puutteellista 6p perusidea mainittu, mutta ystävä tuskin vielä ymmärtäisi, mistä on kyse 9p kelvollinen selostus asiasta 12p hyvä selostus asiasta, mutta vielä pieniä puutteita 15p erinomiomainen selostus asiasta Pisteytyksessä otettiin huomioon tehtävänannossa annettu lukija ja yleinen kirjoitustyyli. Vastauksia ei siis ollut tarkoitus kirjoittaa tarkastajalle, joka jo tuntee asian. Tehtävänannossa pyydettiin koodiesimerkkejä ja niitä myös vaadittiin täysiin pisteisiin. Valitettavan moni sekoitti abstraktin tietotyypin abstraktiin luokkaan. Abstraktin luokan selostamisesta ei sakotettu, mutta siitä ei myöskään juuri pisteitä herunut, mikäli vastauksessa ei selvästi selostettu myös kapselointia. Hyvän vastauksen sisältämiä asioita (kaikkia ei tarvinut mainita): Kapselointi -Kapseloidaan toteutus piiloon käyttäjältä ja annetaan tälle välineet käyttää luokkaa. Koneen napit ja vivut. "Samaa" asiaa Läheisessä tekemisissä abstraktin tietotyypin kanssa. Abstrakti tietotyyppi -Tietotyyppi on käyttäjälleen abstrakti, hän ei tiedä miten se on käytännössä toteutettu, ainoastaan miten sitä voidaan käyttää. Läheisessä tekemisissä kapseloinnin kanssa. Miksi abstrakteja datatyypejä ja kapselointia kannattaa käyttää, mitä hyötyjä saavvutetaan. -Turhien yksityiskohtien piillottaminen, helpompi hahmottaa toiminta. -Virheen löytäminen koodista helpompaa. -Koodin muokkaaminen ja uudelleenkäytettävys helpompaa. -Suurien kokonaisuuksien paloitteleminen pienempiin osakokonaisuuksiin ja koodin hallinta helpompaa. -Ongelmien ratkaiseminen pienemmissä osissa. -Käyttäjän virheiden estäminen. -Älykäs tieto, estää käyttäjää tekemästä virheitä. -Valmiiden välineiden käyttö helppoa, tarvitsee vain tietää tavat miten käyttää, ei toteutusta. Vastaavasti luokan tekijän ei tarvitse tietää kaikkia mahdollisia käyttötapoja. Miten abstrakti tietotyyppi toteutetaan javalla. -Luodaan luokka, sille privaatit kentät ja julkisia metodeita luokan tiedon käsittelemiseen. -Luokasta luodaan olio ja sen tilaa muutetaan. -Käyttäjän ja ohjelmoijan välinen rajapinta. Toteutus piillossa. Muita tapoja abstraktille tietotyypille ja sitä sivuavia asioita. -Rajapinnat -Abstraktit luokat