Java Reference
In-Depth Information
1.7.2 Einhalten der Verträge beim Überschreiben
Um das Einhalten der Verträge beim Überschreiben zu betrachten, wird die folgende
Situation zugrunde gelegt:
A
C
B
«
use
»
g()
f(A a)
g()
Bild 1-6 Überschreiben einer Methode
Die Klasse
B
sei von der Klasse
A
abgeleitet und soll die Methode
g()
aus
A
über-
schreiben. Aufrufer von
g()
sei eine Methode
f()
einer Kundenklasse
C
. Die Metho-
de
f()
soll die folgende Aufrufschnittstelle besitzen:
f(A a)
. Mit anderen Worten: An
f()
kann beispielsweise eine Referenz auf ein Objekt der Klasse
A
oder eine Refe-
renz auf ein Objekt der von der Klasse
A
abgeleiteten Klasse
B
übergeben werden.
Der Kunde
f()
kann zur Laufzeit nicht wissen, ob ihm eine Referenz auf ein Objekt
der Klasse
A
oder der Klasse
B
übergeben wird (liskovsches Substitutionsprinzip).
Dem Kunden
f()
ist auf jeden Fall nur die Klasse
A
bekannt und daran richtet er sich
aus! Also kann
f()
beim Aufruf von
g()
nur den Vertrag der Methode
g()
aus
A
beim
Aufruf beachten.
f()
stellt also die Vorbedingungen für
g()
aus
A
sicher und erwartet
im Gegenzug, dass
g()
seine Nachbedingungen erfüllt. Das folgende Bild visualisiert,
dass es für
f()
kein Problem darstellt, eine schwächere Vorbedingung beim Aufruf
von
g()
zu erfüllen:
f()
hat kein
Problem, eine
schwächere
Vorbedingung
zu erfüllen.
f()
kann diese
Vorbedingung einhalten.
f()
kann aber keine
schärfere Vorbedingung
gewährleisten.
Vorbedingung
g()
aus
A
Vorbedingung
g()
aus
B
Bild 1-7 Aufweichen einer Vorbedingung in einer abgeleiteten Klasse
Wie im täglichen Leben auch, darf ein Vertrag übererfüllt werden, er darf aber nicht
verletzt werden! Dies hat zur Konsequenz, dass
g()
aus
B
die
Vorbedingungen
nicht verschärfen
kann, denn darauf wäre der Kunde
f()
überhaupt nicht eingerich-
tet.
g()
aus
B
darf
aber
die
Vorbedingungen aufweichen
(siehe
Bild 1-7). Dies stellt
für
f()
überhaupt kein Problem dar, denn aufgeweichte Vorbedingungen kann
f()
sowieso mühelos einhalten. In entsprechender Weise liegt es auf der Hand, dass
g()
aus
B
die Nachbedingungen nicht aufweichen darf, denn der Kunde
f()
erwartet die
Search WWH ::
Custom Search