Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Versuche mir gerade verzweifelt das Verständnis einer Klasseninvariante anzueignen.
Mein bisheriges Verständnis:
Klasseninvariante ist eine Bedingung, die in jedem Zustand eines Objektes einer Klasse K gilt, d.h nach der Initalisierung und vor und nach dem methodenaufruf.
Hierzu ein Beispiel:
Java:
public final class Stack {
private int count; // aktuelle Zahl der Elemente - 1
// Index des obersten Elements
private int[] a = new int[10]; // Ablageplatz fuer die Elemente
// a[0]...a[count] sind die gestapelten Elemente
// a[count] ist das oberste, a[0] das unterste
// INV: -1 <= count <= 9
public Stack () { // Konstruktor, erzeugt den leeren Stapel
count = -1;
}
//Leseoperation, keine Zustandsaenderung
public int top() { // liefert das oberste Element
// Vorbedingung: Stapel nicht leer
if (count<=9 && count>=0) {
return a[count];
} else
return -999;
}
// Schreiboperationen, zustandsaendernd, ohne Ergebnis
// veraendert Stapel-Zustand: legt Element ab
public void push(final int x){
// Vorbedingung: Stapel nicht voll
if (count<9) {
count++;
a[count] = x;
}
}
public void pop(){ // veraendert Stapel-Zustand: entfernt oberstes Element
// Vorbedingung: Stapel nicht leer
if (count>=0) {
count--;
}
}
}
Wenn man sich nun die Klasse anschaut, glaube ich,das die Klasseninvariante des Stacks lautet, das der Stack niemals leer sein darf.
Richtig?:bahnhof: Ansonsten bitte korrigieren
Wenn man sich nun die Klasse anschaut, glaube ich,das die Klasseninvariante des Stacks lautet, das der Stack niemals leer sein darf.
Richtig?:bahnhof: Ansonsten bitte korrigieren
Wie kommst du darauf? Wenn ich einen neuen Stack erstelle ist der doch leer, oder wird irgendwo automatisch was eingefügt?
PS: du solltest entweder deine Variable count umbenennen oder ihr die tatsächliche Anzahl von Elementen im Stack zuweisen, dann wär deine falsche Schlußfolgerung wahrscheinlich gar nicht erst zustande gekommen.
Wie lauten denn dann die Bedingungen der Klasseninvariante des Stacks?
Nur wenn count sich im bereich -1 (ich weiß, war dumm mit -1) und 9 bewegt, ist der Stack in einem legalen Zustand.