Java Reference
In-Depth Information
Vogel
+ essen() : void
+ fliegen() : void
Pinguin
Amsel
Storch
+ essen() : void
+ essen() : void
+ fliegen() : void
+ essen() : void
+ fliegen() : void
Bild 1-4 Jede abgeleitete Klasse besitzt sämtliche Methoden der abstrakten Klasse
Wird die Methode fliegen() in der Klasse Pinguin implementiert, wobei eine Ex-
ception geworfen wird oder einfach nichts passiert (leerer Methodenrumpf), da ein
Pinguin ja nicht fliegen kann, so bricht dieses Vorgehen den Vertrag, den die Basis-
klasse Vogel mit einer Kundenklasse hat. Die abgeleitete Klasse Pinguin verstößt
somit gegen das liskovsche Substitutionsprinzip. Wird dies fälschlicherweise billigend
in Kauf genommen, so kann dies zu einem unerwarteten Verhalten führen, beispiels-
weise dann, wenn man über eine Liste von Vögeln iteriert und für jedes Element dieser
Liste die Methode fliegen() aufruft.
Durch Einteilen der Vögel in flugfähige und flugunfähige Tiere kann - wie in folgendem
Bild gezeigt - das Problem gelöst werde n:
Vogel
+ essen() : void
Flugunfaehiger_Vogel
Fliegender_Vogel
+ essen() : void
+ fliegen() : void
+ essen() : void
Pinguin
Storch
Amsel
+ essen() : void
+ essen() : void
+ fliegen() : void
+ essen() : void
+ fliegen() : void
Bild 1-5 Einteilung der Vögel in unterschiedliche Gruppen
1.7 Design by Contract
Entwurf durch Verträge (engl. Design by Contract , abgekürzt: DbC ) wurde von
Bertrand Meyer [Mey97], dem Entwickler der Programmiersprache Eiffel, als Entwurfs-
technik eingeführt. Diese Technik wurde in Eiffel in eine Programmiersprache um-
gesetzt, stellt aber ein allgemeingültiges Prinzip dar, das beim objektorientierten Ent-
Search WWH ::




Custom Search