Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++...

31
¨ Ubersicht Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen Georg Blaschke, Dipl.-Inf. Daniel Lohmann, Dr.-Ing. Olaf Spinczyk Friedich-Alexander-Universit¨ at Erlangen-N¨ urnberg Informatik 4 03.09.2004 Aspektorientierte Programmierung mit AspectC++ · Grundlagen Georg Blaschke, Dipl.-Inf. Daniel Lohmann, Dr.-Ing. Olaf Spinczyk · Friedich-Alexander-Universit¨ at Erlangen-N¨ urnberg , Informatik 4

Transcript of Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++...

Page 1: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Ubersicht Motivation AOP AspectC++ Zusammenfassung Demonstration

Aspektorientierte Programmierung mitAspectC++

Grundlagen

Georg Blaschke, Dipl.-Inf. Daniel Lohmann, Dr.-Ing. OlafSpinczyk

Friedich-Alexander-Universitat Erlangen-NurnbergInformatik 4

03.09.2004

Aspektorientierte Programmierung mit AspectC++ · GrundlagenGeorg Blaschke, Dipl.-Inf. Daniel Lohmann, Dr.-Ing. Olaf Spinczyk · Friedich-Alexander-Universitat Erlangen-Nurnberg , Informatik 4

Page 2: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Ubersicht Motivation AOP AspectC++ Zusammenfassung Demonstration

Motivation

Aspektorientierten Programmierung (AOP)

AspectC++

Zusammenfassung

Demonstration

Aspektorientierte Programmierung mit AspectC++ · GrundlagenGeorg Blaschke, Dipl.-Inf. Daniel Lohmann, Dr.-Ing. Olaf Spinczyk · Friedich-Alexander-Universitat Erlangen-Nurnberg , Informatik 4

Page 3: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Eine Queue Klasse

namespace util {

class Item {

friend class Queue;

Item* next;

public:

Item() : next(0){}

};

class Queue {

Item* first;

Item* last;

public:

Queue() : first(0), last(0) {}

void enqueue( Item* item ) {

if( last ){

last->next = item;

last = item;

} else

last = first = item;

}

Item* dequeue() {

Item* res = first;

if( first == last )

first = last = 0;

else

first = first->next ;

return res;

}

}; // class Queue

} // namespace util

Page 4: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Ubersicht Motivation AOP AspectC++ Zusammenfassung Demonstration

Anforderungen an Queue

TracingLocking

Queue

Counting

Aspektorientierte Programmierung mit AspectC++ · GrundlagenGeorg Blaschke, Dipl.-Inf. Daniel Lohmann, Dr.-Ing. Olaf Spinczyk · Friedich-Alexander-Universitat Erlangen-Nurnberg , Informatik 4

Page 5: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Queue Klasse (mit Tracing)

class Queue {

Item* first;

Item* last;

public:

Queue() : first(0), last(0) {

}

void enqueue( Item* item ) {

printf ( " > Queue::enqueue()\n" );

if( last ){

last->next = item;

last = item;

} else{

last = first = item;

}

printf( " < Queue::enqueue()\n" );

}

Item* dequeue() {

printf(" > Queue::dequeue()\n");

Item* res = first;

if( first == last )

first = last = 0;

else

first = first->next ;

printf(" < Queue::dequeue()\n");

return res;

}

}; \\ class Queue

Page 6: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Queue (mit Tracing+Counting)

class Queue {

Item* first;

Item* last;

unsigned int counter;

public:

Queue() : first(0), last(0) {

counter=0;

}

void enqueue( Item* item ) {

printf ( " > Queue::enqueue()\n" );

counter++;

if( last ){

last->next = item;

last = item;

} else{

last = first = item;

}

printf( " < Queue::enqueue()\n" );

}

Item* dequeue() {

printf(" > Queue::dequeue()\n");

Item* res = first;

if( first == last )

first = last = 0;

else

first = first->next ;

counter--;

printf(" < Queue::dequeue()\n");

return res;

}

unsigned int count(){return counter;}

}; \\ class Queue

Page 7: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Queue (mit Tracing+Counting+Locking)

