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
...
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!