Java Reference
In-Depth Information
1.6 Liskovsches Substitutionsprinzip
Polymorphie ist ein zentrales Konzept der objektorientierten Programmierung und
betrifft sowohl Methoden als auch Objekte (siehe [Gol12]).
Polymorphie (Vielgestaltigkeit) von Objekten bedeutet, dass
ein Objekt in einer Vererbungshierarchie von verschiedenem Typ
sein kann. Es kann vom Typ einer Basisklasse sein, aber auch
vom Typ einer Unterklasse.
Das ist genauso zu sehen wie im Alltag, wo beispielsweise ein Student einerseits als
eine normale Person, andererseits aber auch als Student, d. h. als eine Instanz einer
Unterklasse Student der Klasse Person auftreten kann.
Wichtig ist, dass im Falle des Überschreibens einer Methode der
Basisklasse in einer Unterklasse die überschreibende Methode
der Unterklasse gleichartig wie die überschriebene Methode der
Basisklasse aufgerufen wird und auch gleichartig antwortet, wo-
bei die Implementierung der Methode jedoch eine andere Ausprä-
gung annimmt.
Barbara Liskov hat in [Lis87] Bedingungen formuliert, unter denen ein Programm die
Verwendung polymorpher Objekte gefahrlos unterstützt. Die Bedingungen sind seit-
dem als liskovsches Substitutionsprinzip ( LSP ) bekannt. Das liskovsche Substi-
tutionsprinzip fordert:
Will man Polymorphie von Objekten für ein Programm haben, so
muss im Programm eine Referenz auf eine Instanz einer abgelei-
teten Klasse in einem Programm an die Stelle einer Referenz auf
eine Instanz einer Basisklasse treten können. Überschreibende
Methoden in der abgeleiteten Klasse dürfen hierbei die Verträge
einer Basisklasse mit Kundenklassen, d. h. die Vor- und Nach-
bedingungen der Methoden der Basisklasse und ihre Klassenin-
varianten nicht brechen.
Solange bei der Ableitung von einer Basisklasse der Vertrag der entsprechenden Ba-
sisklasse in der abgeleiteten Unterklasse nicht gebrochen wird, ist es möglich, das für
Basisklassen geschriebene Programm auch für Unterklassen zu verwenden, die even-
tuell erst später erfunden werden.
Findet ein Überschreiben - also die Neudefinition einer Operation
in einer abgeleiteten Klasse - statt, so muss darauf geachtet wer-
den, dass in der abgeleiteten Klasse die Verträge der Basisklasse
eingehalten werden.
Search WWH ::




Custom Search