Aspekt Orientierte Programmierung



Ähnliche Dokumente
Aspekt-orientierte Programmierung

Einführung in AOP. Rico Schiekel rschiekel@web.de. Agenda. Kernproblem der Objekt Orientierung

Java Kurs für Anfänger Einheit 5 Methoden

Objektorientierte Programmierung

Objektorientierte Programmierung

SEP 114. Design by Contract

Java: Vererbung. Teil 3: super()

Einführung in die Programmierung

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Einführung in die Java- Programmierung

Advanced Software Engineering WS0910 Kapitel4. Dr. Dominik Haneberg

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Objektorientierte Programmierung. Kapitel 12: Interfaces

Client-Server-Beziehungen

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Java Einführung Collections

Programmierkurs Java

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Tagesprogramm

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Einführung in die Programmierung für Wirtschaftsinformatik

Übungen Programmieren 1 Felix Rohrer. Übungen

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Operationalisierbare Qualitätskriterien für die Programmierung mit Erfahrungen aus PRÜ1 und PRÜ2

Zählen von Objekten einer bestimmten Klasse

Klassendefinitionen verstehen

Aspektorientierte Programmierung (aspect-oriented programming, AOP)

5.2 Neue Projekte erstellen

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Innere Klassen in Java

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Programmieren in Java

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Prinzipien Objektorientierter Programmierung

Jetzt sollt ihr von der Vorlage der Grundversion 1.0 ein eigenes Textadventure erstellen.

Was meinen die Leute eigentlich mit: Grexit?

Software Engineering Klassendiagramme Assoziationen

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Graphic Coding. Klausur. 9. Februar Kurs A

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Kostenstellen verwalten. Tipps & Tricks

Typumwandlungen bei Referenztypen

Kapitel 6. Vererbung

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Testen mit JUnit. Motivation

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

Übungen zu Softwaretechnik

Dokumentation für das Spiel Pong

Anleitung Typo3-Extension - Raumbuchungssystem

Einführung in die Programmierung

Datenbank-Verschlüsselung mit DbDefence und Webanwendungen.

Applet Firewall und Freigabe der Objekte

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

Scala kann auch faul sein

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

ACCOUNTINFO 1.01 VERWENDEN DER ACCOUNTINFO-SCHNITTSTELLE ABFARGE VON ACCOUNT-INFORMATIONEN IN ECHTZEIT 02. MÄRZ 2010

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Code wiederverwenden: Objektorientierte Programmierung (OOP) sinnvoll nutzen Roland Wagner Automatisierungstreff IT & Automation 2015

Individuelle Formulare

Zeichen bei Zahlen entschlüsseln

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Updatehinweise für die Version forma 5.5.5

Vorkurs C++ Programmierung

So erstellen Sie nützliche Beschreibungen zu Ihren Tradingdaten

Mobile-Szenario in der Integrationskomponente einrichten

Programmieren Tutorium

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 17: 3-Schichten-Architektur 2

Willkommen bei KONTAKTMANAGEMENT INTERAKTIVE-TOUR

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen.

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

Hilfe zur Urlaubsplanung und Zeiterfassung

Internet Explorer Version 6

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv

EPOS. Kurzanleitung Modul Mailing. Logex AG IT-Solutions. Copyright (c) 2008 by Logex ag, Switzerland, all Rights reserved

Anwendungsbeispiele Buchhaltung

WPF Steuerelemente Listbox, ComboBox, ListView,

Aktualisierung der Lizenzierungsrichtlinien für Adobe Produkte

Einführung in die Informatik Tools

StuPro-Seminar Dokumentation in der Software-Wartung. StuPro-Seminar Probleme und Schwierigkeiten in der Software-Wartung.

Spiel und Spaß im Freien. Arbeitsblat. Arbeitsblatt 1. Zeichnung: Gisela Specht. Diese Vorlage darf für den Unterricht fotokopiert werden.

Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können.

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch

Transkript:

Kapitel 13 Aspekt Orientierte Programmierung 13.1 Aspekte in Apache Wir betrachten den Quellcode des Apache-Servers: Der Code zum XML-Parsen steckt in einer eigenen Klasse (rot) Quelle: aspectj.org 0 ausgearbeitet von Andreas Zeller, Lehrstuhl Softwaretechnik, Universität des Saarlandes, Saarbrücken 156

