******************************************* Ohjelmoinnin perusteet, S-2007 kurssikuulustelu arvosteluperusteet, tehtävä 2 laatinut: Jaakko Sorri 28.10.2007 ******************************************* Arvostelussa käytettiin pääasiassa asteikkoa (0-4-8-12-15-18), mutta myös välipisteitä oli mahdollista saada "rajatapauksissa". Kapseloinnissa on kyse "koneen rakenteen" piilottamisesta ja "vipujen ja mittarien" ja tarjoamisesta käyttäjälle. Toisin sanoen tietorakenteen sisäinen toteutus piilotetaan ja sitä pääsee käyttämään vain määrättyjen palvelujen (metodien) kautta. Tämän selittäminen niin, että epäilevämpikin tarkastaja vakuuttui siitä, että asia on ymmärretty, vei pitkälle. Hyötyä kapseloinnista on vaikkapa: * Arvojen tarkistukset tarvitsee kirjoittaa vain kerran * Virheiden löytäminen helpompaa * Voidaan olla varmoja, että kenttien arvot säilyvät sallittuina (kunhan aksessorit on koodattu oikein) * "Hajoita ja hallitse": puretaan ongelma helpommin hallittaviin osaongelmiin * Selkeät rajapinnat: luokan käyttäjän ei tarvitse tuntea toteutuksen yksityiskohtia * Toteutusta voidaan vaihtaa ilman, että luokan ulkopuolella tarvitsee tehdä muutoksia * Helpommin luettavaa koodia Kaikkea edellisessä listassa olevaa ei tarvinut luetella; paremmat pisteet tuli parista esimerkistä ja selkeistä perusteluista. Javassa kapselointi toteutaan tekemällä olion kentistä yksityisiä (private!) ja tarjoamalla luokan ulkopuolelle julkiset metodit kenttien arvojen muuttamiseen ja tarkistamiseen (siltä osin, kuin se halutaan sallia). Tehtävänannossa pyydettiin koodiesimerkkiä ja sitä myös vaadittiin täysiin pisteisiin. Luentomuistiinpanoista löytyvä KuuLaskuri ajoi asian hyvin ja sen olikin moni muistanut: public class Kuulaskuri { private int kuu; // sallitut arvot 1,..12 public Kuulaskuri() { kuu = 1; } public int moneskoKuu() { return kuu; } public void seuraavaKuu() { ++kuu; if (kuu == 13) kuu = 1; } } Koodissa esiintyneistä "pikku virheistä" ei sakotettu, mutta kapseloinnin kannalta oleellisten kohtien tuli olla oikein (esim. kentän tuli olla private, aksessorien public).