Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

9.2.10 this-osoitin

Jos verrataan aliohjelmaa

olioalk\Aika5.java - aliohjelma vastaan metodi

	  public static void lisaa(Aika5 aika,int lisa_min) {
	    int yht_min = aika.h * 60 + aika.m + lisa_min;
	    aika.h = yht_min / 60;
	    aika.m = yht_min % 60;
	  }
	
	...
	  lisaa(a1,55);

ja metodia

	  public void lisaa(int lisa_min)  {
	    int yht_min = h * 60 + m + lisa_min;
	    h = yht_min / 60;
	    m = yht_min % 60;
	  }
	...
	  a1.lisaa(55);

niin helposti näyttää, että ensin mainitussa funktiossa on enemmän parametrejä. Tosiasiassa kummassakin niitä on täsmälleen sama määrä. Nimittäin jokaisen metodin ensimmäisenä näkymättömänä parametrinä tulee aina itse luokan osoite, this. Voitaisiinkin kuvitella, että metodi onkin toteutettu:

	"public void lisaa(Aika5 this, int lisa_min)  {"   // Näin EI SAA KIRJOITTAA!!!
	{
	  int yht_min = this.h * 60 + this.m + lisa_min;
	  this.h = yht_min / 60;
	  this.m = yht_min % 60;
	}
	...
	"a1.lisaa(a1,55)";

Oikeasti this - viitettä ei saa esitellä , vaan se on ilman muuta mukana parametreissa sekä esittelyssä että kutsussa. Mutta voimme todellakin kirjoittaa:

	public void lisaa(int lisa_min)  {
	{
	  int yht_min = this.h * 60 + this.m + lisa_min;
	  this.h = yht_min / 60;
	  this.m = yht_min % 60;
	}

Jonkun mielestä voi jopa olla selvempi käyttää this-viitettä luokan attribuutteihin viitattaessa, näinhän korostuu, että käsitellään nimenomaan tämän luokan attribuuttia h, eikä mitään muuta muuttujaa h. Joskus this-osoitinta tarvitaan välttämättä palautettaessa oliotyyppisellä metodilla olion koko tila (esim. viite olioon). Lisäksi joissakin kielissä this-osoittimen vastinetta (usein self) on aina käytettävä.

Usein this-osoitinta käytetään, jos ei haluta antaa metodin parametrilistan muuttujille eri nimiä kuin vastaavilla attribuuteilla:

	  public void aseta(int h,int m) {
	    this.h = h; this.m = m; lisaa(0);
	  }

Vaihtoehtonahan olisi esimerkiksi

	  public void aseta(int ih,int im) {  // i = initialize
	    h = ih; m = im; lisaa(0);
	  }


Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys