Einführung in AOP - Hochschule Ravensburg

Werbung
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
Herunterladen