Java Reference
In-Depth Information
Ergebnisse in einem bestimmten Bereich (siehe Bild 1-8). Das folgende Bild zeigt das
Verschärfen einer Nachbedingung in einer abgeleiteten Klasse:
f() verlässt sich
darauf, dass das
Ergebnis von g()
in einem gewissen
Bereich liegt.
f() erhält von
g() eine bessere
Qualität als
erwartet.
Nachbedingung
g() aus B
Nachbedingung
g() aus A
Bild 1-8 Verschärfen einer Nachbedingung in einer abgeleiteten Klasse
Da ein Kunde sich auf die Basisklasse eingestellt hat, muss sichergestellt werden,
dass der überschreibende Anteil sich korrekt verhält.
Eine Nachbedingung kann nur verschärft werden (kleinerer Wer-
tebereich), denn auf eine aufgeweichte Nachbedingung (größerer
Wertebereich) wäre der Kunde gar nicht vorbereitet, da er sich an
der Basisklasse orientiert. Genausowenig kann der Kunde einen
engeren Wertebereich bei der Vorbedingung akzeptieren, da er
auf den Wertebereich der Basisklasse vorbereitet ist. Eine Vorbe-
dingung kann also nur aufgeweicht werden, denn eine aufge-
weichte Vorbedingung kann der Kunde problemlos erfüllen.
Beispiel:
Eine überschreibende Methode einer abgeleiteten Klasse darf:
x eine Nachbedingung der überschriebenen Methode nicht aufweichen, d. h., wenn
eine Methode z. B. einen Rückgabewert vom Typ int hat und garantiert, dass sie
nur Werte zwischen 1 und 10 liefert, so darf die überschreibende Methode keine
Werte außerhalb dieses Bereichs liefern,
x eine Vorbedingung der überschriebenen Methode nicht verschärfen, d. h., wenn
eine Methode z. B. einen formalen Parameter vom Typ int spezifiziert und einen
gültigen Wertebereich zwischen 1 und 10 hat, so darf die überschreibende Methode
diesen Wertebereich nicht einschränken.
Wird etwa eine Invariante einer Basisklasse durch eine über-
schreibende Methode in einer abgeleiteten Klasse aufgeweicht,
so kann das zu einem Fehlverhalten der abgeleiteten Klasse füh-
ren, denn darauf ist eine Kundenklasse nicht vorbereitet.
Vorsicht!
Search WWH ::




Custom Search