Jenny Humaloja: Mallivastauksia tehtävään 2: Kaikissa tehtävissä kaivattiin mielellään koodiesimerkkejä, kun esimerkit oli vielä erikseen tehtävänannossakin mainittu. Oikein hyvällä selityksellä täydet pisteet saattoi saada ilman esimerkkiäkin. parametri: ---------- esim. public boolean etsiArvo(int arvo) <- int arvo on muodollinen parametri metodin kutsussa: etsiArvo(10); <- 10 on todellinen parametri Ylipäätään parametri on metodille annettava arvo/muuttuja jonka perusteella metodi tekee jotain. parametri EI ole: -muuttuja int arvo = 0; kuormittaminen: --------------- Tehdään useita samannimisiä metodeja, jotka poikkeavat toisistaan muodollisten parametriensa perusteella: public boolean etsiArvo(int arvo) { ... } public boolean etsiArvo(int arvo, int[] taulukko) { ... } Metodin kutsussa välitettyjen todellisten parametrien määrän ja laadun perusteella kääntäjä valitsee kuormitetun metodin versioista oikean. kapselointi: ------------ esim. public class Luokka { private int privaattiMuuttuja; <- muuttuja joka ei näy luokan ulkopuolelle public Luokka() { ... } public int getMuuttuja() { <- aksessori jolla pääsee kysymään privaattimuuttujan arvon return privaattiMuuttuja; } public int setMuuttuja(int uusiArvo) { <- aksessori jolla pääsee asettamaan privaattimuuttujalle uuden arvon this.privaattiMuuttuja = uusiArvo + 5; <- tästä luokan käyttäjä ei tiedä, voimme siis käsitellä } muuttujaa haluamallamme tavalla public void laskeKA(int eka, int toka) { <- aksessori joka käyttää privaattia "pikku apulaista" pikkuApulainen(eka, toka); } private void pikkuApulainen(int yksiLuku, int toinenLuku) { <- privaatti apumetodi //lasketaan keskiarvo } Havainnollistava esimerkki kertoo enemmän kuin tuhat sanaa. :) pääasiat: - luokan käyttäjä pääsee käsittelemään privaatteja muuttujia (ja apumetodeja) vain public-määriteltyjen aksessoreiden kautta (public ja private -ero piti jotenkin mainita täysiin pisteisiin) - luokan toteutus on piilotettu luokkaa käyttävältä. API kertoo, mitkä aksessorit ovat käytettävissä. kapselointi EI ole: - pelkkää ohjelman toteutuksen pilkkomista erillisiin paloihin (tämä voi tarkoittaa niin montaa asiaa) - pelkkiä privaatteja muuttujia, pitää myös mainita aksessoreista. - metodin paikallinen muuttuja laskeArvo() { int luku; // ei näy tämän metodin ulkopuolella }