Problem beim Late Binding



  • Hallo,

    Habe hier ein Factory Pattern, die Oberklasse CElement ist abstrakt. Ihre Unterklassen sind konkret.

    Eine neue Instanz erstelle ich so:

    CElement *ptrModell;
    ptrModell = new NodeC;
    

    Wenn ich nun eine Methode von NodeC aufrufen will, z.B. setParam():

    (*ptrModell).setParam();
    

    So muss die Methode setParam in der Basisklasse virtuell sein.

    Mein Problem ist, dass ich 7 Klassen von der Baseclass CElement abgeleitet habe und sie alle haben spezielle Methoden, d.h. für jede Klassenspezifische Mehtode muss ich automatisch in der Baseclass CElement eine virtuelle davon erstellen. Das sieht nicht schön aus und ausserdem muss man so eine Mehtode an 2 Stellen definieren.

    Frage: Kann man das irgendwie schöner machen, ohne dass ich anfange zu casten oder switchen. Was ja imho noch schlimmer wäre!?



  • Naja, da scheint das Design irgendwie kaputt zu sein, also das mal überprüfen und überarbeiten bzw. eine einheitliche Schnittselle suchen die Du auf die Spezielle umbrichst.

    a.execute() als Beispiel. Das muss jede Klasse haben , und jede Klasse implementiert in execute() die spezialisierten aufrufe.

    Geht natürlich nur wenn Du bei jeder speziellen Methode die gleichen Parameter hast.

    Wenn das nicht geht macht es keinen Sinn zu vererben und die Objekte per switch oä zu verwursten.



  • Ok, Ich wuerde noch was sagen.
    In der Situation, wenn man eine feste Hierarchie von Klassen hat und ohne die Klassen zu berühren noch eine virtuele Methode hinzufuegen möchtet, nützt es sich einen Blick aufs Visitormuster zu werfen.


Anmelden zum Antworten