Aspektorientierte Softwareentwicklung



Ähnliche Dokumente
Aspektorientierte Programmierung (aspect-oriented programming, AOP)

Prinzipien Objektorientierter Programmierung

Advanced Software Engineering WS0910 Kapitel4. Dr. Dominik Haneberg

Übungsklausur vom 7. Dez. 2007

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Programmierung für Mathematik (HS13)

Thema: Aspekt-orientierte Entwicklung: Einführung

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

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

Was ist EMF? Wie wird EMF eingesetzt? Was ist ecore? Das Generatormodell Fazit

Vorkurs Informatik WiSe 15/16

Objektorientierte Programmierung. Kapitel 12: Interfaces

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Übung 6: Feinentwurf. Prof. Dr. Dr. h.c. Manfred Broy Dr. Herbert Ehler, Martin Feilkas 6. Juli 2006 Bernd Spanfelner, Sebastian Winter

AOSTA. Aspects in Operating Systems: Tools and Applications

Diplomarbeit. Konzeption und Implementierung einer automatisierten Testumgebung. Thomas Wehrspann. 10. Dezember 2008

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

Anleitung zur Webservice Entwicklung unter Eclipse

Grundzüge der Programmierung. Konzepte der objektorientierten Programmierung (oop) OBJEKTE - KLASSEN

Anwendungspraktikum aus JAVA Programmierung im SS 2006 Leitung: Albert Weichselbraun. Java Projekt. Schiffe Versenken mit GUI

2. Einrichtung der ODBC-Schnittstelle aus orgamax (für 32-bit-Anwendungen)

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Das Handbuch zu KAppTemplate. Anne-Marie Mahfouf Übersetzung: Burkhard Lück

Testen mit JUnit. Motivation

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

Aspekt Orientierte Programmierung

kreativgeschoss.de Webhosting Accounts verwalten

Planung für Organisation und Technik

Softwaretechnologie -Wintersemester 2013/ Dr. Günter Kniesel

Installation von NetBeans inkl. Glassfish Anwendungs-Server

OO Softwareentwicklung

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Testplan. Hochschule Luzern Technik & Architektur. Software Komponenten FS13. Gruppe 03 Horw,

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

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

Objektorientierte Programmierung

Große Übung Praktische Informatik 1

4D Server v12 64-bit Version BETA VERSION

Konfigurationslanleitung für J2EE und Eclipse im KBS-Pool

Multimedia im Netz. Wintersemester 2011/12. Übung 10. Betreuer: Verantwortlicher Professor: Sebastian Löhmann. Prof. Dr.

Installation und Inbetriebnahme von Microsoft Visual C Express

Übung: Verwendung von Java-Threads

HTBVIEWER INBETRIEBNAHME

OP-LOG

BIF/SWE - Übungsbeispiel

Probeklausur. Lenz Belzner. January 26, Lenz Belzner Probeklausur January 26, / 16

mehr funktionen, mehr e-commerce:

MO 27. Aug. 2007, 17:00 UHR JAVA FRAMEWORKS TIPPS VON PROFI-GÄRTNERN GEGEN WILDWUCHS

Application Frameworks

Agile Vorgehensmodelle in der Softwareentwicklung: Scrum

Klassendiagramm. (class diagram)

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

Java Server Faces. Andy Bosch. Das Standard-Framework zum Aufbau webbasierter Anwendungen. An imprint of Pearson Education

Java lernen mit BlueJ

Gliederung. Programmierparadigmen. Sprachmittel in SCHEME. Objekte: Motivation. Objekte in Scheme

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

IBM Software Demos WebSphere Dashboard Framework

Professionelle Seminare im Bereich MS-Office

Programmieren in Java

Softwaretechnologie Wintersemester 2009/2010 Dr. Günter Kniesel, Pascal Bihler

Übung: Netzwerkmanagement mit SNMP

(1) Mit dem Administrator Modul werden die Datenbank, Gruppen, Benutzer, Projekte und sonstige Aufgaben verwaltet.

Informatik 12 Datenbanken SQL-Einführung

How-to: Webserver NAT. Securepoint Security System Version 2007nx

