Aspect Oriented Programming in C++ - TU Braunschweig+small.pdf · 16/01/12 2 Referenz Teile dieser...
-
Upload
dangkhuong -
Category
Documents
-
view
216 -
download
0
Transcript of Aspect Oriented Programming in C++ - TU Braunschweig+small.pdf · 16/01/12 2 Referenz Teile dieser...
16/01/12 1
Dipl.-Inform. Dominik JürgensInstitut für Wissenschaftliches RechnenTechnische Universität Braunschweig
Aspect Oriented Programming in C++
Überblick und Einsichten
16/01/12 2
Referenz
Teile dieser Präsentation sind stark angelehnt an :
�Aspect-Oriented Programming with C++ and AspectC++� from AOSD.07 Konferenz
� Olaf Spinczyk, Friedrich-Alexander-University
� Daniel Lohmann, Friedrich-Alexander-University
16/01/12 3
Der rote Faden
� Warum AOP?� Wie AOP mit C++-Templates?� Die Konzepte hinter AOP� Grenzen der AOP mit Templates� AspectC++
16/01/12 4
Der rote Faden
� Warum AOP?Warum AOP?� Wie AOP mit C++-Templates?� Die Konzepte hinter AOP� Grenzen der AOP mit Templates� AspectC++
16/01/12 5
Architektureller Softwareentwurf
� Im Softwareentwurf werden komplexe Systeme in unabhängige Teilsysteme zerlegt und über Schnittstellen miteinander verbunden
Model View
Controller
Data
16/01/12 6
logging,... logging,...
Error handling,...
middleware,...
Nicht-funktionale Angelegenheiten
� Nicht-funktionale Angelegenheiten:� tracing, synchronization, security, buffering,
error handling, constraint checks, middle-ware
Model View
Controller
Data
16/01/12 7
logging,... logging,...
Error handling,...
middleware,...
Nicht-funktionale Angelegenheiten
� Nicht-funktionale Angelegenheiten:� tracing, synchronization, security, buffering,
error handling, constraint checks, middle-ware
Model View
Controller
Data
Funktionseinheit?
16/01/12 8
Zusammenfassung
� Nicht-funktionale Angelegenheiten können:� Sich auf mehrere Funktionseinheiten
zerstreuen� Unabhängig von Funktionseinheiten
existieren
Zerlegung in Komponenten und Aspekte
Das zeigt sich auch in realen Projekten
Code for Logging in the Apache Tomcat
Funktionseinheiten
Beispiel: Code der Queue Komponente
Zusätzliche Anforderungen:
�Element Counter�Error Handling with exceptions
�Thread-Safety
16/01/12 14
Der rote Faden
� Warum AOP?� Wie AOP mit C++-Templates?Wie AOP mit C++-Templates?� Die Konzepte hinter AOP� Grenzen der AOP mit Templates� AspectC++
16/01/12 18
Der rote Faden
� Warum AOP?� Wie AOP mit C++-Templates?� Die Konzepte hinter AOPDie Konzepte hinter AOP� Grenzen der AOP mit Templates� AspectC++
16/01/12 19
JoinPoint Model
Eine Konzeptbeschreibung braucht ein JoinPoint Model (JPM) und damit Mechanismen zur:
� Spezifikation zusätzlicher Funktionalität (Advice � Anweisung)
� Spezifikation von Mengen von Code- Stellen (Pointcuts � Schnittpunktmenge)
� Interaktion mit konkreten Code-Stellen (Joinpoints � Verbindungstellen)
16/01/12 20
Der rote Faden
� Warum AOP?� Wie AOP mit C++-Templates?� Die Konzepte hinter AOPDie Konzepte hinter AOP� Grenzen der AOP mit Templates� AspectC++
16/01/12 21
Locking-Konzept
Die KodeänderungKodeänderung (Advice) legt sich um die gegebene Implementierung herum.
Es handelt sich um einen so genannten arround advicearround advice.
16/01/12 22
Locking-Konzept
Um den Advice Advice an anderen Joinpoints wiederzuverwenden.müsste Code dubliziert werden.
16/01/12 23
Alternative zur Behandlung von mehreren Joinpoints
� Einschränkung: Joinpoints müssen immer die gleiche Schnittstelle haben
...
Kontext wird übergeben
Kontext wird übergeben
KeineDublikation
16/01/12 24
Weving: Jetzt wird�s langsam zu bunt
� Der benutzende Code muss jetzt einen anderen Typ benutzen
� Lösung: Namespacing...
Selektion
16/01/12 25
Der rote Faden
� Warum AOP?� Wie AOP mit C++-Templates?� Die Konzepte hinter AOP� Grenzen der AOP mit TemplatesGrenzen der AOP mit Templates� AspectC++
16/01/12 26
Grenzen
� Typen von Joinpoints:� Keine Unterscheidung zwischen
Funktionsaufruf und seiner Ausführung� Keine generische Schnittstelle zum
Kontext� Kein zugriff auf private Methoden
� Im Vergleich zu echten AOP Lösungen:� Kein flexibler Weg um Änderungsziele
anzugeben (AC++ Pointcuts)� Interfaces müssen fix bleiben, oder
enden in exzessiver Meta-Programmierung
16/01/12 27
Grenzen II:
� Skalierbarkeit:� Der Wrapper kann schnell viel
aufwendiger werden als der Aspekt selbst� Die Reihenfolge der Template-
Instantiierung spielt eine wichtige Rolle� Exzessive Meta-Programmierung um
Aspekte zu realisierten macht den Code (wenigstens für dritte) schwer zu verstehen
16/01/12 28
Grenzen II:
� Skalierbarkeit:� Der Wrapper kann schnell viel
aufwendiger werden als der Aspekt selbst� Die Reihenfolge der Template-
Instantiierung spielt eine wichtige Rolle� Exzessive Meta-Programmierung um
Aspekte zu realisierten macht den Code (wenigstens für dritte) schwer zu verstehen
16/01/12 29
Der rote Faden
� Warum AOP?� Wie AOP mit C++-Templates?� Die Konzepte hinter AOP� Grenzen der AOP mit Templates� AspectC++AspectC++
16/01/12 30
Ein kleines Beispiel: main.cc
#include <iostream>#include <math.h>
double _sin(double v){ return sin(v);}
int main(){
for(int i=0;i<3;i++){ std::cout << sin((double)i*0.1) << std::endl; std::cout << _sin((double)i*0.1) << std::endl;}
}
16/01/12 31
Ein kleines Beispiel: Aspect.ah
#include <iostream>#include <math.h>
double _sin(double v){ return sin(v);}
int main(){
for(int i=0;i<3;i++){ std::cout << sin((double)i*0.1) << std::endl; std::cout << _sin((double)i*0.1) << std::endl;}
}
#include <iostream>using namespace std;aspect Trace { pointcut functions() = "% ...::%(...)" ; advice execution(functions()) : around() { std::cout << "before-> " << JoinPoint::signature()<< "("; for(unsigned i=0; i < JoinPoint::ARGS; i++) std::cout << (i ? ", " : "") << JoinPoint::argtype(i); std::cout << ")" << std::endl; tjp->proceed(); std::cout << "<-after" << std::endl; }};
16/01/12 32
Ein kleines Beispiel: Ausführung und Ausgabe
$ ag++ main.cc -o main $ ./mainbefore-> int main()()0before-> double _sin(double)(d)<-after00.0998334before-> double _sin(double)(d)<-after0.09983340.198669before-> double _sin(double)(d)<-after0.198669<-after
Weaving
16/01/12 37
Element Counting Aspect
Ein after advice ist crosscutting code,der nach einer bestimmten Position
im Kontrollfluß ausgeführt werden soll
16/01/12 38
Element Counting Aspect
Pointcut-Ausdruck ist eine Art typ-sensitiver regulärer Ausdruck.
Treffer werden in die Pointcut-Mengedes Advice aufgenommen
16/01/12 40
Element Counting Aspect
Problem: Der Counter gehört zum Aspekt, nicht zur Klasse.Er ist statisch für alle Objekte.
16/01/12 47
Ordnung von Aspekt
� Grundsätzlich sollten Aspekte in beliebiger Reihenfolge instantiierbar sein, das ist allerdings nicht immer möglich:
16/01/12 48
Aspekte individualisieren
� Grundsätzlich sind Aspekte Singletons� Sollen mehrere Instanzen z.B. pro
Thread, pro Client vorhanden sein:
16/01/12 53
Zusammenfassung
� Vorhandener C++ Code lässt sich mit AC++ erweitern
� Eingriff in vorhandenen Code ist nicht erforderlich
� Aspekte helfen dabei vormals verflochtenen Code zu entflechten
� Einsatz von abstrakten Mustern ist sehr einfach
Aspect-Oriented Programming, Gregor Kiczales etal.