Friendklassen in diesem Fall ok?



  • Hallo!

    Ich wollte von Grund auf meine Engine (na ok, Framework) neu designen. Jetzt gibt es eine Klasse Engine, die wiederum Klassen wie Direct3D, DirectSound usw. enthält.

    Auf die Attribute müsste ich zugreifen, wäre es jetzt in Ordnung wenn diese Klassen Freunde von der Klasse Engine wären?



  • - Scott Meyers: "Und wie im richtigen Leben schaden Freunde mehr als sie nützen" Ich persönlich mag friends nicht und denke, dass man Klassen so designen sollte, dass sie wiederverwendbar sind. Das schließt aus, dass nur bestimmte Funktionen/Klassen Zugriff haben. Ausnahmen gibt es sicher, spätestens bei bestimmten Operatoren.
    - Die Frage lässt sich wohl kaum allgemein beantworten
    - Ich glaube, der weitverbreitetste Anfängerfehler ist es, ein fette Klasse "Engine" zu haben, die alles macht und kann und hat.



  • Also du meinst ich soll die guten alten Get-Methoden verwenden?

    - Ich glaube, der weitverbreitetste Anfängerfehler ist es, ein fette Klasse "Engine" zu haben, die alles macht und kann und hat.

    Wieso die alles macht und die alles kann? Für Direct3D gibt es eine Klasse, für DirectMusic, für die Schriften, für DirectInput, die Klasse Engine kapselt diese Klassen nur. 😕



  • Noch genauer:

    Ich schreibe dann z.B. eine Klasse Direct3D, die kümmert sich um den ganzen d3d9 Kram, dass gleiche mache ich mit allen anderen Bereichen und diese Klassen verwenden dann in der Klasse Engine / Framework verwendet.



  • Eine Klasse "Engine" ist Unsinn. Der Begriff Engine bezeichnent eine Bibliothek (in der OO-Welt eine Sammlung von Klassen).
    Du hast nicht eine "Engine", die alles macht, Sound, Grafik, Netzwerk, ...

    Du hast ne Grafikengine, die mit der Soundengine _nichts_ zu tun hat. Du hast ne Wegfindungsengine, die nichts mit der Physikengine zu tun hat. Es gibt keinen Grund, alles zusammenzufassen. Du kannst es in den selben Namespace "Betriebssystem-Interaktion" (Wegfindung und Physik natürlich nicht) zusammenfassen und dort weiter unterteilen.

    Engine wird hier immer öfter scheinbar wahllos als Begriff für eine ultimative, allgemeine Problemlösung verwendet, wo dann das halbe Spiel darin verpackt sein soll.

    Also du meinst ich soll die guten alten Get-Methoden verwenden?

    Kann man wie gesagt nicht allgemein sagen. In den meisten Fällen ist das jedoch eine bessere Lösung als friend. Schnittstellendesign ist mit friend ungleich komplizierter und danach kann deine Klasse nicht weiterbenutzt werden, ohne dass du sie ständig änderst. friend war nie als Ersatz für getter/setter gedacht, das sind zwei verschiedene Paar Schuhe.


Anmelden zum Antworten