Jede gute Beispiele für Erben von einer konkreten Klasse?

Hintergrund:

Als Java-Programmierer, der ich ausgiebig Erben (statt: implementieren) von Schnittstellen, und manchmal habe ich das design abstrakte Basis-Klassen. Allerdings habe ich nie wirklich das Bedürfnis verspürt, Unterklasse eine konkrete (nicht-abstrakte) Klasse (in den Fällen wo ich es gemacht habe, es stellte sich später heraus, dass eine andere Lösung, wie delegation wäre besser gewesen).

So, ich bin jetzt Anfang zu spüren, dass es fast keine situation, wo Erben von einer konkreten Klasse angemessen ist. Für eine Sache, die Liskov-substitution-Prinzip (LSP) scheint fast unmöglich zu erfüllen, für nicht-triviale Klassen; auch viele anderen Fragen hier scheinen echo eine ähnliche Meinung.

Also meine Frage:

In die situation (wenn überhaupt), macht es tatsächlich Sinn macht, Erben von einer konkreten Klasse?
Können Sie ein konkretes, reales Beispiel für eine Klasse, die erbt von einem anderen konkreten Klasse, wo Sie glauben, dies ist das beste design, das angesichts der Zwänge? Ich B besonders interessiert Beispiele, die Erfüllung der LSP (oder Beispiele, wo die Befriedigung LSP scheint unwichtig).

Ich hauptsächlich ein Java-hintergrund, aber ich bin daran interessiert, Beispiele aus jeder Sprache.

  • Bei der Codierung wird eine Hierarchie von Klassen, wie die des trivialen Hund extends Tier. Ich in der Regel verwenden Sie Vererbung, ausgiebig bei der Codierung Datenmodelle. Für mich, Modellierung wirklichen Leben Dinge, ist, wenn inheritence kommt, um zu spielen.
  • Vorausgesetzt, ich habe, was du meinst, durch delegation: Ein guter Grund für die Verwendung von Unterklassen ist, dass es ein so großes Kopfzerbrechen Klassen definieren, delegieren alle Methoden einer Schnittstelle zu einer anderen Klasse in Java und vielen anderen OOP-Sprachen auch. So die gängige Praxis zu akkumulieren mehr und mehr interfaces in Klassen durch den Aufbau einer Hierarchie, in der jeder Unterklasse implementiert eine andere Schnittstelle der Basis-Klasse nicht. Im Idealfall, aber es macht Haufen mehr Sinn zu delegieren, Schnittstellen.
  • Es gibt den pathologischen Fall der Erben von Object ...
  • +1 für eine ausführliche Erklärung...
  • Meine Erwähnung der "delegation" bezeichnet die "delegation pattern". Ich bearbeitet meine Frage auf einen link.
  • Was macht Sie glauben, meine "Wiederverwendung von code-Statistiken" niedrig sind? Es gibt viele andere Möglichkeiten, um code wiederzuverwenden neben der Vererbung.
  • Ich habe gefragt, die gleiche Sache. Überprüfen Sie heraus die Frage, die ich fragte: stackoverflow.com/questions/3351666/why-use-inheritance-at-all
  • in diesem Fall meinte ich das gleiche. Meinst du nicht, dass Java hätte es viel einfacher zu delegieren? Wenn die syntax zu delegieren, eine gesamte Schnittstelle zu einer Instanz war zu kurz, ich würde nie die Vererbung verwenden, es sei denn, eingeschränkt durch eine Bibliothek, die ich verwende. Aber, wie es jetzt ist, ist es einfach ein Kopfschmerz zu delegieren, wenn Ihre Objekte zu implementieren, die viele Schnittstellen oder große Schnittstellen.
  • Verwandte: Warum sollte eine Klasse sein, die alles andere als "abstract" oder "final/versiegelt"?
  • Auch im Zusammenhang: Ist die Vererbung konkreter Klassen, die das böse?

InformationsquelleAutor sleske | 2011-09-21
Schreibe einen Kommentar