Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

9.2.5 Suojaustasot ja kapselointi

Luokan attribuuteille ja metodeille on suojaustasot, jotka oletuksena ovat pakettikohtaisia, eli metodeja voi kutsua kuka tahansa samaan pakettiin kirjoitetun luokan metodi. Erityisesti kuka tahansa samassa paketissa oleva metodi voi muuttaa attribuuttien arvoja ilman että olio tätä itse huomaa.


Kuka voi käyttää metodia/attribuuttia
Suojaus
kaikki
aliluokk. metodit
paketin metodit
luokan metodit
private



x
package


x
x
protected

x
x
x
public
x
x
x
x

Kuva 9.1 Suojaustasot

Kirjoitamme ensin testiluokan:

olioalk\Aikatesti.java - testiluokka Aika-luokalle

	/**
	 * Testiohjelma Aika-luokalle
	 * @author Vesa Lappalainen
	 * @version 1.0, 01.02.2003
	 *
	*/
	public class Aikatesti {
	
	  public static void main(String[] args) {
	    Aika a1 = new Aika(12,15);
	    Aika a2 = new Aika(13,16);
	    Aika a3 = new Aika(14,25);
	    a1.lisaa(55);    a1.tulosta();
	    a2.lisaa(27);    a2.tulosta();
	    a3.lisaa(39);    a3.tulosta();
	  }
	}

Jos esimerkkimme metodi lisaa esiteltäisiin:

	  private void lisaa(int lisa_min)  {

niin testiohjelma lakkaisi toimimasta, koska esimerkiksi pääohjelman kutsu

	a1.lisaa(55)

tulisi laittomaksi luokan jäsenen lisaa ollessa yksityinen ( private).

Erityisen tärkeää on kuitenkin että ei voida kirjoittaa testiohjelmassa

	a1.h = 28;  // private-attribuuttiin ei saa viitata

Käytännössä attribuutit kannattaa lähes poikkeuksetta kirjoittaa yksityisiksi. Kaikista pahinta mitä olio-ohjelmoija voi tehdä on kirjoittaa julkisia attribuutteja.

Nyt vasta alkaakin olio-ohjelmoinnin hienoudet! Aloittelijasta saattaa tuntua että mitä turhaa tehdään asioista monimutkaisempaa kun se onkaan! Väärinkäytetyt ja virheelliset arvot muuttujilla on ollut ohjelmoinnin kiusa alusta alkaen. Nyt meillä on mahdollisuus päästä niistä eroon kapseloinnin (jotkut sanovat kotelointi, encapsulation) ansiosta. Eli kaikki arvojen muutokset (eli olio tapauksessa olion tilojen muutokset) voidaan suorittaa kontrolloidusta, vain olion itse siihen suostuessa. Mutta miten sitten alustuksen tapauksessa?


Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys