Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
464
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
9
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Bessere Software durch aspektorientierte Programmierung mit Java und AspectJ Stand: 26.11.2007
  • 2. 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 © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 2
  • 3. 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 © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 3
  • 4. 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 © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 4
  • 5. Motivation 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 … © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 5
  • 6. Motivation Modularisierung broken OO vermag i.d.R. nicht, alle Belange zu modularisieren. Manche Belange durchsetzen die OO-Module: Cross-cutting Concerns. ClassA ClassB ClassC ConcernX ConcernX ConcernX Scattering: Belange sind auf mehrere Module verteilt. Tangling: Module enthalten mehrere Belange. => Die Software könnte noch besser (verständlicher, wartbarer , wiederverbendbarer etc.) sein. © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 6
  • 7. AOP-Konzepte AOP modularisiert Cross-cutting Concerns AOP führt neben Klassen Aspekte ein. Cross-cutting Concerns werden von Klassen in Aspekte verlagert. ClassA ClassB ClassC AspectX ConcernX ConcernX ConcernX ConcernX => Jedes Modul behandelt genau einen Belang => Vollständige Modularisierung. © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 7
  • 8. AOP-Konzepte Weaving Herausforderung: Die separierten Belange wieder zusammenführen. Ansatz: Dieser Vorgang wird mit Weaving („Weben“) bezeichnet. ClassA ClassB ClassC AspectX ConcernX ConcernX ConcernX ConcernX 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). © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 8
  • 9. 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 © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 9
  • 10. Sprachumfang im Überblick Hello World Demo © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 10
  • 11. Sprachumfang im Überblick Anatomie von Aspekten 1 Dynamic cross-cutting 2 Static cross-cutting © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 11
  • 12. 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“. © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 12
  • 13. Static cross-cutting Klassen „aufbohren“ Hinzufügen von Feldern, Methoden und Konstruktoren. „Gewöhnliche“ Syntax mit vorangestelltem Klassennamen. Demo © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 13
  • 14. Static cross-cutting Eltern adoptieren Typen erweitern, d.h. neue extends hinzufügen. Interfaces implementieren, d.h. neue implements hinzufügen. Demo © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 14
  • 15. Static cross-cutting Default-Implementierungen für Interfaces Hinzufügen von Feldern und Methoden-Implementierungen zu Interfaces! Demo Macht gemixte Methoden direkt zugreifbar. © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 15
  • 16. 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 © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 16
  • 17. 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 © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 17
  • 18. 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. © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 18
  • 19. 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? Demo Contracts in den Implementierungen umsetzen, d.h. durch den Nutzer. => Verlässlichkeit? Mühsame Ansatz, oft redundanter Code. © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 19
  • 20. Design by Contract ContractJ (www.aspectbrains.org/contractj) Bessere Lösung: Annotations markieren Contracts. Aspekte implementieren Contracts. © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 20
  • 21. 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 © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 21
  • 22. 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. Demo Trotz Hilfsklasse PropertyChangeSupport viel „Handarbeit“ erforderlich. © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 22
  • 23. JavaBeans Bound Properties Active Beans (www.aspectbrains.org/activebeans) Einfachere Lösung: Annotations markieren Klassen, deren Properties gebunden werden sollen. Demo Aspekte fügen mittels Static und Dynamic Cross-cutting den Glue Code ein. © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 23
  • 24. 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 © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 24
  • 25. 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 … © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 25
  • 26. Herzlichen Dank! metafinanz Informationssysteme GmbH Leopoldstr. 146 80804 München phone: +49 89 360531-0 fax: +49 89 360531-15 kontakt@metafinanz.de www.metafinanz.de © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 26