Aspect Oriented Programming Einführung in AOP Informatikseminar Rico Schiekel - 012816 [email protected] Fachhochschule Ravensburg – Weingarten Hochschule für Technik und Sozialwesen Einführung in AOP Aspect Oriented Programming Agenda Kernproblem der Objekt Orientierung Beispiel Folgen Aspekt Orientierte Programmierung AspectJ AOP Beispiel anhand von AspectJ Fazit Einführung in AOP 2 1 Aspect Oriented Programming Kernproblem der Objekt Orientierung „cross cutting concerns“ Eigenschaften und Anforderungen die das ganze System durchziehen und nicht modularisiert werden können. Logging / Tracing Fehlerbehandlung / Fehlertoleranz Synchronisation / Threadsicherheit Transaktionen Sicherheit / Authentifizierung / Zugriffskontrolle Cachestrategien … Einführung in AOP 3 Aspect Oriented Programming Beispiel der Kernproblematik Modularisiertes Projekt Logging Netzwerk-Code Business über Logicden in indrei gesamten zweiModulen Modulen Code gekapselt gekapselt verteilt Einführung in AOP 4 2 Aspect Oriented Programming Folgen redundanter Code Schwer zu Lesen und Nachzuvollziehen Strukturen werden nicht abgebildet geringere Widerverwendbarkeit schwer zu verändern hohe Disposition des entsprechenden Codes Vollständigkeit und Konsistenz der Änderungen schwer prüfbar Einführung in AOP 5 Aspect Oriented Programming Agenda Kernproblem der Objekt Orientierung Aspekt Orientierte Programmierung Vorgehen Semantik AspectJ AOP Beispiel anhand von AspectJ Fazit Einführung in AOP 6 3 Aspect Oriented Programming Aspekt Orientierte Programmierung initiiert 1997 durch Xerox neues Programmierparadigma gehört zu den Post-Objektorientierten Programmierparadigmen nicht beschränkt auf Objektorientierte Sprachen erhöht die Modularität Einführung in AOP 7 Aspect Oriented Programming Vorgehen Aspekt – Code Modul – Code Aspect Weaver Woven Code z.B. AspectJ z.B. Java Code Compiler z.B. javac Application z.B. Java Bytecode z.B. Java Code Einführung in AOP 8 4 Aspect Oriented Programming Vorgehen (2) – Aspect Weaver Unterstützung verschiedener Aspect Weaver Hochsprachen AspectJ (Java) AspectC/C++ (C/C++) AspectS (Smalltalk) AspectR (Ruby) Aspect.pm (Perl) … unterschiedliche Arbeitsmethoden Sourcecode Maschinencode Dynamisch zur Laufzeit Einführung in AOP 9 Aspect Oriented Programming Semantik AOP definiert neue Bezeichnungen Join Point Pointcut Advice Introduction Aspect Einführung in AOP 10 5 Aspect Oriented Programming Semantik – Join Point definierter Punkt im Programmablauf wie z.B. Methodenaufrufe Konstruktoraufrufe Zugriff auf Membervariablen Exception Handler statische und dynamische Initialisierung … Einführung in AOP 11 Aspect Oriented Programming Semantik – Pointcut spezifiziert die Kriterien, unter welchen ein Aspekt im Programmablauf verankert wird stellt eine Art Abfrageprädikat über Join Points dar kann Werte im Ausführungskontext eines Join Points liefern Definition geschieht über Designators (Kennzeichner) z.B. AspectJ: call(void Point.setX(int)) Wildcards möglich Mit Logischen Operationen (AND, OR, NOT) kombinierbar Einführung in AOP 12 6 Aspect Oriented Programming Semantik – Advice Methodenähnliche Definition von Code, dessen zugewiesener Pointcut die ausführung bestimmt verschiedene Ausführungsvarianten Vor dem eigentlichem Code Nach dem eigentlichem Code Um den eigentlichen Code herum Anstatt dem eigentlichem Code Einführung in AOP 13 Aspect Oriented Programming Semantik – Introduction beeinflusst die Elemente einer Klasse sowie die Beziehungen zwischen Klassen ermöglicht das Hinzufügen von neuen Elementen in eine Klasse Vatenklassen / Interfaces Methoden Attribute Konstruktoren Compilerwarnungen und – fehler können an einen Pointcut gebunden werden Einführung in AOP 14 7 Aspect Oriented Programming Semantik – Aspect kapselt die verteilte Funktionalität enthält Pointcuts, Advices und Introductions Verhält sich ähnlich wie eine Klasse Kann abgeleitet werden Kann „abstract“ definiert werden Einführung in AOP 15 Aspect Oriented Programming Agenda Kernproblem der Objekt Orientierung Aspekt Orientierte Programmierung AspectJ Syntax AOP Beispiel anhand von AspectJ Fazit Einführung in AOP 16 8 Aspect Oriented Programming AspectJ Erweiterung von Java, entwickelt in Java Jeder valide Java-Code ist valider AspectJ-Code AspectJ Programme laufen auf Standard JVM´s Open Source IDE Integration eclipse, forte, jbuilder, emacs, … Vordefinierte Tasks für Ant Einführung in AOP 17 Aspect Oriented Programming Syntax - Pointcut [Modifiers] pointcut Id ( Param ) : Designators ; private pointcut p1() : call(void Point.set*(..)) ; pointcut p2(int i) : call(void Point.set*(int) && args(i) ; … abstract [Modifiers] pointcut Id ( Param ) ; public abstract pointcut ap1() ; abstract pointcut ap2(Point p) ; … Einführung in AOP 18 9 Aspect Oriented Programming Syntax - Pointcut Designators execution(void Point.setX(int)) call(void Point.setX(int)) handler(ArrayOutOfBoundsException) this(someType) target(someType) within(myClass) … es Triggert, werdenwenn nur Join eine ein Exception Points Methode der– ausgeführt Klasse Handler „myClass“ ausgeführt wird wird akzeptiert Einführung in AOP 19 Aspect Oriented Programming Syntax - Pointcut Wildcards call(* getX()) call(public * Point.*(..)) call(void Line.set*(int)) call(* *(..)) call(*.new(int, int)) handler(FileException) … alle Methoden Setter öffentlichen der in Klasse Methoden der gesamten Line mit der keinen Klasse Applikation Point Rückgabewert und einem Parameter vom Typ int Einführung in AOP 20 10 Aspect Oriented Programming Syntax - Pointcut Logische Operationen UND && ODER || NICHT ! Klammern () call(void Point.setX(int)) || call(void Point.setY(int)) call(* *(..)) && !call(* Line.*(..)) … Einführung in AOP 21 Aspect Oriented Programming Syntax - Advice AdviceType : Pointcut { Body } before ( Param ) after ( Param ) after ( Param ) returning [ ( Param) ] after ( Param ) throwing [ ( Param) ] Type around ( Param ) [ throws TypeList ] before () : p1() {…} after (int i) : call(int Point.addX(int)) && args(i) { if(i == 0) … } Einführung in AOP 22 11 Aspect Oriented Programming Syntax - Introduction declare parents: Point implements Runnable; public void Point.run() { ... } declare error: int Point.getZ(..): „Point erlaubt nur 2 Dimensionen!“; declare warning: String Point.getName(..): „getName() noch nicht implementiert!”; Einführung in AOP 23 Aspect Oriented Programming Syntax - Aspect [Modifiers ] aspect Id [extends Type] [implements TypeList] { Body } aspect A {…} aspect A extends B {…} aspect A implements B {…} … Einführung in AOP 24 12 Aspect Oriented Programming Syntax - Besondere Schlüsselwörter proceed ( Arguments ) führt beim around – Advice die ursprüngliche Methode aus thisJoinPoint Relative Informationen zum Join Point textuelle Darstellung Argumente Sourcecode Position … Einführung in AOP 25 Aspect Oriented Programming Agenda Kernproblem der Objekt Orientierung Aspekt Orientierte Programmierung AspectJ AOP Beispiel anhand von AspectJ Fazit Einführung in AOP 26 13 Aspect Oriented Programming Beispiel - Logging aspect SimpleSetterLogging{ pointcut logSetter(int i) : args(i) && (call(* Point.set*(..)) || call(* Line.set*(..))); before(int i) : logSetter(i){ System.out.println(thisJoinPoint + „ [“ + i + „]“); } } Einführung in AOP 27 Aspect Oriented Programming Beispiel – Logging Output D:\test> java SetterSample call(void Point.setX(int))[10] call(void Point.setY(int))[30] call(void Point.setX(int))[240] call(void Point.setY(int))[120] call(void Line.setAx(int))[25] call(void Line.setBy(int))[70] … Einführung in AOP 28 14 Aspect Oriented Programming Agenda Kernproblem der Objekt Orientierung Aspekt Orientierte Programmierung AspectJ AOP Beispiel anhand von AspectJ Fazit Einführung in AOP 29 Aspect Oriented Programming Fazit AOP ist noch in der Entwicklung Standards bilden sich Modularisierung von „cross cutting concerns“ Codereduzierung Aspekte sind leicht wiederverwendbar und wartbar es gibt noch wenig Erfahrungen mit AOP Einführung in AOP 30 15 Aspect Oriented Programming Fragen? Einführung in AOP 31 Aspect Oriented Programming Vielen Dank Einführung in AOP 32 16 Aspect Oriented Programming Quellen http://aosd.net – Aspect-Oriented software development zentrale Anlaufstelle mit zahlreichen Links http://aspectj.org – AspectJ Homepage von AspectJ Einführung in AOP 33 17