• Keine Ergebnisse gefunden

Aspektorientierte Programmierung

N/A
N/A
Protected

Academic year: 2022

Aktie "Aspektorientierte Programmierung"

Copied!
5
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Aspektorientierte Programmierung

Objektorientierung: Softwarestruktur folgt der Struktur der Daten.

Prozedurale Programmierung: Struktur folgt der Struktur der Aufgaben.

Manche Aktionen erfolgen quer zur Softwarestruktur (cross cutting concern)

Aspektorientierte Programmierung hat das Ziel einem objektorientierten Programm weitere Aspekte hinzuzufügen, ohne dessen Struktur zu zerstören.

Aspektorientierung wird „orthogonal“ dem Code (oder Bytecode) hinzugefügt.

Dieses „Weben“ kann statisch (Code) oder dynamisch (Classloader) erfolgen.

(2)

Anwendungen der Aspektorientierten Programmierung

Debugging: Trace, Überwachung von Variablenzugriff.

Profiling: man misst gezielt die Ausführungszeit einzelner Aktionen.

Protokollieren.

Verhalten, dass mit der Programmlogik nichts zu tun hat (Transationen...)

Hinzufügen von Entwurfsmustern.

Konfiguration von Software (dependancy injection in Frameworks)

(3)

Begriffe

Crosscutting concern: Aufgabe die „quer“ zur Struktur lieg.

Join Point: Ort an dem eine Aktion ausgeführt werden kann.

(Aufruf einer Methode, Verlassen einer Methode, Zugriff auf Variable, ..)

Point Cut: Menge von Join Points für die Aktionen definiert werden.

Advice: Aktion, die mit einem Point Cut verbunden wird.

Inter-type declarations: Type Deklarationen für andere Klassen

Aspect: Klasse mit AOP-Definitionen (Aspekte sind Singleton Objekte)

Weaving: Verbinden der Aspekte mit dem Programmcode.

AspectJ: Werkzeuge zur Aspektorientierung in Java. Entwickelt von Xerox Parc

Adjt: Eclipse-Plugin für AspectJ

Anmerkung: AspectJ und ähnliche Werkzeug werden in Webframeworks verwendet.

(4)

Beispiel: Wie häufig wird eine bestimmte Methode aufgerufen?

public aspect MethodCounter {

pointcut myMethodCall(): execution(* Klasse.methode(..)) before() myMethodCall() {

counter++;

}

after(): execution(static void Klasse.main(String[])) { System.out.println("Aufrufe: %d%n", count);

} }

(5)

Ergebnisse

Aspekte definieren Debugging-Aktionen, etc.: keine Änderung der Funktionalität

Aspekte beeinflussen die Performance: keine Änderung der Funktionalität

Aspekte sichern ein bestimmtes Verhalten: keine Änderung der Programmlogik

Aspekte führen Fehlerkontrolle durch: keine Änderung der Programmlogik

Aspekte implementieren Muster: Erweiterung der Funktionalität

Meist erfolgt das „Weben“ bei der Übersetzung.

Es können aber auch „fertige“ Anwendungen modifiert werden (byte code).

Aber: wie gewährleistet man die Konsistenz des Quellcodes?

Aspekte scheinen für viele Aktionen gut geeignet.

Es ist aber unklar ob sich (außerhalb von Frameworks) der Einsatz durchsetzt.

Es gibt keine klaren Programmiermethoden und Techniken.

Referenzen

ÄHNLICHE DOKUMENTE

Wieviele Iterationsschritte werden dabei f¨ ur das Datenformat double ben¨ otigt (rel. Hans-J¨ urgen Buhl und

(Auf LINUX-Systemen betrachten Sie zus¨ atzlich bitte auch die Datei /usr/include/bits/mathcalls.h.) Erstellen Sie eine Liste der dort bereitgestellten mathematischen Konstanten

• In einem Hauptprogramm sollen unter Verwendung der implementier- ten Funktionen zuerst alle Buchstaben mit ihren Ordnungsnummern ausgegeben werden!. Danach soll vom Benutzer

Schreiben Sie ein Programm, das den Nutzer nach dem Namen einer Text- datei fragt, diese dann ¨ offnet, die Anzahl der darin vorhandenen Zeichen z¨ ahlt und diese zusammen mit

Diskutieren Sie verschiedene M¨ oglich- keiten, median() so abzu¨ andern, daß es auch bei gemischten (vertr¨ aglichen) Parametertypen funktioniert..

Danach soll die Summe der beiden Objekte mit 0.5 multipliziert und einem zuvor definierten Objekt euro1 der Klasse euro zugewiesen werden. Zum Schluß soll das Objekt euro1

(Hinweis: Speichern Sie den Vollwinkel nichtnegativ und merken Sie sich das Vorzeichen des Winkels in einem eigenen Attribut der Klasse.).

– Eine Funktion deriv() ohne Argumente mit Ergebnistyp double , die den Wert der Ableitung eines Objekts vom Typ autodiff zur¨ uckgibt. • Als