Aspektorientierte Programmierung (aspect-oriented programming, AOP)



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

Java: Vererbung. Teil 3: super()

Objektorientierte Programmierung

Objektorientierte Programmierung für Anfänger am Beispiel PHP

1 Mathematische Grundlagen

Zählen von Objekten einer bestimmten Klasse

Einführung in die Programmierung

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Computeranwendung und Programmierung (CuP)

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

teamsync Kurzanleitung

Universität Augsburg, Institut für Informatik Sommersemester 2005 Prof. Dr. Werner Kießling 16. Juli 2005 Dr. Alfons Huhn, Timotheus Preisinger

Übung: Verwendung von Java-Threads

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

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

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: MORE Projects GmbH

Objektorientierte Programmierung. Kapitel 12: Interfaces

SEP 114. Design by Contract

Einführung in die Java- Programmierung

Der lokale und verteilte Fall

Whitepaper. Produkt: combit Relationship Manager 7. combit Relationship Manager -rückläufer Script. combit GmbH Untere Laube Konstanz

Software Engineering Klassendiagramme Assoziationen

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

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

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

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

Objektorientierte Programmierung OOP

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Print2CAD 2017, 8th Generation. Netzwerkversionen

Programmieren in Java

Anwahlprogramm. zur. Modem-Schnittstelle TH004

BEISPIELKLAUSUR Softwareentwicklung:

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

White Paper - Umsatzsteuervoranmeldung Österreich ab 01/2012

Kapitel 4 Die Datenbank Kuchenbestellung Seite 1

Verteilte Paarprogrammierung mit Eclipse

Lehrer: Einschreibemethoden

Elexis-BlueEvidence-Connector

In diesem Thema lernen wir die Grundlagen der Datenbanken kennen und werden diese lernen einzusetzen. Access. Die Grundlagen der Datenbanken.

Thema: Aspekt-orientierte Entwicklung: Einführung

Schlüsselaustausch. Version 1.1. APCS Power Clearing and Settlement AG

The B Method. B ist eine Methode zur Spezifikation zum Entwurf zur Implementierung von Software Systemen. Bücher zur B-Methode

Design by Contract with JML

Objektorientiertes JavaScript

1 topologisches Sortieren

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

Installation von Druckern auf dem ZOVAS-Notebook. 1. Der Drucker ist direkt mit dem Notebook verbunden

Algorithmen und Datenstrukturen

Speicher in der Cloud

Komponententest. Testen von Software Systemen. Übung 02 SS 2009 Version:

Erstellen von x-y-diagrammen in OpenOffice.calc

Mandant in den einzelnen Anwendungen löschen

Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler

Softwareentwicklungsprozess im Praktikum. 23. April 2015

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

Vorkurs C++ Programmierung

Testen mit JUnit. Motivation

Einführung zum Arbeiten mit Microsoft Visual C Express Edition

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Softwaretechnik (Allgemeine Informatik) Überblick

PHP - Projekt Personalverwaltung. Erstellt von James Schüpbach

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Vermeiden Sie es sich bei einer deutlich erfahreneren Person "dranzuhängen", Sie sind persönlich verantwortlich für Ihren Lernerfolg.

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

Erweiterungen Webportal

Terminabgleich mit Mobiltelefonen

Javakurs zu Informatik I. Henning Heitkötter

Große Übung Praktische Informatik 1

WPF Steuerelemente Listbox, ComboBox, ListView,

Agile Vorgehensmodelle in der Softwareentwicklung: Scrum

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

Wir machen neue Politik für Baden-Württemberg

15.3 Bedingte Wahrscheinlichkeit und Unabhängigkeit

Arbeiten mit UMLed und Delphi

Typumwandlungen bei Referenztypen

Um das Versenden von Anhängen an s zu ermöglichen, wurde der Assistent für die Kommunikation leicht überarbeitet und wo nötig verbessert.

Glaube an die Existenz von Regeln für Vergleiche und Kenntnis der Regeln

Inhaltsverzeichnis. 1. Empfängerübersicht / Empfänger hinzufügen 2. Erstellen eines neuen Newsletters / Mailings 3. Versand eines Newsletters

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

Einführung in die Algebra

SEQUENZDIAGRAMM. Christoph Süsens

Erstellen einer Collage. Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu])

Einführung in. Logische Schaltungen

Info-Veranstaltung zur Erstellung von Zertifikaten

Übungsklausur vom 7. Dez. 2007

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

Qualität und Verlässlichkeit Das verstehen die Deutschen unter Geschäftsmoral!

Inventur. Bemerkung. / Inventur

