Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Noen regler for konsistens handler ikke bare om enkle tester på flere attributt-verdier i ett objekt, men kan kreve komplekse beregninger basert på flere attributt-verdier i mange, sammenkoblete objekter. I slike tilfeller kan det rett og slett bli for ressurskrevende å sjekke konsistens i hver enkelt setter-metode eller for tungvint å ha én samlet setter-metode for alle avhengige verdier. Løsningen da kan være å beholde valideringsmetoden(e), men utelate bruken av dem i setter-metoden(e) og heller la det være opp til brukeren av klassen å kalle dem når det er nødvendig. 

Rollen til konstruktører

Koden i setter-metoder og tilhørende validering skal sikre at enhver endring av tilstand er gyldig. Men det sikrer jo ikke at tilstanden er gyldig fra starten! En gyldig initiell tilstand kan sikres på to måter: 1) ved at en definerer gyldige startverdier i feltdeklarasjoner og/eller 2) at en implementerer konstruktører som krever at en gir inn gyldige startverdier. I koden under er begge muligheter vist:

Code Block
// provide valid default values, e.g. start time for Unix, must be valid
int day = 1, month = 1, year = 1971

// or a constructor
public Date(int day, int month, int year) {
	// check new day, month and year
	if (! isValidDate(day, month, year)) {
		throw new IllegalArgumentException(... appropriate message ...);
	}
	this.day = day;
	this.month = month;
	this.year = year;
}