13.1. ASPEKTE IN APACHE 13. Aspekt Orientierte Programmierung Auch der Code zum Matchen von URLs steckt in zwei Klassen (Ober- und Unterklasse): Gute Seperation der Interessen! Log-Meldungen aber sind über den gesamten Code verteilt: Frage: Kann man das Logging besser lokalisieren? 157

13.1. ASPEKTE IN APACHE 13. Aspekt Orientierte Programmierung In den Apache Methoden sind mehrere Aspekte verwoben: die eigentliche Funktionalität wie XML- oder URL-Parsen (nach denen sie Klassen zugeordnet sind) das Logging, das den Programmablauf dokumentiert In Apache sind die Methoden den Klassen gemäß der eigentlichen Funktionalität zugeordnet zufriedenstellende Struktur, dominante Dekomposition Würde man alternativ eine Klasse mit der Zuständigkeit Logging einführen, müssten alle Methoden, die Log-Ausgaben produzieren, dieser Klasse zugeordnet werden monolithische Struktur! Die verwobenen Aspekte der Apache-Methoden machen jedoch Probleme. Beispiel: Wir führen ein neues Log-Format ein. Folge: Wir müssen alle Methoden ändern, in denen Logging praktiziert wird. Das Logging lässt sich nicht kapseln: Tyrannei der dominanten Dekomposition! 158

13.2. BEISPIEL: FIGURENZEICHNEN 13. Aspekt Orientierte Programmierung 13.2 Beispiel: Aspekte beim Figurenzeichnen Beispiel: Einfache Figurenbibliothek Jede set-methode ruft display.update() auf: Auch dies ist ein verwobener Aspekt: Die set-methoden ändern die jeweiligen Attribute (1.Aspekt) und aktualisieren die Anzeige (2.Aspekt) 159

13.3. ASPEKT-ORIENTIERTE PROGRAMMIERUNG 13. Aspekt Orientierte Programmierung 13.3 Aspekt-orientierte Programmierung Modulübergreifende Sachverhalte( Aspekte ) treten in komplexen Systemen ständig auf haben eine klare Zuständigkeit haben eine klare Struktur: bestimmte Menge von Methoden, überschreiten Modulgrenzen, werden an bestimmten Stellen benutzt Also schaffen wir entsprechende syntaktische Strukturen! Aspekt-orientierte Programmierung (AOP) führt Aspekte als eigene syntaktische Strukturen ein erhöht die Modularität von (OO-) Programmen in Bezug auf Aspekte. 160

13.4. ASPECTJ 13. Aspekt Orientierte Programmierung 13.4 AspectJ AspectJ ist eine Erweiterung von Java (von XEROX PARC) Grundideen: Aspekte (aspects) fassen Code (advices) zusammen, der an bestimmten Stellen im Programm (join points, point cuts) ausgeführt wird. Aspekte werden mit dem restlichen Code zu einem Java- Programm verwoben Join Points Ein Join Point ist ein wohldefinierter Punkt im Programmfluß. AspectJ unterstützt zahlreiche Arten von Join Points. Wir betrachten zunächst nur einen, den Aufruf einer Methode (call): Der Join Point call(void Point.setX(int)) definiert den Aufruf der Methode void Point.setX(int). Weitere Arten: get, set, within, clfow... 161

13.4. ASPECTJ 13. Aspekt Orientierte Programmierung Pointcuts Ein Pointcut besteht aus bestimmten Join Points (und ggf. Werten an diesen join points). In Pointcuts werden mehrere Join Points durch boolesche Operationen zusammengefasst. Beispiel - Der Pointcut setter fasst die Join Points bei setx und sety zusammen. pointcut setter(): (call(void Point.setX(int)) call(void Point.setY(int))); Der Pointcut move fasst alle Methodenaufrufe zusammen, die die Position eines Punktes oder einer Linie ändern: pointcut move(): call(void Point.setX(int)) call(void Point.setY(int)) call(void Line.setP1(Point)) call(void Line.setP2(Point)); 162

