2009-06-22 7 views
1

Ich baue Code für ein 2D-Szenen-Diagramm und ich habe eine einzelne abstrakte Klasse, Knoten, der verwendet wird, um anzuzeigen, dass ein Elementtyp in einem Szenegraph verwendet werden kann. Klassen, die davon implementiert werden, sind jedoch von unterschiedlichen Typen wie Blattknoten und Transformationsknoten. Wie würde ich diese Unterschiede anzeigen? Würde ich Attribute, andere Schnittstellen oder was?Wie zeige ich Unterschiede in dieser Situation an?

Bearbeiten: Es scheint, dass ich unzureichende Informationen gegeben habe. Hier ist, so viele Informationen wie ich auf meiner aktuellen Hierarchie zur Verfügung stellen kann:

  • INode Schnittstelle
    • eine Matrix TransformationMatrix
    • genannt erfordert
    • erfordert eine Liste der INodes genannt Kinder
    • einen Knoten namens erfordert Eltern
    • erfordert, dass eine Methode namens Draw implementiert wird, die eine Matrix als Argument akzeptiert und nichts zurückgibt
  • Node-Klasse
    • implementiert die Inode-Schnittstelle
    • Draw-Aufruf (virtual void mit 1 Argument vom Typ Matrix) ruft einfach jedes Kind INode der Draw-Methode.
  • verschiedene Klassen, die
    • diese sind tatsächlich Knoten von Knoten ableiten und können Sie Transformations Knoten, Blattknoten usw.
+0

Das könnte ein wenig helfen: http://blogs.msdn.com/ericlippert/archive/2009/02/02/properties-vs-attributes.aspx –

+0

Das würde bedeuten, dass ich Attribute verwenden sollte (ich bin Versuchen Sie anzugeben, welche Art von Knoten, die abgeleiteten Klassen sind), aber ich bin nicht ganz davon überzeugt, dass dies die beste Option ist. – RCIX

+0

Ist der Typ des Knotens eine Tatsache über den Mechanismus der Klasse oder eine Tatsache darüber, wofür die Klasse verwendet wird? –

Antwort

0

Seine schwer zu raten, da Sie nicht haben hat uns zu viele Informationen über Ihre Problemdomäne gegeben. Außerdem mischen Sie Ihre Terminologie ein wenig, also bin ich unklar, wenn Sie die Blatt- und Transformationsknoten als Schnittstellen, abstrakte Klassen oder Klassen sehen.

Ich denke, in Bezug auf das Design müssen Sie sich fragen, was einen Blattknoten von einem Transformationsknoten unterscheidet. Wenn es nur die Eigenschaften des Knotens sind, dann mag vielleicht die Verwendung von Attributen die eleganteste Lösung sein, aber wenn sie unterschiedliche Verhaltensweisen haben, dann würde das mich auf separate Klassen hinweisen.

Basierend auf den Namen können wir annehmen, dass der Transformationsknoten "transformierbar" ist und daher eine "Transform" -Methode hat, aber ein Blatt nicht transformierbar ist. Ich würde dann vorschlagen, dass es für den Blattknoten besser ist, keine Transformationsmethode zu haben und in einer anderen Klasse zu sein.