SEW Übung EMFText. 1 Aufgabe. 2 Domänenbeschreibung. 3 Installation von Eclipse/EMFText. 4 Schritt-für-Schritt Anleitung. 4.

ICS-Addin. Benutzerhandbuch. Version: 1.0

Programmierparadigmen

Lösungsvorschlag für Übungsblatt 6 Software Engineering 1 (WS 2012/13)

Copyright 2014 Delta Software Technology GmbH. All Rights reserved.

Version 0.3. Installation von MinGW und Eclipse CDT

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

INHALT 1. INSTALLATION DES V-MODELL XT UNTER WINDOWS 7 2. INSTALLATION DES V-MODELL XT UNTER WINDOWS VISTA

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

Qualitätsmanagement im Projekt

SJ OFFICE - Update 3.0

1 Motivation und Einleitung

ActiveCharts. Verknüpfung von Modellen und Code bei der modellgetriebenen Softwareentwicklung mit UML 2.0

Neue Funktionen in Innovator 11 R5

Anforderungen an die HIS

AUTOMATISCHE -ARCHIVIERUNG. 10/07/28 BMD Systemhaus GmbH, Steyr Vervielfältigung bedarf der ausdrücklichen Genehmigung durch BMD!

arlanis Software AG SOA Architektonische und technische Grundlagen Andreas Holubek

Typisierung des Replikationsplan Wirries, Denis Datenbankspezialist

Visual Basic Express Debugging

Anleitung zum Computercheck Windows Firewall aktivieren oder eine kostenlose Firewall installieren

Design Patterns 2. Model-View-Controller in der Praxis

Microsoft SharePoint 2013 Designer

Installation einer C++ Entwicklungsumgebung unter Windows --- TDM-GCC und Eclipse installieren

Informatik-Sommercamp Mastermind mit dem Android SDK

SDD System Design Document

Der lokale und verteilte Fall

Acceptor-Connector. Acceptor-Connector

2D to 3D Technologie

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

Fachapplikationen in heterogenen IT Landschaften

AOP in der Praxis Aspektorientierung in Projekten der MATHEMA

SWT II Projekt. Chat - Anwendung. Pflichtenheft 2000 SWT

Kern Concept AG Software Entwicklung HMO und BlueEvidence

Reporting Services und SharePoint 2010 Teil 1

Transkript:

Aspektorientierte Softwareentwicklung Eine Einführung mit Schwerpunkt Aspektorientierte Programmierung

Modularisierung Vorteile Bessere Bewältigung der Systemkomplexität Bessere Wiederverwendung von Teilen Kein redundanter Quellcode Bessere Planbarkeit in der Entwicklung Designprinzipien Divide and Conquer OO! Funktionale Dekomposition (eindimensional) Information Hiding / Problem Hiding OO! Trennung von Schnittstelle und Implementierung Separation of Concerns OO? Klare Zuordnung von Zuständigkeiten auf einzelne Module

Die Prisma Metapher Concern something that relates or belongs to one matter for consideration marked interest or regard (Merriam Webster)... those interests which pertain to the system s development, its operation or any other aspects that are critical or otherwise important to one or more stakeholders. (IEEE [6]) Wie modularisiert man die einzelnen Zuständigkeiten? Wie ermöglicht man lose Kopplung zwischen den Zuständigkeiten?

Abbildung von Zuständigkeiten auf Programmeinheiten Variante 1: Isomorphismus Zuständigkeiten Kunde Programmeinheiten Kunde.java Stammdatenpflege de.fau.swe.stammdaten Vorteile einer objektorientierten Lösung Modularisierung der Zuständigkeiten durch OO-Mittel wie Klassen und Namensräume möglich. Einfach zu lokalisieren und zu modifizieren. Hohe Kohäsion

Beispiel: Isomorphismus URL Pattern Matching im Apache Tomcat Server Vertikale Balken = Quellcode-Pakete Rote Färbung = Lokalisierung der Zuständigkeit

