Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

9.4.2 Rajapinta ja sisäinen esitys

Kapseloinnin ansiosta luokan käyttämiseksi on tullut selvä rajapinta ( interface): metodit, joilla olion tilaa muutetaan. Tämän rajapinnan ansiosta luokka muuttuu "mustaksi laatikoksi", jonka sisällöstä ulkomaailma ei tiedä mitään, mutta jonka kanssa voi kommunikoida metodien avulla.

Kuva 9.3 Musta laatikko

Tämä luokan sisustan piilottaminen antaa meille mahdollisuuden toteuttaa luokka oleellisesti eri tavalla. Voimme esimerkiksi toteuttaa ajan minuutteina vuorokauden alusta laskien:

olioalk\AikaD.cpp - sisäinen toteutus minuutteina

	/**
	 * Vaihettu sisäinen esitystapa
	 * @author  Vesa Lappalainen
	 * @version 1.0, 01.02.2003
	 */
	public class AikaD {
	
	  private int yht_min;
	
	  public void aseta(int h,int m)  { yht_min = 60*h + m; }
	
	  public AikaD()                  { aseta(0,0); }
	  public AikaD(int h)             { aseta(h,0); }
	  public AikaD(int h,int m)       { aseta(h,m); }
	
	  public void tulosta(boolean lf) {
	    int m = getM();
	    System.out.print("" + getH() + ":" + (m<10?"0":"")+m);
	    if ( lf ) System.out.println();
	  }
	
	  public void tulosta() { tulosta(true); }
	
	  public void lisaa(int lisa_min)  { yht_min += lisa_min;  }
	
	  public static void lisaa(AikaD aika,int lisa_min) { aika.lisaa(lisa_min);  }
	
	  public int getH() { return yht_min / 60; }
	  public int getM() { return yht_min % 60; }
	
	  public static void main(String[] args) {
	    AikaD a1 = new AikaD();
	    AikaD a2 = new AikaD(13);
	    AikaD a3 = new AikaD(14,25);
	
	    a1.tulosta();  a2.tulosta();  a3.tulosta();
	    a1.aseta(12,15); a2.aseta(16,-15);
	    a1.tulosta(); a2.tulosta();
	
	    lisaa(a1,55); a1.tulosta();
	
	    System.out.println("Tunnit = " + a1.getH());
	  }
	
	}

Tehtävä 9.15 minuutteina()

Lisää AikaC:hen ja AikaD:hen, eli molempiin sisäisiin toteutustapoihin saantimetodi getMinuutteina, joka palauttaa kellonajan vuorokauden alusta minuutteina laskettuna.

Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys