|
|
 |
 |
Betriebssystemtechnik (OSE) - SS 2007
Aufgabe 3: Erste Schritte mit AspectC++
In dieser Aufgabe soll die in Aufgabe 1 erstellte Implementierung der OSE-IOLib durch Aspekte verbessert werden. Die Bibliothek soll so umstrukturiert werden, dass sie das Prinzip der Trennung der Belange so gut wie möglich umsetzt. Idealziel ist eine Implementierung in der jeder Belang (hier: gefordertes Feature der IOLib) in einem eigenständigen Modul (hier: Klasse oder Aspekt) implementiert ist.
| Ausgabetermin |
Vorgabe |
(spätester) Abgabetermin |
| 10.05.2007 |
-- |
23.05.2007 15:00 |
Lernziele
- Erste Erfahrungen mit AspectC++ und den anderen zugrunde liegenden Tools
- Erste Erfahrungen in der Konfiguration von Produktlinien mit Aspekten
Aufgabenstellung
Aufgabe ist es, ein vergleichbares Maß an Konfigurierbarkeit wie in Aufgabe 1 zu erreichen, jedoch diesmal ohne den Komponentencode mit #ifdefs zu "verschmutzen":
-
#ifdef ist nur noch erlaubt, um ganze Übersetzungseinheiten einzuschließen oder auszuschließen, also z.B. für Include-Wächter oder um einen Aspekt komplett zu deaktivieren (siehe auch unten).
- Weiterhin sollt ihr natürlich die Größe im Auge behalten! Die Verwendung von Aspekten ist nicht in jedem Fall vollständig overhead-frei (hängt von den verwendeten Features ab), so dass ich diesmal keine "harten" Grenzen für die zulässigen Größen vorgebe. Es wird jedoch wieder eine Bestenliste geben. Ich hoffe mal, das ist Ansporn genug "klein zu bleiben" :-)
- Die Aufgabe soll mit Eclipse bearbeitet werden.
Bearbeitung und Abgabe
Die Bearbeitung der Aufgabe soll in den im Rahmen von Aufgabe 2
gebildeten Gruppen Gruppe erfolgen. Die Abgabe der Aufgabe erfolgt
wiederum bei Julio im
Büro durch ein Mitglied der Gruppe. Wir werden uns dann
per SunRay im CIP Pool anmelden, wo eurer
funktionstüchtiges Implement abgabereif liegen sollte.
AspectC++ und Eclipse Setup
Um AspectC++ und Eclipse zu verwenden, muss euer Projekt aus Aufgabe 1 als sogenanntes "Standard Make Project" (Projekt mit externem, nicht von Eclipse verwaltetem Makefile) in einen Eclipse-Workspace importiert werden. Des weiteren muss das Makefile so angepasst werden, dass der Aspektweber aufgerufen wird. Wie das geht wird im Folgenden kurz beschrieben:
- Lest und beachtet zunächst bitte die Hinweise auf der Tools Seite. Dort steht, wo die OSE Tools liegen und wie Eclipse gestartet wird.
- Import in Eclipse: In Eclipse
File->New Project wählen und dann C++ -> Standard Make C++ Project. Gebt dem Projekt einen Namen, z.B. IOLib, weitere Einstellungen sind nicht notwendig. Dann auf dem neuen Projekt [Kontextmenü]->Import und dann File System wählen. Im erscheinenden Dialog das Verzeichnis Eurer Aufgabe1-Lösung anwählen und markieren welche Dateien importiert werden sollen. (Den kompletten Ordner src, sowie Makefile, sections, config.h test?.cc.)
- Make-Targets definieren: Auf dem Projekt
[Kontextmenü]->Build Make Targets wählen, um die Make-Aufrufe zu definieren (Add) bzw. Make mit einen Target aufzurufen. Am besten definiert ihr euch Ziele für test1, test2, sizes usw.
- Makefile anpassen: Das Makefile öffnen und den zu verwendeten C++-Compiler anpassen: Die Zeile
CXX := g++
muss geändert werden in
CXX := ag++ --repository ac.repo
(Ab jetzt wird für jede Übersetzungseinheit vor dem g++-Lauf der Weber aufgerufen. Alle im Projektbaum vorhandenen Aspekte werden
dabei automatisch gefunden und ausgewertet.)
- AspectC++ Unterstützung für das Projekt aktivieren: Dazu auf dem Projekt die folgende Option wählen:
[Kontextmenü]->Enable/Disable AspectC++ Support.
- AspectC++ Repository im ACDT einstellen: Damit die Joinpoint-Visualisierung funktioniert, muss dem AspectC++ Eclipse-Plugin (ACDT)
außerdem noch mitgeteilt werden, wo das vom Weber generierte Repository liegt. Dazu auf dem Projekt (Projektknoten des im Workspace-Navigator
dargestellten Baums) aufrufen:
[Kontextmenü]->Properties->C++ Make Project und hier auf die Lasche AspectC++ Make gehen.
Als Repository file muss hier der absolute Pfad auf die Datei ac.repo (wird beim ersten Kompilieren
erstellt) im Projektverzeichnis angegeben werden. (Falls das
Projekt noch nie gebaut wurde, existiert die Datei noch nicht.)
- Testen mit einem einfachen Aspekt: Den folgenden Aspekt könnt ihr mal testweise als
Test.ah speichern und (mit test1)
ausprobieren ob der Weber und die Joinpoint-Visualisierung funktionieren:
#ifndef __TEST_AH__
#define __TEST_AH__
#include "OutputStream.h"
extern OutputStream out;
aspect Test {
advice execution( "% main(...)" ) : before() {
out << "Hello from Aspect :-)\n";
}
};
#endif // __TEST_AH__
Noch ein paar Hinweise zu AspectC++
Weitere Informationen zu AspektC++ findet ihr auf der AspectC++ homepage sowie unter /proj/i4ose/docs. Dort gibt es unter anderem:
|
 |
 |
|