Informationssystemanalyse Problemstellung 2 1. Trotz aller Methoden, Techniken usw. zeigen Untersuchungen sehr negative Ergebnisse:

25 Import der Beispiele

Standard XPersonenstand - Version Verbindliche Handlungsanweisungen

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

1. Aktionen-Palette durch "Fenster /Aktionen ALT+F9" öffnen. 2. Anlegen eines neuen Set über "Neues Set..." (über das kleine Dreieck zu erreichen)

Schnellanleitung: Verbuchung von Studien- und Prüfungsleistungen

Software Engineering Interaktionsdiagramme

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

Transkript:

Aspektorientierte Programmierung (aspect-oriented programming, AOP) Abstract Die aspektorientierte Programmierung ist ein neues Programmierparadigma, das die Probleme und Nachteile, die aus der prozeduralen und objektorientierten Programmierung entstehen, zu verhindern sucht. In dieser Präsentation werden die grundlegenden Begriffe der AOP erläutert und ein einführendes Beispiel gegeben. Grundlagen der Software-Entwicklung Die Entwicklung großer Software-Systeme gliedert sich in mehrere Phasen. Eine der wichtigsten Phasen ist der korrekte und vollständige Entwurf (Design) bzw. die Modellierung des Software-Systems. In der Entwurfsphase kommt es üblicherweise zu einer Untersuchung und Zerlegung des Gesamtproblems in kleinere Teilprobleme, die auf Konstrukte der eingesetzten Programmiersprache abgebildet und unabhängig voneinander implementiert werden können. funktionaler Dekomposition oder Modularisierung Als Programmierkonstrukte kommen bei der objektorientierten Programmierung Klassen bzw. Objekte und deren Methoden in Frage.

Probleme bei der Modellierung Bestimmte Concerns ( Anforderungen oder Belange ) des Software-Systems lassen sich nicht eindeutig einer Klasse zuordnen. Man unterscheidet: Common-Concerns lassen sich eindeutig in einer Klasse kapseln Crosscutting-Concerns betreffen viele oder sogar alle Teile des Software-Systems Beispiele für Crosscutting-Concerns: Authentifizierung von Benutzern Protokollierung von Systemereignissen Synchronisation Einhaltung von Zeitschranken Datenkonsistenz Code Tangling und Code Scattering Problem: OO-Sprachen bieten dem Entwickler kein anderes Konstrukt außer Klassen an, um Crosscutting-Concerns zu modellieren. Dies führt zu Code Tangling Durcheinander an Code, der ganz verschiedene Anforderungen implementiert, aber dennoch in einer Klasse gekapselt ist Code Scattering Verteilen von Code, der eine bestimmte Aufgabe erfüllt (z.b. Einhaltung von Zeitschranken), über viele verschiedene Klassen hinweg Widerspruch zum Prinzip der funktionalen Dekomposition Prinzip der Kapselung Probleme motivieren eine Erweiterung der OOP um Möglichkeiten, Crosscutting-Concerns zu kapseln und den Software-Entwurf flexibler zu gestalten. Auf diese Anforderungen bietet die AOP eine Antwort.

Vorgehensweise der AOP Weaver Joinpoints Unter einem Joinpoint versteht man einen bestimmten Punkt oder ein bestimmtes Ereignis im Ablauf eines Programms. Beispiele: Aufruf einer Methode Werfen einer Ausnahme Ausführung eines Konstruktors Lesen und Schreiben von Attributen

Pointcut Ein Pointcut definiert auf welche Joinpoints reagiert werden soll, definiert also einen Filter für Joinpoints. Beispiele: Reaktion auf Methode mit bestimmten Namen Reaktion auf Methode mit bestimmter Signatur Reaktion auf einen Konstruktor In AspectJ werden Pointcuts mit dem Schlüsselwort pointcut deklariert. Advice Da ein Pointcut nur definiert, auf welche Joinpoints reagiert werden soll, aber nicht wie, benötigt man ein weiteres Konstrukt, welches Advice genannt wird. Ein Advice verknüpft einen Pointcut mit Code, der bei Erreichen eines Joinpoints ausgeführt wird. AspectJ unterscheidet drei verschiedene Arten von Advice: before spezifizierter Joinpoint wurde erreicht, aber noch nicht abgearbeitet after spezifizierter Joinpoint wurde erreicht und abgearbeitet around Entwickler kann selbst entscheiden, wann Joinpoint abgearbeitet wird