class Queue {

Item* first;

Item* last;

unsigned int counter;

os::Mutex lock;

public:

Queue() : first(0), last(0) {

counter=0;

}

void enqueue( Item* item ) {

printf ( " > Queue::enqueue()\n" );

lock.enter();

counter++;

if( last ){

last->next = item;

last = item;

} else{

last = first = item;

}

lock.leave();

printf( " < Queue::enqueue()\n" );

}

Item* dequeue() {

printf(" > Queue::dequeue()\n");

lock.enter();

Item* res = first;

if( first == last )

first = last = 0;

else

first = first->next ;

counter--;

lock.leave();

printf(" < Queue::dequeue()\n");

return res;

}

unsigned int count(){return counter;}

}; \\ class Queue

Page 8: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Ubersicht Motivation AOP AspectC++ Zusammenfassung Demonstration

Tangled Code

Resultat:

verhedderter Quelltext (engl. tangled code):Strukturen im Quelltext, die mit der eigentlichen Funktioneiner Queue nichts zu tun haben.

Probleme:

schwerere Lesbarkeit

hohererer Wartungsaufwand

eingeschrankte Wiederverwendbarkeit

schlechtere Konfigurierbarkeit

Aspektorientierte Programmierung mit AspectC++ · GrundlagenGeorg Blaschke, Dipl.-Inf. Daniel Lohmann, Dr.-Ing. Olaf Spinczyk · Friedich-Alexander-Universitat Erlangen-Nurnberg , Informatik 4

Page 9: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Ubersicht Motivation AOP AspectC++ Zusammenfassung Demonstration

Prinzip der Trennung der Belange

”Dinge, die nichts miteinander

zu tun haben, sind auchgetrennt unterzubringen “

Trennung der Belange (engl. separation of concerns)

Kapselung jedes einzelnen Belanges in einem eigenen Softwaremodul(z.B. Funktionen, Klassen, Aspekte,...)

Problem:

Querschneidende Belange

Aspektorientierte Programmierung mit AspectC++ · GrundlagenGeorg Blaschke, Dipl.-Inf. Daniel Lohmann, Dr.-Ing. Olaf Spinczyk · Friedich-Alexander-Universitat Erlangen-Nurnberg , Informatik 4

Page 10: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Ubersicht Motivation AOP AspectC++ Zusammenfassung Demonstration

Querschneidende Belange

Querschneidender Belang (engl. crosscutting concern)

Belang, dessen Implementierung uber mehrere Stellen imProgrammcode verteilt ist

Aspektorientierte Programmierung mit AspectC++ · GrundlagenGeorg Blaschke, Dipl.-Inf. Daniel Lohmann, Dr.-Ing. Olaf Spinczyk · Friedich-Alexander-Universitat Erlangen-Nurnberg , Informatik 4

Page 11: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Ubersicht Motivation AOP AspectC++ Zusammenfassung Demonstration

Allgemeines AspectJ AspectC++

Aspektorientierten Programmierung (AOP)

Erweitert objektorientierte/prozedulare Programmierung umdas Konzept der Aspekte

Aspekt

Softwaremodul zur Kapselung eines querschneidender Belangs

Komponente

Softwaremodul zur Kapselung eines herkommlicher Belangs

Aspektorientierte Programmierung mit AspectC++ · GrundlagenGeorg Blaschke, Dipl.-Inf. Daniel Lohmann, Dr.-Ing. Olaf Spinczyk · Friedich-Alexander-Universitat Erlangen-Nurnberg , Informatik 4

Page 12: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Ubersicht Motivation AOP AspectC++ Zusammenfassung Demonstration

Allgemeines AspectJ AspectC++

Aspektweber

AspekteKomponenten

Aspektorientierte Programmierung mit AspectC++ · GrundlagenGeorg Blaschke, Dipl.-Inf. Daniel Lohmann, Dr.-Ing. Olaf Spinczyk · Friedich-Alexander-Universitat Erlangen-Nurnberg , Informatik 4

Page 13: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Ubersicht Motivation AOP AspectC++ Zusammenfassung Demonstration

Allgemeines AspectJ AspectC++

Aspektweber(2)

AspekteKomponenten

Aspektweber

Verknupfung (Weben) des Aspektcodes mit demKomponentencode

Weben moglich zur Ubersetzungszeit, Ladezeit oder Laufzeit

