steckl: C++: wie mache ich richtiges OO-Design?

Beitrag lesen

Hi,

Danke fuer deine recht umfangreiche Antwort, aber ich denke wohl immernoch zu kompliziert.

Wenn die Klasse Taschenrechner beispielsweise ein Display-Objekt als Eigenschaft hat, besteht zwischen den beiden Klassen auch eine Beziehung.

Und wie koennte diese Beziehung dann konkret umsetzen?
Bei Rechner ein Attribut "display:Display", das ich dann mit einer setDisplay-Methode aufrufe?
Wie sollte dann die setDisplay-Methode aufgerufen werden?
Entweder mit einem vorher angelegten Display-Objekt, oder ohne Parameter, so dass sie das Objekt selbst anlegt?
Dann haette ich eine gerichtete Assoziation, bzw eine Komposition, oder?
Waere es schlechter die Beziehung in die andere Richtung zu machen? Also in Display ein Attribut auf das Rechner-Objekt setzen?
Oder braeuchte ich eh eine Beziehung in beide Richtungen?

Bei deinem Taschenrechner ließe sich die Klasse AbstractDisplay als Schnittstelle ansehen. Indem du in dem Taschenrechner nur diese Klasse verwendest, ignorierst du automatisch diejenigen Eigenschaften konkreter Displaytypen, die für die Einbindung nicht relevant sind. Da auch alle Display-Arten, da sie als Unterklasse von AbstractDisplay abgeleitet sind, die Methoden der Klasse AbstractDisplay teilen, ist es später zudem problemlos möglich eine Art Display gegen eine andere auszutauschen, ohne dass der Taschenrechner-Code geändert werden müsste.

Muesste AbstractDisplay dann im einfachsten Fall nur eine abstrakte Funktion "anzeigen(float ergebnis):void" haben, die dann in den abgeleiteten Klassen (z.B. GruenesLeuchtDisplay) ueberlagert wird?
Wie koennte ich aber dann wieder die Beziehung von Rechner auf AbstractDisplay, bzw. GruenesLeuchtDisplay herstellen? Der Datentyp der Referenz in Rechner waere ja dann, je nach Display-Typ unterschiedlich.

Das einzige was mir einfallen wuerde waere nur in die andere Richtung zu gehen, also von Display auf Rechner (mit einer Referenz auf Rechner in einem Attribut von AbstractDisplay). Was aber den Nachteil haette, das ich vom Rechner nicht auf sein Display schliessen kann.

mfG,
steckl