Ohjelmoinnin perusteita: kapselointi

Kapseloinnin idea yksinkertaistettuna on, että luokkaa ja siitä luotua oliota voi käyttää ainoastaan niillä metodeilla jotka luokka itse mahdollistaa. Esimerkiksi luokan muuttujien käsittely on rajoitettu metodeilla get ja set jotka luokassa on muodostettu. Ajatus on, että luokan käyttäjän ei tarvitse (eikä välttämättä edes haluta) tietää miten luokka toimii, vaan hänelle riittää tieto kuinka sitä voidaan käyttää.

Hyvänä esimerkkinä käy Javan String luokka. Osaamme käyttää String-luokkaa ja sen mahdollistamia metodeja kuten .chatAt() tai .length(), mutta emme juurikaan pohdi kuinka tuo luokka on toteutettu.

Kapseloinnin perusajatukseen voidaan katsoa kuuluvan toisinaan myös muuttujien arvojen kontrollointi. Esimerkiksi luokassa Kana oleva muuttuja paino voidaan metodissa setPaino(int kilot) suojata arvoilta jotka eivät kohtaa todellisuuden kanssa. Painon ollessa kyseessä, voimme lähteä ajatuksesta, että kana ei paina alle 0 kiloa ja maksimipainoakin voimme pohtia.

Vertailuksi alla kaksi eri versiota luokan Kana metodista setPaino()

// versio 1
public void setPaino(int kilot) {
   this.paino = kilot;
}
// versio 2
public boolean setPaino(int kilot) {
   if(kilot < 0 && kilot > 20) {
      return false; }
   this.paino = kilot;
   return true;
}

Myös konstruktorissa voidaan jo ottaa ehtoja huomioon. Esimerkiksi konstruktorille argumenttina saatettu negatiivinen id-tunnus aiheuttaa poikkeuksen.

// konstruktorissa tarkistetaan argumentin "oikeellisuus"
public KapseloituIhminen(int id) throws IllegalArgumentException{
   if(tarkistaId(id) == false) {
      throw new IllegalArgumentException("Argumentti 'id' ei ole validi: " + id);
   }
   this.id = id;
}

// tämä metodi on private, sen ei kuulu näkyä luokan ulkopuolella
private boolean tarkistaId(int id) {
   if(id < 1) {
      return false;
   }
   return true;
}

Esimerkkikoodissa on luokka KapseloituIhminen. Se tarjoaa metodit void setNimi(String), void setAmmatti(String), String getNimi(), String getAmmatti() ja int getId(). Luokasta muodostetaan olio antamalla sille argumenttina positiivinen integer-tyyppinen kokonaisluku jonka arvo ei saa olla alle 1 ja jota ei voi olion luomisen jälkeen enää muuttaa. Lataa esimerkki pdf muodossa viereisestä linkistä. KapseloituIhminen.java

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out / Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out / Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out / Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s

WordPress.com.

Ylös ↑