Aspekte Aspekte fassen mehrere Pointcuts und Advice zusammen, dienen also zur Kapselung selbiger. Ein Aspekt wird durch das Schlüsselwort aspect definiert und ist von der Struktur her einer Klasse vergleichbar. Von Aspekten können keine Exemplare mittels new erzeugt werden. Java und Echtzeit Implementierung eines Echtzeitsystems setzt echtzeitfähige Programmiersprache voraus Java ist auf Grund seiner Speicherverwaltung nicht echtzeitfähig: Objekte werden mittels new erzeugt und auf dem Heap abgelegt nicht mehr benötigte Objekte werden durch Garbage Collector (GC) entfernt GC ist als eigenständiger Thread mit höchster Priorität implementiert Folge: GC kann zu beliebigen Zeitpunkten den Programmablauf für unbestimmte Zeit unterbrechen Unterbrechungszeit der Anwendungsthreads ist nicht deterministisch

Arbeitsweise des Garbage Collector Real-Time Specification for Java entwickelt von der Real-Time for Java Expert Group (RTJEG) Quelle: https://rtsj.dev.java.net/ Erweiterung der Java Sprachspezifikation und der JVM Spezifikation Hauptziele: Analyse Erzeugung Ausführung Verifikation von Threads, die Zeitanforderungen genügen müssen

RealtimeThread und NoHeapRealtimeThread Einführung von zwei neuen Thread-Klassen: RealtimeThread besitzt niedrigere Priorität als der GC kann unterbrochen werden erlaubt die Festlegung von SchedulingParameters und ReleaseParameters NoHeapRealtimeThread besitzt höhere Priorität als der GC kann nicht unterbrochen werden verwendet keinen Heap-Speicher AspectJ AspectJ ist eine frei verfügbare Aspektsprache für Java, entwickelt von Xerox PARC. Quelle: http://eclipse.org/aspectj AspectJ erweitert Java um aspektorientierte Programmkonstrukte. Die Menge der gültigen AspectJ-Programme ist demnach eine Obermenge der gültigen Java-Programme, d.h. jedes gültige Java- Programm ist auch ein gültiges AspectJ-Programm. Vorteile: Verfügbarkeit von zahlreichen Werkzeugen (Debugger, Dokumentationsgenerator, Aspektvisualisierer, ) Integration in zahlreiche Entwicklungsumgebungen (NetBeans, SunONE, JBuilder, Eclipse, )

Beispiel: Logging (1) public class ExampleClass1 public void method1() System.err.println("Logger: ExampleClass1:method1 wurde betreten."); // Anweisungen von Methode 1... System.err.println("Logger: ExampleClass1:method1 wird verlassen."); public void method2() System.err.println("Logger: ExampleClass1:method2 wurde betreten."); // Anweisungen von Methode 2... System.err.println("Logger: ExampleClass1:method2 wird verlassen.");... Beispiel: Logging (2) Nachteile: In jeder Methode müssen die Statusmeldungen manuell eingefügt werden. Da eine Statusmeldung immer die gleiche Form hat, kommt es zu Code-Replikation. Sollte neben der Meldung, dass eine Methode betreten bzw. verlassen wurde, noch weitere Informationen benötigt werden, wie beispielsweise die Systemzeit, müssen alle Programmstellen manuell geändert werden. inflexibel gegenüber Änderungen. Werden die Statusmeldungen nicht mehr benötigt, müssen sie manuell wieder entfernt werden.

Beispiel: Logging (3) import org.aspectj.lang.*; public aspect LoggerAspect pointcut executionmethods() : execution(void ExampleClass2.method*()); before() : executionmethods() Signature s = thisjoinpoint.getsignature(); System.err.println("Logger: " + s.getdeclaringtypename() + ":" + s.getname() + " wurde betreten."); after() : executionmethods() Signature s = thisjoinpoint.getsignature(); System.err.println("Logger: " + s.getdeclaringtypename() + ":" + s.getname() + " wird verlassen."); Quellen Ramnivas Laddad: I want my AOP!, Part 1 Separate software concerns with aspect-oriented programming, http://www.javaworld.com/javaworld/jw-01-2002/jw-0118-aspect_p.html, 18. Januar 2002 Ramnivas Laddad: I want my AOP!, Part 2 Learn AspectJ to better understand aspect-oriented programming, http://www.javaworld.com/javaworld/jw-03-2002/jw-0301-aspect2_p.html, 01. März 2002 Ramnivas Laddad: I want my AOP!, Part 3 Use AspectJ to modularize crosscutting concerns in real-world problems, http://www.javaworld.com/javaworld/jw-04-2002/jw-0412-aspect3_p.html, 12. April 2002 The AspectJ project at Eclipse.org, http://www.eclipse.org/aspectj/ Eclipse.org home, http://www.eclipse.org/