28.11.2012 Aufrufe

Bessere Software durch aspektorientierte Programmierung mit Java ...

Bessere Software durch aspektorientierte Programmierung mit Java ...

Bessere Software durch aspektorientierte Programmierung mit Java ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>Bessere</strong> <strong>Software</strong> <strong>durch</strong><br />

<strong>aspektorientierte</strong> <strong>Programmierung</strong><br />

<strong>mit</strong> <strong>Java</strong> und AspectJ<br />

Stand: 26.11.2007


Gliederung<br />

I. Einleitung<br />

II. Was ist AOP?<br />

� Motivation<br />

� Konzepte und Begriffe<br />

III. Überblick über AspectJ<br />

� „Hello World“<br />

� Sprachumfang im Überblick<br />

� Tools<br />

IV. AspectJ in der Praxis<br />

� Performance-Logging<br />

� Design by Contract<br />

� <strong>Java</strong>Beans Bound Properties<br />

V. Optional: AspectJ Load Time Weaving und Eclipse Plug-ins<br />

VI. Fazit und Diskussion<br />

© <strong>Bessere</strong> <strong>Software</strong> <strong>durch</strong> AOP <strong>mit</strong> <strong>Java</strong> und AspectJ 26.11.2007 - Seite 2


Einleitung<br />

Vorstellung<br />

� Heiko Seeberger<br />

� 36 Jahre<br />

� Market Unit Manager of Enterprise Architecture bei metafinanz<br />

� OO-Kenntnisse seit 1993, <strong>Java</strong> seit 1999<br />

� Schwerpunkte: AspectJ, Eclipse und SOA<br />

� Aktiver Open Source Contributor<br />

© <strong>Bessere</strong> <strong>Software</strong> <strong>durch</strong> AOP <strong>mit</strong> <strong>Java</strong> und AspectJ 26.11.2007 - Seite 3


Gliederung<br />

I. Einleitung<br />

II. Was ist AOP?<br />

� Motivation<br />

� Konzepte und Begriffe<br />

III. Überblick über AspectJ<br />

� „Hello World“<br />

� Sprachumfang im Überblick<br />

� Tools<br />

IV. AspectJ in der Praxis<br />

� Performance-Logging<br />

� Design by Contract<br />

� <strong>Java</strong>Beans Bound Properties<br />

V. Optional: AspectJ Load Time Weaving und Eclipse Plug-ins<br />

VI. Fazit und Diskussion<br />

© <strong>Bessere</strong> <strong>Software</strong> <strong>durch</strong> AOP <strong>mit</strong> <strong>Java</strong> und AspectJ 26.11.2007 - Seite 4


Motivation<br />

Seperation of Concerns<br />

� Herausforderung: Komplexität<br />

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

� Ergebnis:<br />

� Verständliche Anforderungen<br />

� Klare Konzepte<br />

� Hochwertige Lösungen<br />

� Höherer Grad an Wiederverwendung<br />

=> Modularisierung ist gut!<br />

� Objektorientierung (OO) fördert Modularisierung:<br />

� Packages<br />

� Klassen<br />

� Methoden<br />

� …<br />

© <strong>Bessere</strong> <strong>Software</strong> <strong>durch</strong> AOP <strong>mit</strong> <strong>Java</strong> und AspectJ 26.11.2007 - Seite 5


Motivation<br />

Modularisierung broken<br />

� OO vermag i.d.R. nicht, alle Belange zu modularisieren.<br />

� Manche Belange <strong>durch</strong>setzen die OO-Module: Cross-cutting Concerns.<br />

ClassA ClassB ClassC<br />

ConcernX<br />

ConcernX<br />

� Scattering: Belange sind auf mehrere Module verteilt.<br />

� Tangling: Module enthalten mehrere Belange.<br />

ConcernX<br />

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

© <strong>Bessere</strong> <strong>Software</strong> <strong>durch</strong> AOP <strong>mit</strong> <strong>Java</strong> und AspectJ 26.11.2007 - Seite 6


AOP-Konzepte<br />

AOP modularisiert Cross-cutting Concerns<br />

� AOP führt neben Klassen Aspekte ein.<br />

� Cross-cutting Concerns werden von Klassen in Aspekte verlagert.<br />

ClassA ClassB ClassC<br />

ConcernX<br />

ConcernX<br />

ConcernX<br />

AspectX<br />

ConcernX<br />

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

© <strong>Bessere</strong> <strong>Software</strong> <strong>durch</strong> AOP <strong>mit</strong> <strong>Java</strong> und AspectJ 26.11.2007 - Seite 7


AOP-Konzepte<br />

Weaving<br />

� Herausforderung: Die separierten Belange wieder zusammenführen.<br />

� Ansatz: Dieser Vorgang wird <strong>mit</strong> Weaving („Weben“) bezeichnet.<br />

� Ergebnis: Die vormals separierten Belange „spielen wieder zusammen“.<br />

� Mehrere Strategien:<br />

� Precompiler.<br />

ClassA ClassB ClassC<br />

ConcernX<br />

ConcernX<br />

� Compile-time Weaving: Beim/nach dem Compilieren (<strong>Java</strong>).<br />

� Load-time Weaving: Beim Class Loading (<strong>Java</strong>).<br />

ConcernX<br />

AspectX<br />

ConcernX<br />

© <strong>Bessere</strong> <strong>Software</strong> <strong>durch</strong> AOP <strong>mit</strong> <strong>Java</strong> und AspectJ 26.11.2007 - Seite 8


Gliederung<br />

I. Einleitung<br />

II. Was ist AOP?<br />

� Motivation<br />

� Konzepte und Begriffe<br />

III. Überblick über AspectJ<br />

� „Hello World“<br />

� Sprachumfang im Überblick<br />

� Tools<br />

IV. AspectJ in der Praxis<br />

� Performance-Logging<br />

� Design by Contract<br />

� <strong>Java</strong>Beans Bound Properties<br />

V. Optional: AspectJ Load Time Weaving und Eclipse Plug-ins<br />

VI. Fazit und Diskussion<br />

© <strong>Bessere</strong> <strong>Software</strong> <strong>durch</strong> AOP <strong>mit</strong> <strong>Java</strong> und AspectJ 26.11.2007 - Seite 9


Sprachumfang im Überblick<br />

Hello World<br />

Demo<br />

© <strong>Bessere</strong> <strong>Software</strong> <strong>durch</strong> AOP <strong>mit</strong> <strong>Java</strong> und AspectJ 26.11.2007 - Seite 10


Sprachumfang im Überblick<br />

Anatomie von Aspekten<br />

1<br />

2<br />

Dynamic cross-cutting<br />

Static cross-cutting<br />

© <strong>Bessere</strong> <strong>Software</strong> <strong>durch</strong> AOP <strong>mit</strong> <strong>Java</strong> und AspectJ 26.11.2007 - Seite 11


Dynamic cross-cutting<br />

Dynamische Aspekte von Aspekten<br />

� Joinpoints sind Programmstellen, an denen Weaving ansetzen kann, z.B.<br />

� Methoden-Aufrufe, Feldzugriffe, Instantiierung etc.<br />

� Pointcuts definieren bestimmte Mengen von Joinpoints, z.B.<br />

� „alle Methoden-Aufrufe“ oder „alle Methoden-Aufrufe der Klasse X <strong>mit</strong> einem Parameter“ oder …<br />

� Advices enthalten die Belange und steuern unter Bezug auf Pointcuts das Weaving,<br />

� z.B. „Vor PointcutX soll dieser Belang eingewoben werden“.<br />

© <strong>Bessere</strong> <strong>Software</strong> <strong>durch</strong> AOP <strong>mit</strong> <strong>Java</strong> und AspectJ 26.11.2007 - Seite 12


Static cross-cutting<br />

Klassen „aufbohren“<br />

� Hinzufügen von Feldern, Methoden und Konstruktoren.<br />

� „Gewöhnliche“ Syntax <strong>mit</strong> vorangestelltem Klassennamen.<br />

Demo<br />

© <strong>Bessere</strong> <strong>Software</strong> <strong>durch</strong> AOP <strong>mit</strong> <strong>Java</strong> und AspectJ 26.11.2007 - Seite 13


Static cross-cutting<br />

Eltern adoptieren<br />

� Typen erweitern, d.h. neue extends hinzufügen.<br />

� Interfaces implementieren, d.h. neue implements hinzufügen.<br />

Demo<br />

© <strong>Bessere</strong> <strong>Software</strong> <strong>durch</strong> AOP <strong>mit</strong> <strong>Java</strong> und AspectJ 26.11.2007 - Seite 14


Static cross-cutting<br />

Default-Implementierungen für Interfaces<br />

� Hinzufügen von Feldern und Methoden-Implementierungen zu Interfaces!<br />

� Macht gemixte Methoden direkt zugreifbar.<br />

Demo<br />

© <strong>Bessere</strong> <strong>Software</strong> <strong>durch</strong> AOP <strong>mit</strong> <strong>Java</strong> und AspectJ 26.11.2007 - Seite 15


Static cross-cutting<br />

Eigene Compiler-Meldungen<br />

� Anhand von statischen Pointcuts gibt der AspectJ-Compiler Fehler oder Warnungen aus.<br />

� Nützlich für die Qualitätssicherung:<br />

� Nutzung von unerwünschtem Code verhindern.<br />

� Einhalten von Richtlinien sicherstellen.<br />

Demo<br />

© <strong>Bessere</strong> <strong>Software</strong> <strong>durch</strong> AOP <strong>mit</strong> <strong>Java</strong> und AspectJ 26.11.2007 - Seite 16


Gliederung<br />

I. Einleitung<br />

II. Was ist AOP?<br />

� Motivation<br />

� Konzepte und Begriffe<br />

III. Überblick über AspectJ<br />

� „Hello World“<br />

� Sprachumfang im Überblick<br />

� Tools<br />

IV. AspectJ in der Praxis<br />

� Performance-Logging<br />

� Design by Contract<br />

� <strong>Java</strong>Beans Bound Properties<br />

V. Optional: AspectJ Load Time Weaving und Eclipse Plug-ins<br />

VI. Fazit und Diskussion<br />

© <strong>Bessere</strong> <strong>Software</strong> <strong>durch</strong> AOP <strong>mit</strong> <strong>Java</strong> und AspectJ 26.11.2007 - Seite 17


Performance-Logging<br />

Ein Praxisbeispiel<br />

� Reporting von Performance-Kennzahlen aus dem laufenden Betrieb.<br />

� Messung der Ausführungsdauer von Anwendungsfällen.<br />

� Kommt im Kernsystem der Allianz Versicherung zum Einsatz.<br />

© <strong>Bessere</strong> <strong>Software</strong> <strong>durch</strong> AOP <strong>mit</strong> <strong>Java</strong> und AspectJ 26.11.2007 - Seite 18


Design by Contract<br />

Verbindliche Schnittstellen<br />

� Design by Contract: Klare Vorgaben, was vom API erwartet und geliefert wird.<br />

� Preconditions definieren die Erwartungshaltung.<br />

� Postconditions beschreiben die Liefergarantien.<br />

� Erfolgsfaktoren:<br />

� Contracts müssen klar kommuniziert werden => Nutzer des API wissen Bescheid.<br />

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

� Die Umsetzung muss einfach sein.<br />

� „Zweitbeste“ Lösung:<br />

� Contracts in <strong>Java</strong>Doc beschreiben. => Vollständig? Refactoring?<br />

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

� Mühsame Ansatz, oft redundanter Code.<br />

Demo<br />

© <strong>Bessere</strong> <strong>Software</strong> <strong>durch</strong> AOP <strong>mit</strong> <strong>Java</strong> und AspectJ 26.11.2007 - Seite 19


Design by Contract<br />

ContractJ (www.aspectbrains.org/contractj)<br />

� <strong>Bessere</strong> Lösung:<br />

� Annotations markieren Contracts.<br />

� Aspekte implementieren Contracts.<br />

© <strong>Bessere</strong> <strong>Software</strong> <strong>durch</strong> AOP <strong>mit</strong> <strong>Java</strong> und AspectJ 26.11.2007 - Seite 20


Design by Contract<br />

ContractJ<br />