13.4. ASPECTJ 13. Aspekt Orientierte Programmierung Advices Ein Advice ist Code, der ausgeführt wird, wenn ein Pointcut erreicht wird. Ein After Advice ( after ) wird nach dem Methodenaufruf des Join Points ausgeführt. Beispiel - nach jedem Ändern einer Position einen Text ausgeben: after(): move() { System.out.println(" A figure element moved."); Weitere Arten: before, around Advices können auf den Kontext der Join Points zurückgreifen. Der Pointcut setp merkt sich, welche Linie und welcher Punkt im Aufruf von void a_line.setp*(p) betroffen sind: pointcut setp(line a_line, Point p): call(void Line.setP*(Point)) && args(a_line,p); after(line a_line, Point p): setp(a_line, p) { System.out.println(a_line + " moved to " + p + "."); 163

13.4. ASPECTJ 13. Aspekt Orientierte Programmierung Aspects Ein Aspect fasst Advices zu einer syntaktischen Einheit zusammen: aspect DisplayUpdating { pointcut move(): call(void Point.setX(int)) call(void Point.setY(int)) call(void Line.setP1(Point)) call(void Line.setP2(Point)); after(): move() { Display.update(); Wir benutzen den Before Advice ( before ), der vor dem Methodenaufruf des Join Points ausgeführt wird. aspect CheckPointsRange { pointcut set_x(int x): call(void Point.setX(int)) && args(x); before(): set_x(x) { if (x < MIN_X x > MAX_X) throw new IllegalArgumentException( "x is out of bounds."); // set_y analog 164

13.4. ASPECTJ 13. Aspekt Orientierte Programmierung Introduction Mit AspectJ ist es auch möglich, bestehende Klassen zu verändern und zu erweitern (introduction): aspect PointName { public String Point.name; public void Point.setName(String name) { this.name = name; fügt der Klasse Point ein neues Attribut name und eine Methode setname hinzu. Introduction geht auch für mehrere Klassen gleichzeitig. Beispiel - wir erlauben das Klonen von Figuren: aspect Cloneable Figures { declare parents: (Point Line Square) implements Cloneable; public Object (Point Line Square).clone() throws CloneNotSupportedException { return super.clone(); 165

13.5. ASPECT WEAVER 13. Aspekt Orientierte Programmierung 13.5 Aspect Weaver Der Aspect Weaver fasst Aspekte und Code zusammen: 13.6 Typische Beispiele für Aspekte Im Folgenden betrachten wir ein paar typische Beispiele für die Anwendung von Aspekten 166

13.6. TYPISCHE BEISPIELE FÜR ASPEKTE 13. Aspekt Orientierte Programmierung Logging Wir definieren einen einfachen Aspekt zum Verfolgen von Aufrufen: aspect SimpleTracing { pointcut tracedcall(): call(void FigureElement.draw(GraphicsContext)); before(): tracedcall() { System.out.println("Entering: " + thisjoinpoint); thisjoinpoint enthält den aktuellen Join Point Profiling Wir definieren einen Aspekt zum Zählen von Aufrufen: aspect SetsInRotateCounting { int rotatecount = 0; //aspects are singletons int setcount = 0; before(): call(void Line.rotate(double)) { rotatecount++; before(): call(void Point.set*(int)) && cflow(call(void Line.rotate(double))) { setcount++; cflow(x): Kontrollfluß des Join Points x 167

13.6. TYPISCHE BEISPIELE FÜR ASPEKTE 13. Aspekt Orientierte Programmierung Änderungen verfolgen Move Tracking merkt sich, ob ein Objekt bewegt wurde: aspect MoveTracking { private static boolean dirty = false; public static boolean testandclear() { boolean result = dirty; dirty = false; return result; pointcut move(): /* wie gesehen */; after() returning: move() { dirty = true; Konsistentes Verhalten Wir möchten alle Fehler in Methoden com.xerox.* protokollieren: aspect PublicErrorLogging { Log log = new Log(); pointcut publicmethodcall(): call(public * com.xerox.*.*(..)); after() throwing (Error e): publicmethodcall() { log.write(e); 168

13.7. ZUSAMMENFASSUNG 13. Aspekt Orientierte Programmierung 13.7 Zusammenfassung Aspekt-Orientierte Programmierung (AOP) führt mit Aspekten einen neuen Modularisierungsbegriff ein Aspekte ermögichen es, existierenden Systemen nach Belieben Code hinzuzufügen, um das System um genau definierte Funktionalitäten zu erweitern Aspekte brechen die Tyrannei der dominanten Dekomposition Aspekte sind leicht wiederverwendbar und wartbar Aspekte sind (derzeit) rein syntaktische Erweiterungen Es gibt noch wenig Erfahrungen mit AOP. 169