80 likes | 193 Views
5. Kapselointi. Yleistä. Kapseloinnilla ( encapsulation ) tarkoitetaan luokan tietojen ja toimintojen pakkaamista yhdeksi suojatuksi kokonaisuudeksi piirteitä piilottamalla. Attribuutit piilotetaan private -määreen ja aksessoreiden avulla. (Tiedonkätkentä on siis osa kapselointia.)
E N D
Yleistä • Kapseloinnilla (encapsulation) tarkoitetaan luokan tietojen ja toimintojen pakkaamista yhdeksi suojatuksi kokonaisuudeksi piirteitä piilottamalla. • Attribuutit piilotetaan private-määreen ja aksessoreiden avulla. (Tiedonkätkentä on siis osa kapselointia.) • Metodeja piilotetaan private-määrettä käyttäen. • Piilotettavia ovat esimerkiksi metodit, joita tarvitaan vain luokan sisällä.
kätketyt osat liittymät Liittymä • Julkiset metodit muodostavat liittymän, jonka kautta luokkaa käytetään kontrolloidusti ohjelmoijan ajattelemalla tavalla. • Kapseloitujen luokkien kommunikointi:
Luokan kätketty osa Luokan liittymä Kissa-luokka (Kissa.java) public class Kissa { // Attribuutit. private String vari; private String hanta; // Metodit private void hairikoi() { // Tavaroita hajoaa... } public String vari() { return vari; } publicvoid vari(String v) { if (v != null) vari = v; } public String hanta() { return hanta; } public void hanta(String h) { if (h != null) hanta = h; } public void aantele(String s) { System.out.println(s); } }
Luokalle oma tiedosto • Ohjelma on toistaiseksi ajateltu yhdeksi luokaksi. • Näin lähdekooditiedostojakin on ollut vain yksi. • Siirrytään nyt tyypilliseen käytäntöön, jossa jokaisen luokan koodi erotetaan omaan tiedostoonsa. • Näin toimien kukin luokka on selkeämmin täysin oma kokonaisuutensa myös tiedostojen tasolla. • main-metodin sisältävää luokkaa kutsutaan ajoluokaksi. • Käytetään tällä kurssilla usein toisen luokan testaamiseen. • Esim. Kissa-luokkaa testataan KissaTesti-luokassa.
KissaTesti-luokka (KissaTesti.java) public class KissaTesti { public static void main(String[] args) { // Luodaan kissa. Kissa rontti = new Kissa(); // Testataan metodeja. rontti.aantele("Miau!"); rontti.vari("musta"); rontti.hanta("tavallinen"); System.out.println(rontti.vari()); System.out.println(rontti.hanta()); } }
Testiluokan kääntäminen ja ajaminen • Testiluokka on käännettävä yhdessä testattavan luokan kanssa. Tämä on tehtävissä eri tavoin. • Kun molempien luokkien lähdekooditiedostot sijoitetaan samaan hakemistoon, kääntäjälle tarvitsee antaa vain testiluokan sisältävän tiedoston nimi. Esimerkki: javac KissaTesti.java • Ohjelma ajetaan testiluokan nimellä. Esimerkki: java KissaTesti
Testiluokan kääntäminen ja ajaminen • Luokan voi myös sisällyttää testiluokan käännökseen jostakin muusta hakemistosta joko polkumäärittelyllä tai javac-ohjelman sourcepath-parametrillä. • Näin käännetty ohjelma suoritetaan siten, että java-ohjelmalle kerrotaan classpath-parametrin avulla tavukoodin hakemisto. • Ajaminen ja käännös tehdään siis kuten In-luokan yhteydessä. • Kertaa tarvittaessa Lausekielinen ohjelmointi -kurssin luentomateriaalin 12. luku.