notGuido hat geschrieben:Ich will ja explizit 99% wiederverwenden = Sinn einer Ableitung.
Nein. Oder besser gesagt,
ja, schon, aber anders, als du denkst. Vererbung sollte nicht dazu dienen, in einer Kindklasse Funktionalität aus der Elternklasse zu wiederzuverwenden. Statt dessen sollte der Client-Code, der Exemplare der Elternklasse verwendet, auch mit Exemplaren der Kindklasse verwendbar sein, ohne dass dort zwischen beiden unterschieden werden muss.
Wenn ich zB. eine Verkehrssimulation programmiere, dann sollte ich nicht ein
Motorrad als
Fahrrad mit Motor aber ohne Pedale oder ein
Fahrrad als
Motorrad ohne Motor aber mit Pedalen modellieren, sondern beide von einer Schnittstellenklasse
Zweirad (oder von mir aus auch
Fahrzeug) ableiten, die eben keine besondere ererbbare Funktionalität, sondern nur Schnittstellenbeschreibungen in Form von zB. leeren Methoden enthält. In Python kann man das sogar komplett weglassen, weil die Schnittstelle gar nicht erst explizit hingeschrieben werden muss, da es genügt, wenn einfach beide Klassen,
Fahrrad und
Motorrad, dieselben Methodensignaturen besitzen. Man nennt das
Duck Typing.
Der Code, der Exemplare dieser Klassen verwendet, ist das, was man wiederverwenden möchte. Man möchte nicht jedesmal, wenn ein neuer Fahrzeugtyp dazukommt, den gesamten Code durchsuchen müssen um jede Stelle anzupassen, wo ein
Motorrad oder
Fahrrad oder ein anderes Fahrzeug verwendet werden. Wenn man das zentrale Konzept der real existierenden Objektorientierung betrachtet, den Polymorphismus, dann ist dieser genau das Konzept, das diese Art der Wiederverwendung ermöglicht.
Siehe auch hier.
In specifications, Murphy's Law supersedes Ohm's.