Versions Compared

Key

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

...

Generelt er tilstanden til et objekt verdien av alle attributtene, mens oppførselen er når en kan kalle de ulike operasjonene, hvilke argumenter som er gyldige og hva de returnerer og hvordan tilstanden endres av dem. I eksemplet er det alltid tillatt å kalle begge operasjonene, men en kunne tenke seg at count tok et argument som anga hvor mye telleren skulle økes og at det var ulovlig (å prøve) å øke telleren forbi slutt-verdien (for enkelhets skyld antar vi at både end og inc er positive tall). Dette gir en annen oppførsel, som er forsøkt illustrert i diagrammet under.


PlantUML Macro
object "~#2:Counter2" as counter1 {
	counter = 1
	end = 3
}
 
object "~#2:Counter2" as counter2 {
	counter = 2
	end = 3
}
counter1 ..> counter2 : count(1)
 
object "~#2:Counter2" as counter3 {
	counter = 3
	end = 3
}
counter1 ..> counter3 : count(2)
counter2 ..> counter3 : count(1)
counter2 ..> counter3 : count(2)


Vi ser at ett kall til count(2) har samme effekt som to kall til count(1) og at det ikke lenger er lov å kalle count i den siste tilstanden, dvs. når telleren (counter) har nådd slutt-verdien (end). Kall til getCounter er utelatt, siden de (fortsatt) ikke endrer tilstanden.

I koden til høyre er count-metoden endret til å ta inn et int-argument, som angir hvor mye telleren skal øke. Hvis grensen allerede er nådd, så utløses et IllegalStateException-unntak, som er en måte å si at det er ulovlig å kalle count-metoden gitt tilstanden til objektet. Hvis unntaket ikke utløses, så økes telleren og settes så tilbake hvis den er for høy.


Code Block
languagejava
public class Counter2 {
	int end;
	int counter = 0;


	CounterCounter2(int end) {
		this.end = end;
	}

	int getCounter() {
		return counter;
	}

	void count(int inc) {
		if (counter + inc >= end) {
			throw new IllegalStateException("Cannot increment counter, when limit has been reached");
		}
		counter = counter + inc;
		if (counter >= end) {
			counter = end;
		}
	}
 }


...

1) For så enkel oppførsel som denne går det greit å lage et komplett diagram, men generelt kan det bli veldig mange tilstander (noen ganger uendelig) og veldig mange kombinasjoner/rekkefølger av kall. Derfor er et slikt diagram greit som illustrasjon på et eksempel, men ikke som en komplett beskrivelse av oppførklsenoppførselen.