Abbildung von Zuständigkeiten auf Programmeinheiten Variante 2: Tangling (Verstreuung) Zuständigkeiten Programmeinheiten Kunde.java Logging de.fau.swe.stammdaten Login.java Vorteil einer objektorientierten Lösung Zugriff auf Kontext einfach möglich (z.b. Logging kundenspezifischer Daten) Nachteile einer objektorientierten Lösung Modularisierung der Zuständigkeit durch OO-Mittel nur in Ausnahmefällen möglich (z.b. per Vererbung). Schwer zu lokalisieren und zu modifizieren.

Beispiel: Tangling Logging im Apache Tomcat Server

Abbildung von Zuständigkeiten auf Programmeinheiten Variante 3: Scattering (Vermischung) Zuständigkeiten Programmeinheiten Transaktionssteuerung Logging de.fau.swe.stammdaten Pufferung Vorteil einer objektorientierten Lösung siehe Tangling Nachteile einer objektorientierten Lösung Modularisierung der Zuständigkeit durch OO-Mittel nur in seltenen Ausnahmefällen möglich (z.b. per Mehrfach-Vererbung oder Decorator-Muster). Extrem schwer zu modifizieren, da Entwickler viele Zuständigkeiten kennen muss Ungewollte Wechselwirkungen zwischen den Zuständigkeiten Niedrige Kohäsion

Auswirkungen Tangling & Scattering Software Slums Spaghetti Code Inhomogene Infrastruktur Undurchsichtige Programmstruktur

Crosscutting Concerns Zuständigkeiten, die sich per Tangling oder Scattering auf OO- Programmeinheiten abbilden, nennt man Crosscutting Concerns. Adressieren oft nicht-funktionale Anforderungen und systembezogene Anforderungen. Isomorph abbildbare Zuständigkeiten nennt man Common Concerns. Lösungsansätze zur Modularisierung von Crosscutting Concerns: Design Patterns z.b. Observer für Logging und Sicherheitsprüfungen z.b. Command für Undo-/Redo-Mechanismus z.b. Decorator für die Anreicherung von Funktionalität Inversion of Control Indirektion des Kontrollflusses über einen Container (z.b. EJB Container) oder Interpreter. Anpassung des Verhaltens über Metadaten. Aspektorientierte Programmierung

Aspektorientierung im Entwicklungsprozess Aspect-Oriented Modelling Aspekte und ihre Wechselwirkungen mit OO-Designelementen modellieren Analyse Spezifikation Design Implementierung Early Aspects Crosscutting Concerns identifizieren und beschreiben Aspect-Oriented Programming Aspekte implementieren und kompilieren

Aspekte in der Analysephase req UPM Berücksichtigt Security-Unternehmensstandard «trace» «trace» «trace» SSO Login «testcase» SecurityAudit SSOAuthenticator

Aspekte in der Designphase class Design Berücksichtigt Security-Unternehmensstandard (from Analysis) «trace» «aspect» SecurityAspect tags pointcut = all component interfaces CustomerManagement Accounting

Aspekt-orientierte Programmierung (AOP) Am Xerox Palo Alto Research Lab (PARC) Mitte der 90er Jahre unter Federführung von Gregor Kiczales entstanden. Ende der 90er Jahre: AOP-Implementierung AspectJ für Java durch gleiches Team. Motivation: Untersuchung der Grenzen der objektorientierten Entwicklng und Entwicklung von Ansätzen zur Steigerung der Produktivität durch vereinfachte Modularisierbarkeit von Code. Zentrale Ideen: Unterscheidung Komponenten: Modularisierung von Common Concerns Aspekte: Modularisierung von Crosscutting Concerns Bereitstellung von Regeln, um Aspekte und Komponenten miteinander kombinieren zu können.

AOP: Das Konzept Common Concern (OO-Kontrollflussgraph) Crosscutting Concern (OO Kontrollflussgraph) Join Point Modell (Auswählbare Knotentypen) Aspekt ( = Auswahl an Join Points + Bereitstellung Programmkontext + Einwebeposition + Code)

