Post on 01-Feb-2018
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 1
AspectJAlexander Ditter
Hauptseminar AOSD
Aspektorientierte Programmierung
am Beispiel AspectJ
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 2
AspectJAlexander Ditter
Aspektorientierte ProgrammierungUmfeldAspectJ - eine DefinitionElemente in AspectJ
Introduction Pointcut Join Point Advice Aspect
Errors and WarningsAspect WeaverZusammenfassungPraxis
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 3
AspectJAlexander Ditter
Xerox - PARCPalo Alto Research Center (Palo Alto, Californien)
Gegründet 1970 (von Xerox)
Wichtige Erfindungen: Computer Maus
Ethernet (IPv6)
Objekt orientierte Programmierung (Smalltalk)
Aspekt orientierte Programmierung
Gregor Kiczales
Aspektorientierte Programmierung
AspectJ
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 4
AspectJAlexander Ditter
Gregor Kiczales
ProfessorSoftware Practices Lab
Department of Computer ScienceUniversity of British Columbia
201-2366 Main MallVancouver, B.C., Canada V6T 1Z4
+1.604.822.4806 [voice]+1.604.822.5485 [FAX]
gregor@cs.ubc.ca
Office: ICICS/CS 311
Current Projects:
ActiveAspect A crosscutting structure presentation tool.
CBDDebugging with control-flow breakpoints.
PointcutDoctorAn natural AJDT extension that helps developers write pointcuts.
Aspect-Oriented Design Pattern Implementation Exploring effects of implementation language on software design patterns.
Aspect-Oriented Logic Meta Programming Using logic meta programs to represent aspects and aspect languages.
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 5
AspectJAlexander Ditter
AspectJ - „Definition“
AspectJ™ is a simple and practical aspect-oriented extension toJava™. With just a few new constructs, AspectJ provides support for modularimplementation of a range of crosscutting concerns. In AspectJ’s dynamic joinpoint model, join points are well-defined points in the execution of theprogram; pointcuts are collections of join points; advice are special method-likeconstructs that can be attached to pointcuts; and aspects are modular units ofcrosscutting implementation, comprising pointcuts, advice, and ordinary Javamember declarations. AspectJ code is compiled into standard Java bytecode.Simple extensions to existing Java development environments make it possibleto browse the crosscutting structure of aspects in the same kind of way as onebrowses the inheritance structure of classes. Several examples show thatAspectJ is powerful, and that programs written using it are easy to understand.
[Kiczales2001]
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 6
AspectJAlexander Ditter
Statisches und dynamisches Crosscutting 1Statisches Crosscutting
Erweitert die statischen Strukturen des Programms
Neue Membervariablen/Funktionsdeklarationen einfügen
Unterstützt meistens das dynamische Crosscutting
Dynamisches Crosscutting Ausführbare Funktionen
Neuer Code
„Advice“ = dynamisches Crosscutting
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 7
AspectJAlexander Ditter
Statisches und dynamisches Crosscutting 2
Statisches Crosscutting
Dynamisches Crosscutting
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 8
AspectJAlexander Ditter
Elemente in AspectJ
IntroductionStatisches Crosscutting (Struktur)
Join PointEindeutiger Punkt im Programmfluss
PointcutKomposition von Join Points
AdviceDynamisches Crosscutting (Code)
AspectGesamtheit aus Introduction, Pointcut und Advice
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 9
AspectJAlexander Ditter
IntroductionEntspricht statischem Crosscutting
Erweitert bestehende Strukturen um Member
Funktionsdeklarationen
Interfaces
Declarations error/warning parents precedence
...
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 10
AspectJAlexander Ditter
Join PointEindeutig im Programmfluss identifizierbarer „Punkt“
Zentraler „Aspekt“ bei AOP
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 11
AspectJAlexander Ditter
Wildcards and OperatorsWildcards
* Beliebige Anzahl von Zeichen (außer „.“)
.. Beliebige Anzahl von Zeichen (inkl. „.“)
+ Beliebige Unterklasse/Interface
Operators ! Negation
&& Und-Verknüpfung
|| Oder-Verknüpfung
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 12
AspectJAlexander Ditter
Join Point TypenExposed Join Points
Method Execution Call
Constructor Execution Call
Field Access Read Write
Exception Handler Class Initialization Object Initialization und Pre-Initialization Advice Execution
„Hidden“ Join Points For, while loops !(exposed join points)
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 13
AspectJAlexander Ditter
PointcutEnthält 1..n Join Points (Pointcut-definition)
Anonym oder Benannt
Genereller Aufbau [zugriffsrechte] pointcut pointcut-name([args]) : pointcut-definition
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 14
AspectJAlexander Ditter
Kinded vs. Unkinded PointcutsKinded
Execution Call Get Set Exception Handler Advice
Unkinded Control-Flow Lexical-Structure Execution Objects Arguments Conditional
[Laddad2003]
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 15
AspectJAlexander Ditter
Control-Flow (cflow) PointcutsVergleichbar mit Call-Stack
foo() -> bar()
Der Aufruf von bar() befindet sich im cflow von foo()
Beziehen sich immer auf einen anderen Pointcut cflow( call( foo() ) )
cflowbelow( call( foo() ) )
Typen cflow
Inkl. foo()
cflowbelow
Exkl. foo()
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 16
AspectJAlexander Ditter
Lexical-Structure PointcutsVergleichbar mit :: (scope)
Typen within
Gilt in allen Klassen, Aspekten, etc. und darin enthaltenen Unter-Strukturen
within(foo) (würde auch bar enthalten)
withincode
Bezieht sich auf eine spezielle Methode/Konstuktor
withincode(foo) (bezieht sich nur auf foo)
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 17
AspectJAlexander Ditter
Execution Object PointcutsWerden verwendet um Kontext zu erhalten
Des aufrufenden Objekts
Des aufgerufenen Objekts
Typen This
this(Hund) (alle Objekte vom Typ Hund)
Target
target(Katze) (alle Objekte vom Typ Katze)
Wichtig: Keine Wildcards möglich! Typprüfung erfolgt durch JAVA
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 18
AspectJAlexander Ditter
Argument PointcutsEbenfalls geeignet um Kontext zu erlangenArgumente einer Funktion werden betrachtetCall
Argumente der Funktion die aufgerufen wird
Get/Set Index des Feldes
Exception Ausnametyp des Objekts
Bsp: args(int) args(int, String, double) args(AspectException)
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 19
AspectJAlexander Ditter
Conditional Pointcuts
Abfrage einer Bedinung
Normalerweise „Context Binding“ erforderlich
Vergleichsoperatoren wie bekannt ==, != >, < >=, <=
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 20
AspectJAlexander Ditter
AdviceBestimmt das Verhalten
Methodenähnlicher Aufbau
Typen before()
Vor dem Pointcut after()
Nach dem Pointcut around()
before() !! Proceed !! After()
Spezialfällereturning()
after() returning() :throwing
after() throwing() :
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 21
AspectJAlexander Ditter
AspectVergleichbar mit einer Klasse
Kombiniert Join Points, Pointcuts und Advice
Enthält dynamisches und statisches Crosscutting
Zugriffsrechte wie alle anderen im SystemABER: Es geht auch anders...
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 22
AspectJAlexander Ditter
Privileged AspectsEinfach Schlüsselwort „privileged“ voranstellen
public privileged aspect myPrivilegedAspect{} Schon kann man ÜBERALL zugreifen
Achtung: Hier sollte man sich NOCH genauer überlegen, was
man tun möchte.
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 23
AspectJAlexander Ditter
Join Point InformationVergleichbar mit „this“-Referenz
Spezielle Objekte thisJoinPoint
Dynamische Informationen (Objekt-ID, Referenz auf Objekt, ...)
thisJoinPointStaticPart
Statische Information (Name der Klasse/Methode, Adresse, ...)
thisEnclosingJoinPointStaticPart
Information über den Kontext (z.B. von der Call-Funktion)
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 24
AspectJAlexander Ditter
Hierarchy und Member
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 25
AspectJAlexander Ditter
Aspect Association„Normalerweise“ nur eine Aspektinstanz vorhanden (Singleton)
Mehrere Instanzen von Aspekten sind möglich
Mögliche Assoziationen Virtual Machine (default Singleton) Objekt bezogen Contol-Flow bezogen
Konstruktor kommt für Aspekt hinzu
Objekt bezogen perthis() pertarget()
Control-Flow bezogen percflow() percflowbelow()
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 26
AspectJAlexander Ditter
Errors and WarnigsKönnen zur Compile-Zeit ausgegeben werden
declare warning : <pointcut> : <message>; declare error : <pointcut> : <message>;
Verhalten wie bei C/C++ Waring -> Übersetzung geht weiter Error -> Übersetzung wird abgebrochen
Nur statisch typisierte Werte können geprüft werden !!!
Also NICHT: this und target args if cflow und cflowbelow
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 27
AspectJAlexander Ditter
Aspect Weaver Input: Class Files
Output: Class Files
3 mögliche Zeitpunkte des Zusammenführens Compile Time
Post Compile Time
Load Time
Laufzeitverhalten bei allen drei Varianten identisch!!!
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 28
AspectJAlexander Ditter
ZusammenfassungAspect = Join Point -> Pointcut + Advice
Crosscutting statisch dynamisch
Ergebnis ist bei allen Varianten gleich Errors und Warning nur, wenn vor Laufzeit gebunden wurde
Aspekt-Instanzen sind möglich Standard ist aber Singleton
Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium
Wintersemester 2007/08Seite 29
AspectJAlexander Ditter
Quellen [1] http://en.wikipedia.org/wiki/Xerox_PARC [2] http://www.cs.ubc.ca/~gregor/ [3] http://www.eclipse.org/aspectj/doc/released/aspectj5rt-api/allclasses-noframe.html [4] Ramnivas Laddad „AspectJ in action“ [5] http://www.eclipse.org/aspectj/doc/released/quick5.pdf