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