Zitat:
Hab derweil mal etwas anderes versucht, von dem ich mir eigentlich die Lösung versprochen hatte, war aber dann n bissl enttäuscht darüber.
Was denn?
Die Sache mit der Enumeration ist natürlich auch
eine Lösung, nur besteht hier das Problem der Inflexibilität. Fügst du eine neue Klasse hinzu, musst du jedes Mal deine Enumeration korrigieren, bzw. ergänzen. Dein Set an Klassen ist somit "irgendwo" fest definiert. Ich meine, eine Enumeration zu bearbeiten ist technisch gesehen wohl kein Hindernis, nur irgendwie bekommt man mit der Zeit das schleichende Gefühl irgendwie ist das doch alles (...) ihr wisst schon was ich meine. Das ist jedoch alles von Situation zu Situation unterschiedlich. Besitzen Klassen zwei oder mehrere Aufgaben in einem System (mal rein theoretisch, ob das nun gut oder nötig ist, sei mal dahingestellt), dann kann man immer noch von zwei oder mehreren Schnittstellen erben. Das ist aber glaube ich nicht ganz das, worum es hier eigentlich geht.
Ein Beispiel:
Angenommen ich besitze eine Liste aller Objekte einer Spielwelt. D. h. alle Charaktere, Tiere, Häuser, Wände, eben alles. Alle diese Welt-Objekte besitzen eine gemeinsame Basisklasse. Die Liste speichert Zeiger zu den jeweiligen Basisklassen. Beispielsweise haben wir sowas wie std::vector<WorldObject*>, oder man bezeichne die Objekte als Nodes, vorliegen. Es stellt sich hier nun die Frage, was alles kann und soll ich nun mit dieser Liste anfangen, bzw. welche Operationen können/sollten ausgeführt werden? Die konkreten Klassen kenne ich jedenfalls nicht. Die Basisklasse bietet vermutlich nur wenige Funktionalitäten, allerhöhst ein paar ganz allgemeine polymorphe Update-Methoden und Positionierungs-Kram. Was unternehmen wir aber, wenn wir nur ganz spezielle Update-Funktionen aller Charaktere aufrufen möchten? Alle Objekte in der Liste auf den gewünschten Typ hin zu testen wäre ziemlich blöd. Zwar relativ einfach und durchaus realisierbar, aber eben nicht das Wahre. Es gibt zahlreiche Alternativen, angenommen wir wollen den Charakter-Zustand der Figuren aktualisieren. Dann könnten wir dieses Verhalten als eigene AI-spezifische Klasse auslagern, darauf in der Charakter-Klasse verweisen und zugreifen. Ein Charakter besitzt ein Verhalten. Wir führen auch eine Liste aller Verhalten (unsere "Seelen" der Figuren), welche regelmäßig aktualisiert werden. Oder so etwas in dieser Richtung eben. Man sollte eben alles ein wenig dezentralisieren. Das System wird zunächst ein wenig komplizierter, am Ende aber dann doch besser funktionieren. Ich meine, was hat eine Welt-Objekt-Liste überhaupt mit der Aktualisierung der Verhaltens(muster/objekte) von Charaketeren zu tun? Also würde hier schon mal etwas mit den Verantwortlichkeiten der Module nicht stimmen oder man sollte versuchen auf eine passendere Art (von einem anderen Ort aus?) auf die gewünschten Objekte zuzugreifen. (...)