Klassenhierarchien verheiraten
-
Hallo,
Mein DXF Fileparser ist Dank Eurer Hilfe fertig ( noch nicht schön, aber funktionierend ). Entstanden sind dabei ein paar Klassen (7), die das ganze managen. Die sind alle durch Kompositionen, bzw. Referenzierung miteinander vestrickt.
Nun komme ich zu dem Punkt, für den ich das ganze eigentlich geschrieben habe: Einbasteln in mein bestehendes Projekt für das Overlayhandling. Dort steht im Prinzip ein relativ komplexes Klassen - Gerüst. An der Stelle, wo ich jetzt die Dxf - Klasse einsetzen will überlege ich jetzt wie ich einbinde (beide Hierarchien verheirate) :1.) Mehrfachvererbung, da ich ja sowohl die alte Basisklasse, als auch die neue
Dxf - Klasse brauche2.) WrapperKlasse, die über Komposition der Dxf - Klasse das ganze hinbiegt
Variante 2 ist IMHO auf jeden Fall eleganter. Habt Ihr irgendwelche generellen Tips für so eine Problematik?
-
Ich versteh das Problem nicht ganz. Ich fass mal kurz zusammen wie ich es verstanden habe, ok?
Du hast eine Parser geschrieben.
Du hast eine Anwendung geschrieben.
Du willst Parser in die Anwendung integrieren.
Die Anwendung hat bereits einen Parser.
Der Parser ist veraltet, aber wird dennoch benötigt.Wenn das soweit stimmt - warum brauchst du den alten Parser? zuviel Code zum umschreiben? Dann einfach den Code vom alten Parser wegschmeissen und einen Wrapper um den neuen Parser basteln, der das Interface des alten Parsers anbietet.
Wenn das nicht stimmt - bitte genauer erklären.
-
Vorher wurde nicht geparst. Es war ein eigenes "Dateiformat".
Der Parser ist nicht das wesentliche. Es geht auch um Verwaltung der Zeichenobjekte in einem Kontainer und deren Visualiserung( alt wie neu ). Die alte Variante fliegt vom Filehandling her komplett raus. Für das Datenhandling der Overlays besteht aber viel Funktionalität, die gerne erhalten würde ( Messfunktionen, Positionsabfrage, Selektierungsfunktionen u.s.w.). Außerdem erben in diesem Zweig alle Objekt von einer Basisklasse, um eine einheitliche Schnittstelle zu haben ( Zoom, Move, Scroll u.s.w. ).
Jetzt kommt der DXF - Zweig daher, der auch eigene Funktionalität hat, die nach der Zusammenführung auch zur Verfügung stehen soll.Problematik ist also, das ich aus beiden Zweigen Funkltionalität brauche (hört sich nach Mehrfachvererbung an). Mir ist eine Komposition aber einfach sympatischer (auch wenn es mehr Arbeit ist).
-
OK, jetzt bin ich n bisschen verwirrt
Für mich klingt alles was sich so ähnlich anhört wie "etwas altes durch etwas neues ersetzen" nach Wrapper.
Was mir jetzt noch nicht klar ist - inwiefern brauchst du die 'alten' Sachen.
Du sagst das Datenhandling arbeitet mit dem alten Code? Dan kommt ein Wrapper doch ziemlich optimal, oder?
Ich glaube ich bin momentan etwas blockiert
Kannst du vielleicht n bisschen Pseudocode posten? Vielleicht hilft mir das beim denken...
-
Sollten die Zeichenobjekte nicht auch Lade/Speicher Routinen haben ?
Aber eigentlich empfiehlt sich ein Wrapper, um die beiden Layer zu verbinden.Devil
-
Sollten die Zeichenobjekte nicht auch Lade/Speicher Routinen haben ?
Hatten Sie vorher. Da hatte sogar jede ein eigenes File Uahhh :). Ne, das läuft jetzt so: Clas CDxfReadWrite Läd die Objekte und sortiert sie in einen Kontainer (DrawPrimContainer). Die Zeischenobjekte haben lediglich ihre eigene Zeichenroutine, die aber auch der Container aufruft.
@Shade
Je mehr ich drüber nachdenke, desto plausibler wir die Wrapper Variante. Ist mit Mehrfachvererbung eigentlich gar nicht (sauber) zu lösen.
Verallgemeinert wäre also tasächlich -> Aus zwei (Klassenhierarchien) mach eine und nehme aus jeder ein bisschen Funktionalität mit. Hat jemand ein paar Tips, auf was man bei diesem speziellen Wrapper - Fall achten sollte (vorzugsweise ein Entwurfsmuster - hab das Buch gerade neben mir liegen)
-
interfaces
beispiel COM:
IDirect3D
IDirect3D7
IDirect3D8
IDirect3D9schön abwärtskompatibel