jugm 07 - aspectj

26
Stand: 26.11.2007 Bessere Software durch aspektorientierte Programmierung mit Java und AspectJ

Upload: heiko-seeberger

Post on 30-Jun-2015

525 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: JUGM 07 - AspectJ

Stand: 26.11.2007

Bessere Software durch

aspektorientierte Programmierung

mit Java und AspectJ

Page 2: JUGM 07 - AspectJ

Seite 2© Bessere Software durch AOP mit Java und AspectJ 26.11.2007 -

Gliederung

I. Einleitung

II. Was ist AOP?� Motivation

� Konzepte und Begriffe

III. Überblick über AspectJ� „Hello World“

� Sprachumfang im Überblick

� Tools

IV. AspectJ in der Praxis

� Performance-Logging

� Design by Contract

� JavaBeans Bound Properties

V. Optional: AspectJ Load Time Weaving und Eclipse Plug-ins

VI. Fazit und Diskussion

Page 3: JUGM 07 - AspectJ

Seite 3© Bessere Software durch AOP mit Java und AspectJ 26.11.2007 -

Einleitung

Vorstellung

� Heiko Seeberger

� 36 Jahre

� Market Unit Manager of Enterprise Architecture bei metafinanz

� OO-Kenntnisse seit 1993, Java seit 1999

� Schwerpunkte: AspectJ, Eclipse und SOA

� Aktiver Open Source Contributor

Page 4: JUGM 07 - AspectJ

Seite 4© Bessere Software durch AOP mit Java und AspectJ 26.11.2007 -

Gliederung

I. Einleitung

II. Was ist AOP?� Motivation

� Konzepte und Begriffe

III. Überblick über AspectJ� „Hello World“

� Sprachumfang im Überblick

� Tools

IV. AspectJ in der Praxis

� Performance-Logging

� Design by Contract

� JavaBeans Bound Properties

V. Optional: AspectJ Load Time Weaving und Eclipse Plug-ins

VI. Fazit und Diskussion

Page 5: JUGM 07 - AspectJ

Seite 5© Bessere Software durch AOP mit Java und AspectJ 26.11.2007 -

Seperation of Concerns

� Herausforderung: Komplexität

� Ansatz: Problemstellung in überschaubare und disjunkte „Häppchen“ (Belange) zerlegen.

� Ergebnis:� Verständliche Anforderungen

� Klare Konzepte

� Hochwertige Lösungen

� Höherer Grad an Wiederverwendung

=> Modularisierung ist gut!

� Objektorientierung (OO) fördert Modularisierung:� Packages

� Klassen

� Methoden

� …

Motivation

Page 6: JUGM 07 - AspectJ

Seite 6© Bessere Software durch AOP mit Java und AspectJ 26.11.2007 -

Motivation

Modularisierung broken

� OO vermag i.d.R. nicht, alle Belange zu modularisieren.

� Manche Belange durchsetzen die OO-Module: Cross-cutting Concerns.

� Scattering: Belange sind auf mehrere Module verteilt.

� Tangling: Module enthalten mehrere Belange.

=> Die Software könnte noch besser (verständlicher, wartbarer , wiederverbendbarer etc.) sein.

ClassA ClassB ClassC

ConcernXConcernX

ConcernXConcernX

ConcernX

ConcernX

Page 7: JUGM 07 - AspectJ

Seite 7© Bessere Software durch AOP mit Java und AspectJ 26.11.2007 -

AOP-Konzepte

AOP modularisiert Cross-cutting Concerns

� AOP führt neben Klassen Aspekte ein.

� Cross-cutting Concerns werden von Klassen in Aspekte verlagert.

=> Jedes Modul behandelt genau einen Belang => Vollständige Modularisierung.

ClassA ClassB ClassC

ConcernXConcernX

ConcernXConcernX

ConcernX

ConcernX

AspectX

ConcernX

Page 8: JUGM 07 - AspectJ

Seite 8© Bessere Software durch AOP mit Java und AspectJ 26.11.2007 -

AOP-Konzepte

Weaving

� Herausforderung: Die separierten Belange wieder zusammenführen.

� Ansatz: Dieser Vorgang wird mit Weaving („Weben“) bezeichnet.

� Ergebnis: Die vormals separierten Belange „spielen wieder zusammen“.

� Mehrere Strategien:� Precompiler.

� Compile-time Weaving: Beim/nach dem Compilieren (Java).

� Load-time Weaving: Beim Class Loading (Java).

ClassA ClassB ClassC

ConcernXConcernX

ConcernXConcernX

ConcernX

ConcernX

