Java Reference
In-Depth Information
Invarianten müssen von allen exportierten Methoden einer Klasse vor und nach dem
Methodenaufruf eingehalten werden. Die Invarianten gelten während der gesamten
Lebensdauer der Objekte einer solchen Klasse.
Eine Invariante kann während der Ausführung einer exportierten Methode oder beim
Aufruf von Service-Methoden, die nicht außerhalb der entsprechenden Klasse sichtbar
sind - also nicht exportiert werden -, temporär verletzt werden. Dies stellt kein Pro-
blem dar, da die Invariante erst nach Ausführung einer exportierten Methode dem
Aufrufer wieder zur Verfügung steht.
Eine Klasseninvariante muss vor und nach dem Aufruf einer nach
außen sichtbaren Methode eingehalten sein. Beim Aufruf von in-
ternen - beispielsweise privaten - Methoden einer Klasse müs-
sen die Invarianten einer Klasse nicht unbedingt beachtet werden
und können auch mal nicht erfüllt sein.
Invarianten gelten bei exportierten Methoden vor und nach dem Aufruf, bei dem Aufruf
von Konstruktoren nach dem Aufruf.
Beispiel:
Betrachtet wird die Klasse Stack , die einen Speicher für Objekte realisiert, der nach
dem Stack-Prinzip organisiert ist und nur eine begrenzte Zahl von Objekten (gegeben
durch die Stackgröße) aufnehmen kann. Die Klasse Stack kann in Java beispiels-
weise die folgende Schnittstelle anbieten:
abstract class Stack
{
void push (Object o);
Object pop();
}
Die Klasse Stack hat die Invariante , dass die Zahl der Elemente auf dem Stack bei
allen Operationen größer gleich Null und kleiner gleich der gegebenen maximalen
Stackgröße sein muss.
Die Methode push() hat die Vorbedingung , dass die Zahl der Elemente auf dem
Stack kleiner gleich als die maximale Stackgröße sein muss. Die Nachbedingung von
push() ist, dass die Zahl der Elemente auf dem Stack um 1 größer als vor dem Aufruf
ist.
Die Vorbedingung von pop() ist, dass die Zahl der Elemente auf dem Stack größer
gleich 1 sein muss. Die Nachbedingung von pop() ist, dass die Zahl der Elemente
auf dem Stack um 1 kleiner als vor dem Aufruf ist.
Nach Abarbeitung einer Methode bzw. einem Konstruktor müssen die Invarianten wie-
derhergestellt sein.
Search WWH ::




Custom Search