Ich habe eine C++ - Klasse, die die Ausrichtung eines Objekts im 3D-Raum beschreibt - Position, Drehung, Skalierung usw. Ich habe andere Klassen, die unbedingt Informationen wie diese (oder eine Teilmenge davon) benötigen - Modelle, Terrains, Kameras, usw. Nun kann ich diese Unterklassen meiner Orientierungsklasse machen, aber die Googles haben mir gesagt, dass ich Komposition über Vererbung bevorzuge. Das macht philosophisch Sinn - ein Modell ist keine Orientierung, es hat man (und ja ich weiß, das ist-a hat-eine Sache ist nur eine Heuristik). Dennoch scheint es unnötig, fast komisch unelegant, die gleichen Wrapper-Methoden für all diese Möchtegern-Unterklassen einfach auf diese Funktionalität zu bringen. Dinge wie model.getOrientation().set_x(1)
scheinen albern zu sein.C++ - Zusammensetzung - muss ich all diese Funktionen einpacken?
Ich kann sehen, warum dies nicht "zu schlecht" für kleine Objekte wäre, aber für dieses Beispiel (und andere mögen es), was ist der Punkt der Zusammensetzung, wenn Sie sowieso durch Reifen gehen müssen, um so zu tun, dass Sie Vererbung verwenden? Soll ich es jetzt auch benutzen? Ich bin mir fast sicher, dass ich falsch darüber nachdenke.
Was ist los mit 'model.orientation.set_x (1)'? – Lol4t0
@ Lol4t0 Es scheint ausführlich. Und solltest du einem Objekt nicht sagen können, etwas zu tun, ohne es sozusagen zu zerlegen? Vielleicht würde eine ähnliche Entwurfsmusterinstanz helfen? – GraphicsMuncher
Die Sache ist, dass das Setzen der Orientierung kein aussagekräftiges Objekt ist, was zu tun ist (wenn Objekt nicht Orientierung ist). Das! ist eigentlich ein Problem. Du solltest keine Orientierung für Objekte festlegen, stattdessen solltest du mit ihnen reden, wie 'Monster-> attack()' oder 'camera-> zoom()'. – Lol4t0