Versions Compared

Key

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

...


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;


	Counter(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;
		}
	}
 }


...