hauptseminar aosd aspektorientierte programmierung am ... · pdf fileaspektorientierte...

29
Aspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 1 AspectJ Alexander Ditter Hauptseminar AOSD Aspektorientierte Programmierung am Beispiel AspectJ

Upload: vuongkhanh

Post on 01-Feb-2018

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium

Wintersemester 2007/08Seite 1

AspectJAlexander Ditter

Hauptseminar AOSD

Aspektorientierte Programmierung

am Beispiel AspectJ

Page 2: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

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

Page 3: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

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

Page 4: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

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]

[email protected]

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.

Page 5: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

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]

Page 6: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

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

Page 7: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium

Wintersemester 2007/08Seite 7

AspectJAlexander Ditter

Statisches und dynamisches Crosscutting 2

Statisches Crosscutting

Dynamisches Crosscutting

Page 8: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

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

Page 9: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

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

...

Page 10: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium

Wintersemester 2007/08Seite 10

AspectJAlexander Ditter

Join PointEindeutig im Programmfluss identifizierbarer „Punkt“

Zentraler „Aspekt“ bei AOP

Page 11: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

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

Page 12: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

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)

Page 13: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

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

Page 14: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

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]

Page 15: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

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()

Page 16: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

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)

Page 17: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

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

Page 18: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

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)

Page 19: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium

Wintersemester 2007/08Seite 19

AspectJAlexander Ditter

Conditional Pointcuts

Abfrage einer Bedinung

Normalerweise „Context Binding“ erforderlich

Vergleichsoperatoren wie bekannt ==, != >, < >=, <=

Page 20: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

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() :

Page 21: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

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...

Page 22: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

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.

Page 23: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

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)

Page 24: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

Aspektorientierte Softwareentwicklung (AOSD)Seminar im Hauptstudium

Wintersemester 2007/08Seite 24

AspectJAlexander Ditter

Hierarchy und Member

Page 25: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

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()

Page 26: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

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

Page 27: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

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!!!

Page 28: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

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

Page 29: Hauptseminar AOSD Aspektorientierte Programmierung am ... · PDF fileAspektorientierte Softwareentwicklung (AOSD) Seminar im Hauptstudium Wintersemester 2007/08 Seite 2 AspectJ Alexander

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