Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

9.2.8 Sisäinen tilan valvonta

Emme edelleenkään ole ottaneet kantaa siihen, mitä tapahtuu, jos joku yrittää alustaa oliomme mielettömillä arvoilla, esimerkiksi:

	Aika a1 = new Aika(42,175);

Toisaalta miten joku voisi muuttaa ajan arvoa muutenkin kuin lisaa-metodilla? Teemmekin aluksi metodin aseta, jota kutsuttaisiin

	a1.aseta(12,15); a2.aseta(16,23);

Nyt pitää kuitenkin päättää mitä tarkoittaa laiton asetus! Jos sovimme että minuuteissa yli 59 arvot ovat aina 59 ja alle 0:n arvot ovat aina 0, voisi aseta-metodi olla kirjoitettu seuraavasti:

	  public void aseta(int ih,int im) {
	    h = ih; m = im; 
	    if ( m > 59 ) m = 59;
	    if ( m <  0 ) m =  0;
	  }

Jos taas haluaisimme, että ylimääräinen osuus siirtyisi tunteihin, voitaisiinkin tämä tehdä "kierosti" lisaa-metodin avulla

olioalk\Aika4.java - sisäinen tilan valvonta asetuksessa

	...
	public class Aika4 {
	
	  private int h=0, m=0;
	
	  /**
	   * Asettaa uuden ajan ja pitää huolen että aika on aina oikeaa muotoa.
	   * @param h asetettavat tunnit
	   * @param m asetettavat minuutit
	   */
	  public void aseta(int h,int m) {
	    this.h = h; this.m = m; lisaa(0);
	  }
	
	  public Aika4() { // Oletusmuodostaja
	    aseta(0,0);
	  }
	
	  /**
	   * Alustaa ajan niin että minuutit ovat aina 0
	   * @param h tunnit
	   */
	  public Aika4(int h) {
	    aseta(h,0);
	  }
	
	  public Aika4(int h,int m) { // Muodostaja
	    aseta(h,m);
	  }
	
	  public void tulosta() {...
	  public void lisaa(int lisa_min)  { ...
	
	  public static void main(String[] args) {
	    Aika4 a1 = new Aika4();
	    Aika4 a2 = new Aika4(13);
	    Aika4 a3 = new Aika4(14,25);
	
	    a1.tulosta();  a2.tulosta();  a3.tulosta();
	    a1.aseta(12,15); a2.aseta(16,-15);
	    a1.tulosta(); a2.tulosta();
	  }
	
	}

Huomattakoon, että samalla kun tehdään aseta-metodi, kannattaa muodostajassakin kutsua sitä. Näin olion tilaa muutetaan vain muutamassa metodissa, jotka voidaan ohjelmoida niin huolella, ettei mitään yllätyksiä pääse koskaan tapahtumaan. Tämä rupeaa jo muistuttamaan olio-ohjelmointia!

Tehtävä 9.2 Negatiivinen minuuttiasetus

Mitä ohjelma Aika4.java tulostaisi? Miksi ohjelma toimisi halutulla tavalla?

Tehtävä 9.3 Tuntien tarkistus

Ohjelmoi myös tunneille tarkistus, missä pidetään huoli siitä, että tunnit ovat aina välillä 0-23.

Tehtävä 9.4 Päivämääräolio

Esittele luokka, jolla kuvataan päivämäärä. Kirjoita ainakin sopiva muodostaja ja metodi tulosta, joka tulostaa päivämäärän.


Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys