Wofür braucht die Welt AspectJ? Einführung in die aspektorientierte Programmierung

Aspekte von Java

Arno Schmidmeier

Die Programmierumgebung AspectJ [1] bietet Entwicklern eine Erweiterung der Java-Programmiersprache. Welcher Nutzen entsteht aber aus der Verwendung von AspectJ? Unser Special bietet eine Einführung in die aspektorientierte Programmierung sowie einen ersten Praxisteil, in dem gezeigt wird, wie mit Pointcuts und Advices klassische Probleme der Programmierung elegant behoben werden können.

Beginnen wir mit einem kurzen Blick in die Geschichte der Softwareentwicklung. Wir betrachten als Hauptziel des Software Engineerings neben der Wiederverwendung die Modularisierung. Dijkstra und Parna z.B. definierten dieses immer noch gültige Konzept vor mehr als 30 Jahren. Es wurde zuerst mit prozeduralen Programmiersprachen wie C und Pascal umgesetzt, dabei wurden einzelne Befehle zu Prozeduren zusammengefasst. Nach einigen Jahren stießen diese Sprachen an ihre Grenzen, es wurde die modulare Entwicklung eingeführt, mit Sprachen wie Modula-2 oder Turbo Pascal mit seinem Unit-Konzept. In dieser Phase wurden Prozeduren zu Modulen zusammengefasst. Diese Sprachen erweitern die Konzepte der vorherigen. Oft waren die Sprachen sogar mehr oder weniger abwärtskompatibel. Irgendwann reichten auch modulare Sprachen nicht mehr aus und Module wurden um Daten erweitert, aus modularen Sprachen wurden objektorientierte. Im Laufe der Zeit reichte auch diese Strukturierung nicht mehr aus und es wurden Namensräume wie Namespaces in C++ oder Packages in Java hinzugefügt. Mit Packages und Objekten lassen sich viele Aufgaben recht gut einzelnen Packages, Klassen und Funktionen zuweisen.Jedoch scheinen diese Mechanismen heutzutage in der Praxis nicht mehr ausreichend zu sein Ein Beispiel verdeutlicht dies:Betrachten wir in Listing 1 ein typisches Beispiel für die objektorientierte Programmierung, eine Klasse Konto bietet die Funktionalitäten abheben, überweisen und einzahlen. Diese sind bestens modularisiert. Des Weiteren ist die dahinter stehende Logik leicht und einfach zu lesen. Man muss kein Java-Crack sein, um den Code zu verstehen. Die Logik und die Daten eines Geschäftsproblems lassen sich recht gut modularisieren.Listing 1

public void ueberweisen(float Betrag,Konto AnderesKonto)throws   NichtMoeglich{
Logger.log("ueberweisen called with"+Betrag+" "+AnderesKonto);
if (Betrag

Aspekte mit Pointcuts und Advices sind ein sehr leistungsfähiger Mechanismus. Pointcuts und Advices eignen sich besonders gut, um existierende Funktionalitäten mit orthogonaler Funktionalität zu verweben. Oft muss man aber zusätzliche Funktionalität hinzufügen.Einige Architekturmuster könnten verlangen, dass die Klasse Konto wie viele andere Klassen observiert werden kann. Sie muss also Methoden für das De- und Registrieren bereitstellen. Eigentlich keine Aufgabe für die Klasse Konto Wie AspectJ auch diese redundanten Anforderungen modularisieren kann, lesen Sie im nächsten Java Magazin.Links und Literatur[1] www.eclipse.org/aspectj/[2] www.refactoring.com/[3] Java 2 Platform Standard Edition, v.1.3.1, API Specification: java.sun.com/j2se/1.3/docs/api/

Geschrieben von
Arno Schmidmeier
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.