Nachteile der Vererbung

Warum die Vererbung nicht alle Probleme löst

Das Thema Vererbung spielt in der Objektorientierung eine wichtige Rolle. Nicht umsonst ist es auch zentraler Bestandteil der Abschlussprüfung. Ich habe sogar eine separate Podcast-Episode dazu aufgenommen: Häufige Fragen im Fachgespräch – Vererbung.

Beate Ritterbach geht in diesem Artikel bei heise Developer auf die Vererbung und ihre Unzulänglichkeiten ein: Vererbung: für Objekte nützlich, für Werte gefährlich.

Anhand gut verständlicher Beispiele wie dem Kreis-Ellipsen-Dilemma zeigt sie, wo die Vererbung ihre Schwachstellen hat bzw. wofür sie einfach nicht geeignet ist. Der Artikel zeigt sehr schön, dass man als Entwickler eben gerade nicht immer alle Probleme mit den verfügbaren Mitteln der Programmiersprache lösen muss oder kann.

Dazu passt sehr schön das folgende Zitat von Paul Watzlawick:

Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

Wer als Prüfling eine Diskussion wie die aus dem Artikel im Fachgespräch abliefern kann, ist auf direktem Weg zur „1“ 🙂 Daher gibt es eine unbedingte Leseempfehlung von mir!


Hattest du auch schon einmal einen Fall, bei dem du mit Vererbung arbeiten wolltest, aber sie sich als unpassend herausstellte? Setzt du häufig Vererbung in deinem Code ein?

2 thoughts on “Warum die Vererbung nicht alle Probleme löst

  1. Wir haben ein Projekt, bei dem Interfaces meines Erachtens falsch benutzt wurden. Es gibt z.B ein Interface CrudController, in dem simple Methoden für die CRUD-Operationen definiert sind.
    In vielen Controllern reichen die simplen Entitäten aber nicht, sonder ich brauche noch den aktuellen Nutzer, hochgeladene Dateien o.Ä.. Das führt dazu, dass einige Methoden nur existieren, um das Interface zu implementieren, aber eigentlich deprecated sind und auch absolut nix tun.

    Oder Fälle, wo in der Super-Klasse eine ungewollte Veränderung vorgenommen wird, welche dann von der Kind Klasse wieder „kompensiert“ werden muss. Hier hätte ich mit mehreren kleinen Methoden gearbeitet, oder die Eltern Klasse abstrakt gemacht und Teile der Implementierung an die Kind-Klassen weitergegeben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax