Erweiterung des "Oberon Reflection Model"

Im Oberon-System gibt es mit dem Modul Ref eine Basis für Metaprogrammierung (beschrieben im technischen Berichts Nr. 8).
Metaprogrammierung nennt man die Möglichkeit, Programme als Daten zu betrachten, z.B. zur Laufzeit Informationen über die Namen und die Struktur von Variablen, über Typen und Prozeduren zu erhalten. Wenn ein Programm diese Information auch über sich selbst erfragen kann, spricht man von Reflection.
Neben Lisp und Smalltalk bietet auch Java Reflection in eingeschränkter Art und Weise an. Reflection ermöglicht "generisches" Programmieren, da man z.B. beliebige Objekte erzeugen kann und noch mehr Flexibilität hat als mit reiner objekt-orientierter Programmierung.
In Oberon wird vor allem "introspection" unterstützt, d.h. Information über Daten wird angeboten (alle Typen eines Moduls, alle Prozeduren eines Moduls, alle Variablen eines Moduls, alle aktiven Prozeduren mit ihren Variablen (= Stack) usw.).
Weitere Facetten von Reflection betreffen:

  • die Fähigkeit Prozeduren/Methoden aufzurufen und
  • Aufrufe abzufangen

Das Ziel dieses Projekts ist, die genannten weiteren Facetten zu implementieren und in das Oberon Reflection Model zu integrieren. Weitere Änderungen am Modul Ref sollen überlegt, abgewogen und möglicherweise implementiert werden, Beispiele: Module-Rider zum Iterieren über alle Module, Method-Rider zum Iterieren über alle Methoden eines Types/einer Variable, Object-Rider zum Iterieren über alle Objekte am Heap usw. Beispiel: Ein Programm soll ein Objekt eines beliebigen Typs anlegen können (diese Funktionalität gibt es bereits). Diesem Objekt soll eine beliebige Meldung geschickt werden können. Manche der Methodenaufrufe sollen mitprotokolliert werden.

In.Open; In.Name(modname); In.Name(typename);
In.Name(method1); In.Name(method2); (* shall be intercepted *)
In.Name(method3); (* shall be called *)
type := Types.This(Modules.ThisMod(modname), typename);
Types.New(obj, type);
Ref.InterceptMethod(type, method1);
Ref.InterceptMethod(type, method2);
Ref.CallMethod(obj, method3)

Hinweise: Im Rahmen einer Diplomarbeit wurde ein Interpreter für Oberon geschrieben, der auch den Aufruf von Prozeduren und Methoden ermöglicht. Diese Funktionalität müsste man integrieren. Im Rahmen einer Dissertation über verteilte Objekte wurde das Weiterleiten von Methodenaufrufe an verteilte Objekte implementiert.

Hinweise: Das Projekt soll in einzelnen Stufen bearbeitet werden:

  • Die Problemanalyse soll mit einem kurzen Pflichtenheft (2-4 Seiten) abgeschlossen werden.
  • An die Analyse soll sich die Implementierung anschließen.
  • Als Abschluss des Bakkalaureatsprojekts ist ein schriftlicher Bericht von 30-40 Seiten abzugeben, der zumindest die folgenden Kapitel enthalten soll: Beschreibung der Aufgabe und ihres Umfeldes (d.h. wichtige Begriffe, bestehende Lösungen, etc.), Benutzerdokumentation, Implementierungsbeschreibung, Kritische Beurteilung und Ausblick.

Betreuung: Nach der intensiveren Anfangsphase (kurze Besprechungen im Wochenabstand), die zur Absteckung des Problemfeldes und zur Klärung von Problemen dient, sollen im Zweiwochen-Rhythmus kurze Besprechungen stattfinden, um einen zügigen Fortgang des Projekts zu gewährleisten.

Plattform: Oberon
Umfang: 5 oder 10-stündiges Projekt
Betreuer: DDI C. Steindl