� Annotations sind ausdrucksstark. => Klare Kommunikation der Contracts.<br />

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

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

� Weiterführende Informationen siehe Eclipse Magazin Vol. 12 „Design by Contract“:<br />

� http://www.metafinanz.de/fileadmin/Dokumente/Kontakt/2007_08_hsr_eclipse.pdf<br />

Demo<br />

© <strong>Bessere</strong> <strong>Software</strong> <strong>durch</strong> AOP <strong>mit</strong> <strong>Java</strong> und AspectJ 26.11.2007 - Seite 21


<strong>Java</strong>Beans Bound Properties<br />

PropertyChanges kommunizieren<br />

� <strong>Java</strong>Beans definieren PropertyChangeListener:<br />

� „A PropertyChange event gets fired whenever a bean changes a bound property. You can register a<br />

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

� Implementierung sehr mühsam, da viel „Glue Code“ zu schreiben:<br />

� Listener registrieren und deregistrieren.<br />

� Für jede Bound Property muss ein PropertChangeEvent gefeuert werden.<br />

� Trotz Hilfsklasse PropertyChangeSupport viel „Handarbeit“ erforderlich.<br />

Demo<br />

© <strong>Bessere</strong> <strong>Software</strong> <strong>durch</strong> AOP <strong>mit</strong> <strong>Java</strong> und AspectJ 26.11.2007 - Seite 22


<strong>Java</strong>Beans Bound Properties<br />

Active Beans (www.aspectbrains.org/activebeans)<br />

� Einfachere Lösung:<br />

� Annotations markieren Klassen, deren Properties gebunden werden sollen.<br />

� Aspekte fügen <strong>mit</strong>tels Static und Dynamic Cross-cutting den Glue Code ein.<br />

Demo<br />

© <strong>Bessere</strong> <strong>Software</strong> <strong>durch</strong> AOP <strong>mit</strong> <strong>Java</strong> und AspectJ 26.11.2007 - Seite 23


Gliederung<br />

I. Einleitung<br />

II. Was ist AOP?<br />

� Motivation<br />

� Konzepte und Begriffe<br />

III. Überblick über AspectJ<br />

� „Hello World“<br />

� Sprachumfang im Überblick<br />

� Tools<br />

IV. AspectJ in der Praxis<br />

� Performance-Logging<br />

� Design by Contract<br />

� <strong>Java</strong>Beans Bound Properties<br />

V. Optional: AspectJ Load Time Weaving und Eclipse Plug-ins<br />

VI. Fazit und Diskussion<br />

© <strong>Bessere</strong> <strong>Software</strong> <strong>durch</strong> AOP <strong>mit</strong> <strong>Java</strong> und AspectJ 26.11.2007 - Seite 24


Fazit<br />

AOP bzw. AspectJ ist sehr nützlich<br />

� AOP ermöglicht volle Seperation of Concerns und führt da<strong>durch</strong> zu besserer <strong>Software</strong>.<br />

� AspectJ ist eine reife und sehr mächtige AOP-Sprache für <strong>Java</strong>.<br />

� Vorschlag für schrittweise Einführung:<br />

� Eigene Compiler-Meldungen verwenden.<br />

� Fertige Aspekte bzw. Aspekt-Libraries für Standard-Szenarien einsetzen.<br />

� Eigene Aspekte für individuelle Cross-cutting Concerns erstellen.<br />

=> Nutzen Sie AspectJ!<br />

� Fragen und Antworten …<br />

© <strong>Bessere</strong> <strong>Software</strong> <strong>durch</strong> AOP <strong>mit</strong> <strong>Java</strong> und AspectJ 26.11.2007 - Seite 25


Herzlichen Dank!<br />

metafinanz<br />

Informationssysteme GmbH<br />

Leopoldstr. 146<br />

80804 München<br />

phone: +49 89 360531-0<br />

fax: +49 89 360531-15<br />

kontakt@metafinanz.de<br />

www.metafinanz.de<br />

© <strong>Bessere</strong> <strong>Software</strong> <strong>durch</strong> AOP <strong>mit</strong> <strong>Java</strong> und AspectJ 26.11.2007 - Seite 26

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!