Objekte von allen erbenden Klassen erstellen



  • Hi,

    wenn eine Klasse X gegeben ist, ist es möglich Objekte von allen von X erbenden Klassen zu erzeugen, ohne die konkreten Namen dieser Klassen zu kennen?

    Wenn nicht, gibt es dann ein Design Pattern um dies so zu erledigen, dass es möglich ist, weitere erbende Klassen später so in den Code einzufügen, dass es möglichst wenige zu modifizierende Codestellen gibt?



  • Andreas XXL schrieb:

    wenn eine Klasse X gegeben ist, ist es möglich Objekte von allen von X erbenden Klassen zu erzeugen, ohne die konkreten Namen dieser Klassen zu kennen?

    Nein. Warum willst du von allen abgeleiteten Klassen Objekte erstellen, ohne diese zu kennen?



  • Factory Pattern?

    Automatisch gehts jedenfalls nicht, du musst zumindest pro Klasse eine Objekte erzeugende Funktion von Hand in einer Liste registrieren.



  • Nexus schrieb:

    Andreas XXL schrieb:

    wenn eine Klasse X gegeben ist, ist es möglich Objekte von allen von X erbenden Klassen zu erzeugen, ohne die konkreten Namen dieser Klassen zu kennen?

    Nein. Warum willst du von allen abgeleiteten Klassen Objekte erstellen, ohne diese zu kennen?

    Naja, ich hatte die Idee, Klassen so zu entwerfen, dass sie sich selbst übers Netzwerk versenden können. Dazu gibt es eine Oberklasse X, die eine virtuelle eindeutige ID hat die die Klasse identifiziert. Davon soll jede versendbare Klasse erben.
    Nun wollte ich, dass am Zielrechner (der natürlich die Definitionen der Klassen hat) den empfangenen Datenstrom wieder in Objekte dieser Klassen umwandeln.
    Ich wollte es so machen, dass der Anwender neue zu versendende Klassen als von X erbend hinzufügen kann ohne im Code zum Versenden und Empfangen der Klassen etwas ändern zu müssen.
    Und genau hier ist das Problem, dass ich ja nicht weiß, wie die zu erbenden Klassen heißen werden die der Benutzer hinzufügen wird.



  • Geschieht das Hinzufügen während der Laufzeit? Dann hast du ja einen Codepunkt, wo du auch gleich deine Klasse "versenden" kannst.
    Ansonsten hast du die Userdefinierten Klassen irgendwo gespeichert. Eine eigene Routine bei Programmstartup sollte diese Speicherorte abklappern können und versenden.
    Wie wäre es mit einem zusätzlichen Description-file, welches die Klassen beschriebt? (Name, abgeleitet von, ...) Dann kannst du dir ein Instanziieren schenken.

    Wie wäre es, wenn du Scripting-Erweiterungen einbaust? Dann kannst du sogar Klassen versenden, ohne dass am Zielrechner eine Definition bekannt sein muss :p



  • Andreas XXL schrieb:

    Nun wollte ich, dass am Zielrechner (der natürlich die Definitionen der Klassen hat) den empfangenen Datenstrom wieder in Objekte dieser Klassen umwandeln.

    Das ist nicht möglich, wenn die dynamischen Typen nicht bekannt sind. Du kannst zwar abstrakt mit den Objekten arbeiten, aber wenn du sie als Objekte der konkreten abgeleiteten Klasse behandeln willst, musst du die entsprechende Klasse kennen (zur Kompilierzeit), da du um einen Downcast nicht herum kommst.



  • Andreas XXL schrieb:

    Naja, ich hatte die Idee, Klassen so zu entwerfen, dass sie sich selbst übers Netzwerk versenden können. Dazu gibt es eine Oberklasse X, die eine virtuelle eindeutige ID hat die die Klasse identifiziert. Davon soll jede versendbare Klasse erben.

    Ja das ist möglich. Wenn du das Problem mit der Serialisierung gelöst hast, sollte so eine Art Klassenregistierung für dich überhaupt kein Problem darstellen.

    Natürlich stellt sich jeder unter dem Begriff "automatisch" etwas anderes vor. Deshalb sind einige hier auch der Meinung, das es automatisch nicht gehe.

    Aber da man ja zwingend ableiten muss, kannst du gewisse Funktionen erzwingen, somit sehe ich da eigentlich keine großen Schwierigkeiten.


Log in to reply