You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

Tilstanden til et objekt er verdien av alle attributtene. En viktig del av oppførselen til et objekt er å sikre at tilstanden til objektet alltid er gyldig.

Ofte finnes det naturlige regler for hva som er gyldige verdier for hvert attributt. F.eks. er det naturlig at attributter som representerer lengder ikke er negative eller at attributter som representerer person-navn ikke inneholder spesialtegn som $ og #. Dette håndteres jo delvis av hvilken datatype vi velger, men ikke alle programmeringsspråk har egne typer for positive heltall eller tekstverdier med begrensninger på hvilke bokstaver de kan inneholde. Derfor må vi selv kode slike begrensninger inn i koden vår.

Den enkleste teknikken er å lage en såkalt setter-metode, som er en operasjon som kun har som formål å sette ett enkelt attributt. I denne kan vi så legge inn en test på om verdien er gyldig før attributtet evt. settes. Et length-attributt og en tilhørende setter-metode kan kodes slik:

length-attributt og tilhørende setter-metode
int length;

void setLength(int length) {
	if (length >= 0) {
		this.length = length;
	}
}

Vi bruker her konvensjonene til Java, som sier at metoden heter set<attributtnavn med stor forbokstav>, at den er deklarert som void og tar inn ett parameter av samme type som attributtet. Dersom koden er som over, er vi sikret at length aldri kan bli negativ. En annen variant er å utløse et unntak, som følger:

setter-metode som utløser unntak
void setLength(int length) {
	if (length < 0) {
		throw new IllegalArgumentException("Length must be zero or positive, but was " + length);
	}
	this.length = length;
}

Her snur vi testen og utløser et passende unntak, som både sier hva vi prøvde å gjøre og hva som var galt. Dersom testen ikke slår til, så kan vi trygt sette attributtet.

Dersom koden for å teste verdien er litt mer komplisert, f.eks. en løkke som sjekker alle tegnene i en String, så kan det være greit å lage en egen validerings-metode som kalles fra setter-metoden:

String name;

boolean isValidName(String name) {
	... check the validity of name, return true of valid or false if not ...;
}

void setName(String name) {
	if (! isValidName(name)) {
		throw new IllegalArgumentException(... a suitable message ...);
	}
	this.name = name;
}

Fordelen med denne teknikken er at koden blir ryddigere og at andre klasser kan sjekke gyldigheten på forhånd. Det finnes andre varianter også, se egen side om koding av valideringsmetoder.

 

  • No labels