Aspektorientierte Programmierung mit AspectC++ · GrundlagenGeorg Blaschke, Dipl.-Inf. Daniel Lohmann, Dr.-Ing. Olaf Spinczyk · Friedich-Alexander-Universitat Erlangen-Nurnberg , Informatik 4

Page 14: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Ubersicht Motivation AOP AspectC++ Zusammenfassung Demonstration

Allgemeines AspectJ AspectC++

Verbindungspunkt

Join Points

KomponenteAspekt

Verbindungspunkt (engl. join point)

Stelle im Komponentencode, wo der Aspektweber Aspektcodehineingewebt; wird im Aspekt spezifiziert.

Aspektorientierte Programmierung mit AspectC++ · GrundlagenGeorg Blaschke, Dipl.-Inf. Daniel Lohmann, Dr.-Ing. Olaf Spinczyk · Friedich-Alexander-Universitat Erlangen-Nurnberg , Informatik 4

Page 15: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Ubersicht Motivation AOP AspectC++ Zusammenfassung Demonstration

Allgemeines AspectJ AspectC++

AspectJ

Bekanntes System fur AOP

Erweiterung der Programmiersprache Java

Eingangige Syntax

Benotigt keine spezielle Java-Laufzeitumgebung

Starke Forderung durch IBM

Werkzeugunterstutzung:Kommandozeile, Emacs, Eclipse und JBuilder

Aspektorientierte Programmierung mit AspectC++ · GrundlagenGeorg Blaschke, Dipl.-Inf. Daniel Lohmann, Dr.-Ing. Olaf Spinczyk · Friedich-Alexander-Universitat Erlangen-Nurnberg , Informatik 4

Page 16: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Ubersicht Motivation AOP AspectC++ Zusammenfassung Demonstration

Allgemeines AspectJ AspectC++

AspectC++

Syntax und Semantik angelehnt an AspectJ

Transformiert C/C++- und Aspekt-Quelltext nach C++

Overhead vergleichsweise gering

Werkzeugunterstutzung:Kommandozeile, VisualStudio.NET, Eclipse

Aktuelle Version 0.9pre1

Noch Mangelnde Unterstutzung einiger C++Sprachkonstrukte

Aspektorientierte Programmierung mit AspectC++ · GrundlagenGeorg Blaschke, Dipl.-Inf. Daniel Lohmann, Dr.-Ing. Olaf Spinczyk · Friedich-Alexander-Universitat Erlangen-Nurnberg , Informatik 4

Page 17: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Queue Klasse (mit Tracing)

class Queue {

Item* first;

Item* last;

public:

Queue() : first(0), last(0) {

}

void enqueue( Item* item ) {

printf ( " > Queue::enqueue()\n" );

if( last ){

last->next = item;

last = item;

} else{

last = first = item;

}

printf( " < Queue::enqueue()\n" );

}

Item* dequeue() {

printf(" > Queue::dequeue()\n");

Item* res = first;

if( first == last )

first = last = 0;

else

first = first->next ;

printf(" < Queue::dequeue()\n");

return res;

}

}; \\ class Queue

Page 18: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Ubersicht Motivation AOP AspectC++ Zusammenfassung Demonstration

Tracing Locking

Einfache Implementierung eines Tracing Aspekts

tracing.ah

aspect Tracing{

advice execution("% util::Queue::%(...)"): before(){

printf("--> %s\n",JoinPoint::signature());

}

advice execution("% util::Queue::%(...)"): after(){

printf("<-- %s\n",JoinPoint::signature());

}

};

Aspektorientierte Programmierung mit AspectC++ · GrundlagenGeorg Blaschke, Dipl.-Inf. Daniel Lohmann, Dr.-Ing. Olaf Spinczyk · Friedich-Alexander-Universitat Erlangen-Nurnberg , Informatik 4

Page 19: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Ubersicht Motivation AOP AspectC++ Zusammenfassung Demonstration

Tracing Locking

Aspect

tracing.ah

aspect Tracing{

advice execution("% util::Queue::%(...)"): before(){

printf("--> %s\n",JoinPoint::signature());

}

advice execution("% util::Queue::%(...)"): after(){

printf("<-- %s\n",JoinPoint::signature());

}

};