AspectJ: Die Sprache Zentrales Sprachkonstrukt: Aspect Kombination aus Java-Code und einer java-ähnlichen Aspektbeschreibungs-Syntax. Das Aspekt-Grundgerüst public aspect MannersAspect { public void greet(){ System.out.println("Good Day"); Die Anwendung public class Talker { public static void say(string message){ System.out.println(message); public void saygoodbye(){ System.out.println("Thank you. Goodbye!");

Sprachkonstrukt: Pointcut Wählt eine Menge an Joinpoints aus ( Abfangen ). Beschreibt den Kontext, der übergeben wird (mehr dazu später ) public aspect MannersAspect { pointcut callsay():call(public static void Talker.say(String)); public void greet(){ System.out.println("Good Day"); public void saygoodbye(){ System.out.println("Thank you. Goodbye!"); public class Talker { public static void say(string message){ System.out.println(message);

Sprachkonstrukt: Pointcut pointcut callsay():call(public static void Talker.say(String)); Name für spätere Referenzierung Join Point Typ Signatur (Einschränkung) Joinpoint Typ Methode-Aufruf Methoden- Ausführung Objektinitialisierung Lesender Feldzugriff Schreibender Feldzugriff Exception Handler Ausführung Syntax call(methoden-sigantur) execution(methoden-sigantur) initialization(konstruktur-signatur) get(feld-signatur) set(feld-signatur) handler(typ-signatur) Kombination von Signaturen per möglich. Einsatz von Wildcards möglich: Wildcard Bedeutung * beliebige Anzahl von Zeichen außer dem Punkt... beliebige Anzahl von Zeichen einschließlich von Punkten. + alle Subtypen des geg. Typs.

Sprachkonstrukt: Pointcut Zusammengesetzte Pointcuts Verknüpfung von mehreren Pointcuts Alle bool schen Operatoren verfügbar pointcut methodstotrace() : execution(public * de.fau.i11..*(..)) &&!execution(public * *.set*(..)) &&!execution(public * *.get*(..)); Wählt alle Join Points Methodenausführung innerhalb aller Klassen des Pakets de.fau.i11 und seiner Unterpakete aus. Nicht jedoch Methodenausführungen von Methoden, deren Name mit get oder set beginnt.

Sprachkonstrukt: Advice Sprachkonstrukt: Advice Verbindung zwischen einem Pointcut und der Implementierung des Crosscutting Concerns. public aspect MannersAspect { pointcut callsay():call(public static void Talker.say(String)); before(): callsay() { greet(); after(): callsay() { saygoodbye(); // Alternative: void around(): callsay() { greet(); proceed(); saygoodbye();

Bereitstellen von Kontext Methoden-Parameter können an Pointcut gebunden werden. Dies wirkt auch als zusätzliche Bedingung. Advice muss dann die gebundenen Parameter in seine Signatur aufnehmen Parameter steht zur Verfügung. pointcut callsay(string message):call(* *.say(..)) && args(message); before(string msg): callsay(msg) { greet(); after(string msg): callsay(msg) { System.out.println("and the second time: " + msg); saygoodbye();

AOP Einsatzgebiete Fehlerbehandlung Logging / Tracing Sicherheitsprüfungen Transaktionssteuerung Persistenz Caching und Replikation Verifikation, Policy Enforcement Nebenläufigkeitskontrolle Profiling

Die Prisma Metapher (rev.) Dekomposition von Crosscutting Concerns und Common Concerns. Modularisierung der Crosscutting Concerns durch Aspekte Rekomposition durch einen Weaver Produziert ausführbaren Programmcode. Ist Teil des Kompilierens oder Ladens einer Software.

Vorteile AOP Durch die AOP ist es möglich, Crosscutting Concerns besser zu definieren mit umfassenderer Funktionalität zu entwickeln besser planen zu können konsistenter implementieren zu können und die sonstigen Vorteile der Modularisierung zu erhalten.

Nachteile AOP Wiederverwendbarkeit und Stabilität der Aspekte hängt stark von deren Implementierung ab (richtige Wahl der Abstraktion). Ein Crosscutting Concern kann Seiteneffekte auf Common Concerns haben. Die Kapselung von Modulen kann gebrochen werden. Die Semantik eines Moduls ist nicht mehr allein dem Quellcode des Moduls zu entnehmen. Das Testen und Verifizieren eines Systems mit Aspekten ist deutlich komplizierter (z.b. Nachweis, dass keine Seiteneffekte existieren). Verminderte statische Analysierbarkeit des Kontrollflusses

Quellen [1] Gregor Kiczales et al., Aspect-Oriented Programming, Proceeding of the European Conference on Object-Oriented Programming (ECOOP), Finland. Springer-Verlag LNCS 1241. June 1997. [2] Gregor Kiczales et al., An Overview of AspectJ, Lecture Notes in Computer Science, Volume 2072, 327 355. 2001. [3] Stanley M. Sutton Jr., Peri Tarr, Aspect-Oriented Design Needs Concern Modeling, Workshop AODS 2002 [4] IEEE. IEEE Recommended Practice for Architectural Description of Software-Intensive Systems. IEEE Std. 1471-2000. Approved 21 September 2000. [5] Ramnivas Laddad, Aspect-Oriented Programming Will Improve Quality, IEEE Software, Quality Time, 0740 7459. 2002. [6] Ramnivas Ladda, AspectJ in Action, Manning, 2003 [7] Ramnivas Laddad, AOP myths and realities, IBM developerworks AOP@Work series, 2006 http://www-128.ibm.com/developerworks/java/library/j-aopwork15 [8] The AspectJ Language, http://www.eclipse.org/aspectj/doc/released/progguide/language.html

Tutorial AspectJ: Ziele Ziele: Erste Gehversuche mit AspectJ Eclipse AspectJ Toolset kennenlernen Ausgangsbasis für eigene Versuche / Beispiele Übungen: Talker/Manners: Erstellen eines einfachen Aspekt / Klasse Paars Simple Tracing: Anwendung eines Aspekts auf viele Klassen und Analyse der Advices. UPMBugPatch: Manipulation von (falschem) Programmverhalten

Tutorial: AspectJ Vorbereitung: Account einrichten und eigenes Verzeichnis erstellen (im Home- Verzeichnis) Eclipse 3.3 auf Rechner kopieren Plugins installieren (AspectJ Tools, Subversive) Workspace anlegen UPM Beispielanwendung aus Subversion-Repository holen: https://upm.svn.sourceforge.net/svnroot/upm Source-Folder aspects erstellen (hier wird der Übungscode abgelegt) Projekt auf AspectJ Projekt umstellen Hilfestellungen: Eclipse Help Vortragsfolien Dozenten ;-)

Tutorial: Übung 1 Talker/Manners-Beispiel aus dem Vortrag implementieren Klasse Talker erstellen (New-Dialog) inkl. main() Methode Aspect Manners erstellen (New-Dialog) Klasse Talker als AspectJ Anwendung laufen lassen public aspect MannersAspect { pointcut callsay():call(public static void Talker.say(String)); public void greet(){ System.out.println("Good Day"); public void saygoodbye(){ System.out.println("Thank you. Goodbye!"); public class Talker { public static void say(string message){ System.out.println(message);

Tutorial: Übung 2 Implementierung eines Tracing-Aspekts: Möglichkeiten der Eclipse AspectJ IDE ausnutzen: Cross References View: Anzeige aller Advices eines Aspekts nach einem Build. Advice Markers: Markierung von Codestellen an denen sich ein Aspekt anlegt mit konfigurierbaren Icons. Aspect Visualization Perspective: Grafische Darstellung auf Paketebene, wo sich alle definierten Aspekte anlegen.

Tutorial: Übung 3 UPM hat einen Bug in der Methode com._17od.upm.util.util.loadimage(string) Folgender Code müsste anstatt des gegebenen Methodenrumpfes ausgeführt werden: Vorgehen zur Korrektur: In den Project Properties das Verzeichnis image in den Libraries Java Build Path legen. Aspekt UPMBugPatch erstellen, der um die gg. Methode herum angewendet wird. Siehe Folie Bereitstellen von Kontext zu dem Thema, wie der Methodenparameter übernommen werden kann.