AspectX

ConcernX

Page 9: JUGM 07 - AspectJ

Seite 9© Bessere Software durch AOP mit Java und AspectJ 26.11.2007 -

Gliederung

I. Einleitung

II. Was ist AOP?� Motivation

� Konzepte und Begriffe

III. Überblick über AspectJ� „Hello World“

� Sprachumfang im Überblick

� Tools

IV. AspectJ in der Praxis

� Performance-Logging

� Design by Contract

� JavaBeans Bound Properties

V. Optional: AspectJ Load Time Weaving und Eclipse Plug-ins

VI. Fazit und Diskussion

Page 10: JUGM 07 - AspectJ

Seite 10© Bessere Software durch AOP mit Java und AspectJ 26.11.2007 -

Sprachumfang im Überblick

Hello World

Demo

Page 11: JUGM 07 - AspectJ

Seite 11© Bessere Software durch AOP mit Java und AspectJ 26.11.2007 -

Sprachumfang im Überblick

Anatomie von Aspekten

12

Dynamic cross-cutting

Static cross-cutting

Page 12: JUGM 07 - AspectJ

Seite 12© Bessere Software durch AOP mit Java und AspectJ 26.11.2007 -

Dynamic cross-cutting

Dynamische Aspekte von Aspekten

� Joinpoints sind Programmstellen, an denen Weaving ansetzen kann, z.B.� Methoden-Aufrufe, Feldzugriffe, Instantiierung etc.

� Pointcuts definieren bestimmte Mengen von Joinpoints, z.B.� „alle Methoden-Aufrufe“ oder „alle Methoden-Aufrufe der Klasse X mit einem Parameter“ oder …

� Advices enthalten die Belange und steuern unter Bezug auf Pointcuts das Weaving,� z.B. „Vor PointcutX soll dieser Belang eingewoben werden“.

Page 13: JUGM 07 - AspectJ

Seite 13© Bessere Software durch AOP mit Java und AspectJ 26.11.2007 -

Static cross-cutting

Klassen „aufbohren“

� Hinzufügen von Feldern, Methoden und Konstruktoren.

� „Gewöhnliche“ Syntax mit vorangestelltem Klassennamen.

Demo

Page 14: JUGM 07 - AspectJ

Seite 14© Bessere Software durch AOP mit Java und AspectJ 26.11.2007 -

Static cross-cutting

Eltern adoptieren

� Typen erweitern, d.h. neue extends hinzufügen.

� Interfaces implementieren, d.h. neue implements hinzufügen.

Demo

Page 15: JUGM 07 - AspectJ

Seite 15© Bessere Software durch AOP mit Java und AspectJ 26.11.2007 -

Static cross-cutting

Default-Implementierungen für Interfaces

� Hinzufügen von Feldern und Methoden-Implementierungen zu Interfaces!

� Macht gemixte Methoden direkt zugreifbar.

Demo

Page 16: JUGM 07 - AspectJ

Seite 16© Bessere Software durch AOP mit Java und AspectJ 26.11.2007 -

Static cross-cutting

Eigene Compiler-Meldungen

� Anhand von statischen Pointcuts gibt der AspectJ-Compiler Fehler oder Warnungen aus.

� Nützlich für die Qualitätssicherung:� Nutzung von unerwünschtem Code verhindern.

� Einhalten von Richtlinien sicherstellen.

Demo

Page 17: JUGM 07 - AspectJ

Seite 17© Bessere Software durch AOP mit Java und AspectJ 26.11.2007 -

Gliederung

I. Einleitung

II. Was ist AOP?� Motivation

� Konzepte und Begriffe

III. Überblick über AspectJ� „Hello World“

� Sprachumfang im Überblick

� Tools

IV. AspectJ in der Praxis

� Performance-Logging

� Design by Contract

� JavaBeans Bound Properties

V. Optional: AspectJ Load Time Weaving und Eclipse Plug-ins

VI. Fazit und Diskussion

Page 18: JUGM 07 - AspectJ

Seite 18© Bessere Software durch AOP mit Java und AspectJ 26.11.2007 -

Performance-Logging

Ein Praxisbeispiel

� Reporting von Performance-Kennzahlen aus dem laufenden Betrieb.

� Messung der Ausführungsdauer von Anwendungsfällen.

� Kommt im Kernsystem der Allianz Versicherung zum Einsatz.

Page 19: JUGM 07 - AspectJ

Seite 19© Bessere Software durch AOP mit Java und AspectJ 26.11.2007 -

Design by Contract

Verbindliche Schnittstellen

