Java-ohjelmoinnin kurssikoe 18.12.2001 Tehtävä 1, arvostelija Teemu Sjöblom (teemu.sjoblom@cs.helsinki.fi) Tehtävä 1: "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! Tehtävästä annettiin pisteitä seuraavasti. 3p Jotakin asiaan liittyvää selitystä muttei läheskään tarpeeksi. 8P Kelvollinen selostus asiasta. 11p Hyvä selostus asiasta. 15P Erinomainen selostus asiasta. Asiasisällön lisäksi pisteisiin vaikuttivat esseen tyyli ja miten se oli kirjoitettu. Tehtävä piti kirjoittaa kaverille eikä tarkistajalle ja tarkistuksessa otettiin tämä huomioon, olisiko kaverisi ymmärtänyt vaaditut asiat selityksestäsi. Lisäksi tehtävänannossa vaadittiin selventäviä koodiesimerkkejä ja nämäkin piti löytyä. Valitettavan moni selitti abstraktnt luokan idean abstraktin tietotyypin ja kapseloinnin sijaan ja sai vai kolme pistettä. Asioita joita kaverin tuli osata ja ymmärtää luettuaan vastaajan selitys. 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 Pistejakauma: 0 18 ****************** 3 36 ************************************ 8 56 ******************************************************** 11 55 ******************************************************* 15 77 *****************************************************************************