Aspektorientierte Programmierung mit AspectC++ · GrundlagenGeorg Blaschke, Dipl.-Inf. Daniel Lohmann, Dr.-Ing. Olaf Spinczyk · Friedich-Alexander-Universitat Erlangen-Nurnberg , Informatik 4

Page 20: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Ubersicht Motivation AOP AspectC++ Zusammenfassung Demonstration

Tracing Locking

Advice (before)

tracing.ah

aspect Tracing{

advice execution("% util::Queue::%(...)"): before(){

printf("--> %s\n",JoinPoint::signature());

}

advice execution("% util::Queue::%(...)"): after(){

printf("<-- %s\n",JoinPoint::signature());

}

};

Aspektorientierte Programmierung mit AspectC++ · GrundlagenGeorg Blaschke, Dipl.-Inf. Daniel Lohmann, Dr.-Ing. Olaf Spinczyk · Friedich-Alexander-Universitat Erlangen-Nurnberg , Informatik 4

Page 21: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Ubersicht Motivation AOP AspectC++ Zusammenfassung Demonstration

Tracing Locking

Advice (after)

tracing.ah

aspect Tracing{

advice execution("% util::Queue::%(...)"): before(){

printf("--> %s\n",JoinPoint::signature());

}

advice execution("% util::Queue::%(...)"): after(){

printf("<-- %s\n",JoinPoint::signature());

}

};

Aspektorientierte Programmierung mit AspectC++ · GrundlagenGeorg Blaschke, Dipl.-Inf. Daniel Lohmann, Dr.-Ing. Olaf Spinczyk · Friedich-Alexander-Universitat Erlangen-Nurnberg , Informatik 4

Page 22: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Ubersicht Motivation AOP AspectC++ Zusammenfassung Demonstration

Tracing Locking

Join-Point API

tracing.ah

aspect Tracing{

advice execution("% util::Queue::%(...)"): before(){

printf("--> %s\n",JoinPoint::signature());

}

advice execution("% util::Queue::%(...)"): after(){

printf("<-- %s\n",JoinPoint::signature());

}

};

Aspektorientierte Programmierung mit AspectC++ · GrundlagenGeorg Blaschke, Dipl.-Inf. Daniel Lohmann, Dr.-Ing. Olaf Spinczyk · Friedich-Alexander-Universitat Erlangen-Nurnberg , Informatik 4

Page 23: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Queue (mit Locking)

class Queue {

Item* first;

Item* last;

os::Mutex lock;

public:

Queue() : first(0), last(0) {

}

void enqueue( Item* item ) {

lock.enter();

if( last ){

last->next = item;

last = item;

} else{

last = first = item;

}

lock.leave();

}

Item* dequeue() {

lock.enter();

Item* res = first;

if( first == last )

first = last = 0;

else

first = first->next ;

lock.leave();

return res;

}

}; \\ class Queue

Page 24: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Ubersicht Motivation AOP AspectC++ Zusammenfassung Demonstration

Tracing Locking

Implementierung eines Locking Aspekts

locking.ah

aspect Locking{

advice "util::Queue": os::Mutex lock;

advice execution("% util::Queue::%queue(...)"): around(){

JoinPoint::That* currentObject=tjp->that();

(currentObject->lock).enter();

tjp->proceed();

(currentObject->lock).leave();

}

};

Aspektorientierte Programmierung mit AspectC++ · GrundlagenGeorg Blaschke, Dipl.-Inf. Daniel Lohmann, Dr.-Ing. Olaf Spinczyk · Friedich-Alexander-Universitat Erlangen-Nurnberg , Informatik 4

Page 25: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Ubersicht Motivation AOP AspectC++ Zusammenfassung Demonstration

Tracing Locking

Introduction

locking.ah

aspect Locking{

advice "util::Queue": os::Mutex lock;

advice execution("% util::Queue::%queue(...)"): around(){

JoinPoint::That* currentObject=tjp->that();

(currentObject->lock).enter();

tjp->proceed();

(currentObject->lock).leave();

}

};

Aspektorientierte Programmierung mit AspectC++ · GrundlagenGeorg Blaschke, Dipl.-Inf. Daniel Lohmann, Dr.-Ing. Olaf Spinczyk · Friedich-Alexander-Universitat Erlangen-Nurnberg , Informatik 4

Page 26: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Ubersicht Motivation AOP AspectC++ Zusammenfassung Demonstration

Tracing Locking

Advice (around)

locking.ah

aspect Locking{

advice "util::Queue": os::Mutex lock;

advice execution("% util::Queue::%queue(...)"): around(){

JoinPoint::That* currentObject=tjp->that();

(currentObject->lock).enter();

tjp->proceed();

(currentObject->lock).leave();

}

};

Aspektorientierte Programmierung mit AspectC++ · GrundlagenGeorg Blaschke, Dipl.-Inf. Daniel Lohmann, Dr.-Ing. Olaf Spinczyk · Friedich-Alexander-Universitat Erlangen-Nurnberg , Informatik 4

Page 27: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Ubersicht Motivation AOP AspectC++ Zusammenfassung Demonstration

Tracing Locking

Join-Point API

locking.ah

aspect Locking{

advice "util::Queue": os::Mutex lock;

advice execution("% util::Queue::%queue(...)"): around(){

JoinPoint::That* currentObject=tjp->that();

(currentObject->lock).enter();

tjp->proceed();

(currentObject->lock).leave();

}

};

Aspektorientierte Programmierung mit AspectC++ · GrundlagenGeorg Blaschke, Dipl.-Inf. Daniel Lohmann, Dr.-Ing. Olaf Spinczyk · Friedich-Alexander-Universitat Erlangen-Nurnberg , Informatik 4

Page 28: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Ubersicht Motivation AOP AspectC++ Zusammenfassung Demonstration

Tracing Locking

Join-Point API

locking.ah

aspect Locking{

advice "util::Queue": os::Mutex lock;

advice execution("% util::Queue::%queue(...)"): around(){

JoinPoint::That* currentObject=tjp->that();

(currentObject->lock).enter();

tjp->proceed();

(currentObject->lock).leave();

}

};

Aspektorientierte Programmierung mit AspectC++ · GrundlagenGeorg Blaschke, Dipl.-Inf. Daniel Lohmann, Dr.-Ing. Olaf Spinczyk · Friedich-Alexander-Universitat Erlangen-Nurnberg , Informatik 4

Page 29: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Ubersicht Motivation AOP AspectC++ Zusammenfassung Demonstration

Zusammenfassung

Kapselung von querschneidenden Belangen mit herkommlicherProgrammierung nicht machbar

AOP ermoglicht Implementierung von querschneidendenBelangen in eigenstandigen Softwaremodulen, den Aspekten

AspectC++ ermoglicht aspektorientierte Programmierung inC++

Aspektorientierte Programmierung mit AspectC++ · GrundlagenGeorg Blaschke, Dipl.-Inf. Daniel Lohmann, Dr.-Ing. Olaf Spinczyk · Friedich-Alexander-Universitat Erlangen-Nurnberg , Informatik 4

Page 30: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Ubersicht Motivation AOP AspectC++ Zusammenfassung Demonstration

Weiterfuhrende Informationen

Aspect-Oriented Software Development:www.aosd.net

AspectC++ :www.aspectc.org

Kommerzieller Support und VisualStudio.NET Plugin :www.pure-systems.com

Aspektorientierte Programmierung mit AspectC++ · GrundlagenGeorg Blaschke, Dipl.-Inf. Daniel Lohmann, Dr.-Ing. Olaf Spinczyk · Friedich-Alexander-Universitat Erlangen-Nurnberg , Informatik 4

Page 31: Aspektorientierte Programmierung mit AspectC++ - Grundlagen · Ubersicht¨ Motivation AOP AspectC++ Zusammenfassung Demonstration Aspektorientierte Programmierung mit AspectC++ Grundlagen

Ubersicht Motivation AOP AspectC++ Zusammenfassung Demonstration

Demonstration der AspectC++ Erweiterung furEclipse

Aspektorientierte Programmierung mit AspectC++ · GrundlagenGeorg Blaschke, Dipl.-Inf. Daniel Lohmann, Dr.-Ing. Olaf Spinczyk · Friedich-Alexander-Universitat Erlangen-Nurnberg , Informatik 4