2012-06-15 9 views
5

in der Hoffnung, dass ein Großmeister etwas Licht werfen kann. Sehr hoher Überblick ist, dass ich kein Anfänger zum Codieren bin, aber immer noch neu in OOP. Diese Reihe von Nachrichtenklassen ist das Herzstück einer großen Simulationsanwendung, die wir schreiben, und ich möchte es nicht dumm machen - diese Schnittstelle schneidet die Anwendung in zwei Hälften, vom Sequenzer zum Executer und umgekehrt.Deep Class Vererbungshierarchie - schlechte Idee?

Meine Frage ist, ob es eine schlechte Idee ist, eine Vererbungshierarchie so tief zu haben (Bild ist noch nicht ausgearbeitet, könnte am Ende 5 oder 6 tief gehen). Dies ist im Gegensatz dazu, einige der untergeordneten Klassen nur eine gerichtete Zuordnung zu ihrer Elternklasse zu haben, anstatt sie zu erben.

Ich habe gelesen, dass eine tiefe Vererbungshierarchie keine gute Idee ist, und dass, wenn eine Kindklasse einfach geerbt wird, um die Elterndaten zu haben, dann sollten Sie einfach die Eltern als Daten in das Kind einfügen, aber ich ' Es fällt mir schwer, meinen Kopf darum zu wickeln. Was Schlimmes wird uns passieren, wenn ich mich dazu entscheide, eine Vererbungshierarchie 7-tief oder so zu machen? Natürlich gibt es einen kleinen Leistungseinbruch, und Veränderungen an der Spitze der Hierarchie werden riesige Wellen in der App haben, aber ansonsten sehe ich kein Problem. Abgesehen davon kümmere ich mich nicht um kleine Unterschiede in der Leistung.

Class Hierarchy

(Bonus-Frage: Gibt es ein Off-the-shelf-Paket, das diese Art von Sachen Griffe Wir haben die meisten der geringen physikalischen Simulationen behandelt, aber die Sequenzierung Programm wir gehen zu müssen, Ich habe nur den Verdacht, dass das, was ich dargelegt habe, dem von 10.000 Simulationsentwicklern vor mir sehr ähnlich ist.)

(Bonusfrage 2: alle Master beider Simulationssysteme und OOP-Programmierung, das würde es hassen, nicht in Los Angeles leben? Wir stellen.)

+0

Ich verstehe nicht, die Details, aber das Layout sieht mir ziemlich chaotisch. Wie für q. 2, zu bat Du hast mich vor 7 Jahren nicht gefragt. –

Antwort

9

Wenn eine Kindklasse geerbt wird, müssen einfach die Elterndaten

sein. Dies ist eine schlechte Idee. Es gibt dieses Verständnis, dass Sie Basisklassen als die allgemeinsten Verträge definieren, die eine Reihe von (konkreten) Klassen ehren wird. Dies bedeutet normalerweise, dass Ihr Vertrag über Verhalten und nicht Implementierung ist.

Was wird uns passieren, wenn ich mich dazu entscheide, eine Vererbungshierarchie 7-deep oder so zu machen?

Die wichtigsten Themen hier sind banal:

  • Fragile Basisklassen (Änderungen Basis sind ein Albtraum für die abgeleitete)
  • erhöhte Kopplung (mit zu vielen Basisklassen kommt enge Kopplung)
  • Encapsulation weakens
  • Testen Probleme (Leaf-Level überschreiben Methoden können nicht nur getestet werden, um Endbenutzerverhalten immer aufgrund mehrerer angekettete Aufrufe hier und da richtig reproduzieren)
  • Wartung (kommt von der starken Kopplung)

(Sie wollen viele dieses Papier auf Why Ada isn't popular lesen, insbesondere Artikel 6, Absatz 6.

)

Gibt es ein Off-the-shelf-Paket, das diese Art von Sachen behandelt?

Ich bin mir nicht sicher, was Sie suchen, aber wenn Sie nach einem automatisierten Hierarchievereinfacher suchen, dann kenne ich keine. Auch wenn ein solches Paket existiert, hängt es stark von der Sprache Ihrer Wahl ab und Sie haben noch keine erwähnt.

Beachten Sie, dass die meisten der Zeit solche Probleme können durch einen Blick auf Alternativen wie Aggregation oder Züge oder Dependency Injection oder was auch immer gelöst werden. Dies sind Entwurfszeitprobleme und sind normalerweise (IMO) am besten auf einem Whiteboard auszubügeln als mit einem Compiler und Millionen von LOC.

1

Sehen diese Frage ziemlich spät, aber ich habe viele Gedanken dazu hatten und haben mit tiefen Vererbungshierarchien gebissen worden. Ein Grund, warum sie schlecht sind, liegt darin, dass Sie die Klassifizierung unweigerlich falsch bekommen werden, wenn Sie die vielen Unterklassen spezialisieren. Sobald Sie jedoch die Klassenstruktur an Ort und Stelle haben, wird es schwierig sein, sie zu ändern, da dies den Client-Code beschädigen würde.

gebloggt ich diesen here.

Verwandte Themen