� Design by Contract: Klare Vorgaben, was vom API erwartet und geliefert wird.� Preconditions definieren die Erwartungshaltung.

� Postconditions beschreiben die Liefergarantien.

� Erfolgsfaktoren:� Contracts müssen klar kommuniziert werden => Nutzer des API wissen Bescheid.

� Contracts dürfen nicht gebrochen werden können => Herausgeber des API kann sich verlassen.

� Die Umsetzung muss einfach sein.

� „Zweitbeste“ Lösung: � Contracts in JavaDoc beschreiben. => Vollständig? Refactoring?

� Contracts in den Implementierungen umsetzen, d.h. durch den Nutzer. => Verlässlichkeit?

� Mühsame Ansatz, oft redundanter Code.

Demo

Page 20: JUGM 07 - AspectJ

Seite 20© Bessere Software durch AOP mit Java und AspectJ 26.11.2007 -

Design by Contract

ContractJ (www.aspectbrains.org/contractj)

� Bessere Lösung: � Annotations markieren Contracts.

� Aspekte implementieren Contracts.

Page 21: JUGM 07 - AspectJ

Seite 21© Bessere Software durch AOP mit Java und AspectJ 26.11.2007 -

Design by Contract

ContractJ

� Annotations sind ausdrucksstark. => Klare Kommunikation der Contracts.

� Annotations identifizieren und beschreiben Contracts gleichzeitig. => Vollständig und konsistent.

� Aspekte liegen in der Hoheit des API-Herausgebers. => Hohes Maß an Verlässlichkeit.

� Weiterführende Informationen siehe Eclipse Magazin Vol. 12 „Design by Contract“:� http://www.metafinanz.de/fileadmin/Dokumente/Kontakt/2007_08_hsr_eclipse.pdf

Demo

Page 22: JUGM 07 - AspectJ

Seite 22© Bessere Software durch AOP mit Java und AspectJ 26.11.2007 -

JavaBeans Bound Properties

PropertyChanges kommunizieren

� JavaBeans definieren PropertyChangeListener:� „A PropertyChange event gets fired whenever a bean changes a bound property. You can register a

PropertyChangeListener with a source bean so as to be notified of any bound property updates.“

� Implementierung sehr mühsam, da viel „Glue Code“ zu schreiben:� Listener registrieren und deregistrieren.

� Für jede Bound Property muss ein PropertChangeEvent gefeuert werden.

� Trotz Hilfsklasse PropertyChangeSupport viel „Handarbeit“ erforderlich.Demo

Page 23: JUGM 07 - AspectJ

Seite 23© Bessere Software durch AOP mit Java und AspectJ 26.11.2007 -

JavaBeans Bound Properties

Active Beans (www.aspectbrains.org/activebeans)

� Einfachere Lösung:� Annotations markieren Klassen, deren Properties gebunden werden sollen.

� Aspekte fügen mittels Static und Dynamic Cross-cutting den Glue Code ein. Demo

Page 24: JUGM 07 - AspectJ

Seite 24© Bessere Software durch AOP mit Java und AspectJ 26.11.2007 -

Gliederung

I. Einleitung

II. Was ist AOP?� Motivation

� Konzepte und Begriffe

III. Überblick über AspectJ� „Hello World“

� Sprachumfang im Überblick

� Tools

IV. AspectJ in der Praxis

� Performance-Logging

� Design by Contract

� JavaBeans Bound Properties

V. Optional: AspectJ Load Time Weaving und Eclipse Plug-ins

VI. Fazit und Diskussion

Page 25: JUGM 07 - AspectJ

Seite 25© Bessere Software durch AOP mit Java und AspectJ 26.11.2007 -

Fazit

AOP bzw. AspectJ ist sehr nützlich

� AOP ermöglicht volle Seperation of Concerns und führt dadurch zu besserer Software.

� AspectJ ist eine reife und sehr mächtige AOP-Sprache für Java.

� Vorschlag für schrittweise Einführung:� Eigene Compiler-Meldungen verwenden.

� Fertige Aspekte bzw. Aspekt-Libraries für Standard-Szenarien einsetzen.

� Eigene Aspekte für individuelle Cross-cutting Concerns erstellen.

=> Nutzen Sie AspectJ!

� Fragen und Antworten …

Page 26: JUGM 07 - AspectJ

Seite 26© Bessere Software durch AOP mit Java und AspectJ 26.11.2007 -

Herzlichen Dank!

metafinanzInformationssysteme GmbH

Leopoldstr. 14680804 München

phone: +49 89 360531-0fax: +49 89 [email protected]

www.metafinanz.de