11.07.2015 Aufrufe

Übersetzung von OO-Sprachen

Übersetzung von OO-Sprachen

Übersetzung von OO-Sprachen

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Kapitel 3: Übersetzung <strong>von</strong> objektorientierten <strong>Sprachen</strong>Ansätze haben je nach vorliegendem Fall ihre Existenzberechtigung. Bei dem Ansatzder Mehrfachinstanziierung ergeben sich zwei A-Teilobjekte (siehe Abbildung 7) ineinem C-Objekt und daraus resultierend auch zwei A-Sichten auf ein C-Objekt [BH98,S. 45]. Eine ausführliche Betrachtung <strong>von</strong> zwei konkreten Beispielen, wann eineEinfach- bzw. eine Mehrfachinstanziierung sinnvoll ist, liefert die Fachliteratur [WH97,S. 192] und kann aus Platzgründen an dieser Stelle nicht erfolgen.Bei der Übersetzung <strong>von</strong> Mehrfachvererbungen, die unabhängig <strong>von</strong>einander sind, undkeine namentlichen Überschneidungen haben, muss folgendes Problem überwundenwerden. Wie bereits vorgestellt, wird in C++ mit Methodentabellen gearbeitet, die einenVerweis auf die zu nutzende Methodenimplementierung enthalten. Bei einerEinfachvererbung wird die Methodentabelle der vererbenden Klasse in die erbendeKlasse übernommen und entsprechend angepasst. Dies ist hier jedoch nicht ohneweiteres möglich, da mehrere Methodentabellen vererbt werden, die entsprechendverarbeitet werden müssen.Ein Ansatz zur Lösung ist, die Methodentabelle für jede vererbende Klasse komplett inKopie zu erstellen um die entsprechenden Sichten erstellen zu können wenn z.B. ein CObjekt in einer Variable vom Typ B1 gespeichert wurde. Dies hat jedoch den Nachteil,dass der Speicherbedarf für die Ablage <strong>von</strong> den Methodentabellen exponentiell mit derKomplexität der Definition <strong>von</strong> C wächst und somit ungeeignet ist.-d1+foo()+bar()B1-d2+bar()B2DB1B2B1 + CMethodenB2 MethodenCMethodentabelle-d2+bar()CCAbbildung 8: Klassenhierarchie und Objektstruktur inkl. MethodentabellenAus diesem Grund wird mit einer verteilten Methodentabelle C gearbeitet. Die ersteMethodentabelle für B1 und C enthält dabei neben dem Zeiger auf dieMethodenimplementierung auch einen Offset ∆D, der einen Sprung zumentsprechenden Zeiger auf die B2 Methodentabelle enthält. Dadurch ist es jederzeitmöglich, zwischen den verschiedenen verlinkten Methodentabellen hin-/her zuspringen, um die korrekten Sichten zu bilden. Dieser Offset kann auch als eine15

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!