Bessere Software durch AOP? Achim Demelt OOP 2008

Ähnliche Dokumente
AOP Day 07. eine Veranstaltung der SIG AspectJ. organisiert vom AOP-Komitee. und der guten Fee. powered by. Oliver Böhm Darko Palic Ludger Solbach

Thema: Aspekt-orientierte Entwicklung: Einführung

Aspektorientierte Programmierung (aspect-oriented programming, AOP)

Ein Erfahrungsbericht beim Einsatz von generierenden Ansätzen im Vergleich zu generischen Lösungen

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

AOP im Einsatz mit OSGi und RCP. Martin Lippert, Peter Friese und Heiko Seeberger

Anwendung der Aspektorientierung : Security

i n g e n i e u r b ü r o f ü r s o f t w a r e t e c h n o l o g i e w w w. v o e l t e r. d e MDSD und/oder AOSD?

Hochschule Furtwangen

Application Frameworks

Advanced Software Engineering WS0910 Kapitel4. Dr. Dominik Haneberg

Informationsverarbeitung im Bauwesen

Hauptseminar AOSD. Design-by-Contract

Repetitorium Informatik (Java)

Aspektorientierte Middleware Florian Wagner

Einführung in Generatives Programmieren. Bastian Molkenthin

Anwendungsentwicklung mit Spring

Michael Piechotta - CASE Tools. openarchitecture Ware

Agile Modellierung mit UML Lab

Aspektorientierte Programmierung. Modellierung und Programmierung 2

Generatives Programmieren

Modellgetriebene Entwicklungsprozesse in der Praxis - eine Bestandsaufnahme. Tillmann Schall, anaptecs GmbH

Das Softwaresystem BASEMENT

Aspekt Orientierte Programmierung

Hauptseminar AOSD. Aspektorientierte Programmierung am Beispiel AspectJ

Aspektorientierte Softwareentwicklung. Vorstellung

Der SBB Online-Ticketshop Mit SOA zum Erfolg

Inhalt. Motivation Techniken des MDE. Fallbeispiele

Spring Dynamic Modules for OSGi Service Platforms

Model Driven Development im Überblick

Software Factories SS Prof. Dr. Dirk Müller. 9 Aspektorientierte Programmierung

Spring Dynamic Modules for OSGi Service Platforms

Theorie zu Übung 8 Implementierung in Java

Objektorientierte Programmierung mit Java. Grundlagen Übersicht. Programmiersprachen

Aspektorientierte Softwareentwicklung

SW-Archäologie mit AOP (Praxisbericht)

Feature Modelle. und ihre Anwendung. Feature Modelle und ihre Anwendungen. Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn

Software ubiquitärer Systeme

Aspektorientiertes Programmieren in Java

AOSTA. Aspects in Operating Systems: Tools and Applications

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

Einführung in die Aspect Orientierte Programmierung (AOP) Arno Schmidmeier, AspectSoft JUGS Zürich, Januar 2003

THE GO PROGRAMMING LANGUAGE. Michael Karnutsch & Marko Sulejic

Softwaretechnik. Prof. Dr. Rainer Koschke. Fachbereich Mathematik und Informatik Arbeitsgruppe Softwaretechnik Universität Bremen

Einführung in die objektorientierte Programmierung. mit Squeak

Comparing Software Factories and Software Product Lines

Softwaretechnik. Überblick I. Prof. Dr. Rainer Koschke. Sommersemester 2006

Innovator Anbindung an openarchitectureware. Connect. Klaus Weber.

Java I Vorlesung Vererbung und Sichtbarkeit

Prof. W. Henrich Seite 1

Aspektorientierte Modellierung

Java für C++ Programmierer

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

MDRE die nächste Generation des Requirements Engineerings

Prinzipien der Modularisierung

4.Grundsätzliche Programmentwicklungsmethoden

Objektorientiertes Software-Engineering

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Integration von Web Services in J EE Anwendungen mit XFire. 1/26 André Janus - Integration von Web Services in J EE Anwendungen mit XFire

1 Einführung in Aspektorientierung

Prozessautomatisierung mit BPMN 2.0 und Java.

OO Softwareentwicklung

6. Design-Phase Software Engineering (FB EIT) Wintersemester 2007 / 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik

Einführung in die Aspektorientierte Programmierung

Untersuchung des Themengebietes Aspekt-orientierte Programmierung anhand des Projektes

1. Übung zu "Numerik partieller Differentialgleichungen"

Grundlagen der Informatik für Ingenieure I

Programmieren ohne Programmierer Das GeneSEZ Generator Framework. Gerrit Beine

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

SOMA Reverse Engineering

Rhapsody in C ein System zur aspektorientierten Embedded- Entwicklung? Dr.- Ing. Alexander Steinkogler B. Braun Melsungen AG

Funktionale Konzepte in objektorientierten Sprachen LAMBDAS / CLOSURES

Übersicht. Vorstellung des OO-Paradigmas

Prinzipien Objektorientierter Programmierung

Zusammenfassung: Architekturprinzipien

Generieren vs. Interpretieren Die andere Seite von MDSD

Übersicht Eclipse Modeling Project EMP. Zoltan Horvath

Kommunikation. Björn und Georg

Contexts and Dependency Injection. W3L AG

Kontrollstrukturen MySQL Funktionen. MySQL 4, 5. Kapitel 20a: PHP Teil 2. Marcel Noe

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Skriptsprachen am Beispiel Python

Software Analyse Tooldemo: JQuery Sommersemester Jonas Pusch

Objektorientierung: Klassen und Objekte

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

Proseminar: Moderne Technologien für die Entwicklung von verteilten, dynamischen Anwendungen

Block R (Rahmen): SE Aktivitäten Vorlesung Methoden des Software Engineering. Block R Rahmen Aktivitäten der Software-Entwicklung

JavaEE Grundlagen. Theis Michael - Senior Developer UniCredit Global Information Services S.C.p.A

ISO Reference Model

MOF Meta Object Facility. Veranstaltungsvortrag im Rahmen der Projektgruppe ComponentTools

C# Programmierung. Eine Einführung in das.net Framework. C# Programmierung - Tag 8: Professionelle Entwicklung

Modellgetriebene Service-Entwicklung

Entwicklungswerkzeuge

VBA-Programmierung: Zusammenfassung

Vererbung & Schnittstellen in C#

B Java RMI B.2 B.4. 1 Java. 1.2 Methoden. 1.1 Objekte (2) 1.1 Objekte. Objektorientierte Sprache. Klassenbeschreibung. Methode ist eine Art Funktion

Probeklausur: Programmierung WS04/05

Anwendung von Aspektorientierter Programmierung

TOGAF The Open Group Architecture Framework

Refactoring von Legacy Systemen. Jochen Winzen andrena objects ag

Transkript:

Bessere Software durch AOP? Achim Demelt OOP 2008

Agenda Motivation Konzepte der Aspektorientierung Aspektorientierung in der Praxis Bessere Software? Die Zukunft von AOP 2

Motivation Software wird immer größer und komplexer Komplexe und dynamische Geschäftsprozesse Großer Funktionsumfang Hoher Bedienkomfort Integration mit anderen Systemen 3

Motivation: Size matters 4

Motivation: Komplexität Grenzen der Strukturierungsmöglichkeiten von OO Klassen bilden eng verwobene Abhängigkeitsnetze Verbesserungen durch: Komponenten (OSGi) Services (SOA) 5

Motivation: Strukturierung SSE strukturiert einzelne Befehle in definierten, wiederholbaren Blöcken (Schleifen, Funktionen, ) OOSE strukturiert Daten mit ihrem dazugehörigem Verhalten in Objekten AOSE strukturiert Blöcke/Daten/Verhalten/ Objekte in Aspekten Die Einführung neuer Strukturierungsebenen ermöglicht die Entzerrung komplexer Konstrukte aus den darunterliegenden Ebenen 6

7

Aspektorientierung Aspect-oriented programming (AOP), and aspect-oriented software development (AOSD) attempt to aid programmers in the separation of concerns, specifically cross-cutting concerns, as an advance in modularization. Wikipedia Aspects are one kind of concern in software development. With respect to a primary or dominant decomposition aspects are concerns that crosscut that decomposition. aosd.net A concern is an area of interest or focus in a system. aosd.net A concern is any code related to a goal, feature, concept, or kind of functionality. Clarke, Baniassad 8

Modularisierung The tyranny of the dominant decomposition Bekanntes Problem bei traditionellen Sprachen und Systemen Modularisierung ist immer nur in einer Dimension möglich OO => Klasse OSGi =>Bundle Übergreifende Themen (cross-cutting concerns) werden über das gesamte System verteilt Aspektorienterung ermöglicht Modularisierung auf orthogonalen Dimensionen 9

Modularisierung Modularisierung == Separation of Concerns Ein Concern ist modular, wenn: Sein Code lokal zusammenhängend ist Er ein wohldefiniertes Interface hat, das beschreibt, wie der Concern mit dem Rest des Systems interagiert Das Interface eine Abstraktion der Implementierung ist, und diese ausgestauscht werden kann Ein automatischer Mechanismus die Einhaltung des Interfaces sicherstellt Der Concern mit anderen Concerns automatisiert zusammengesetzt werden kann, um ein vollständiges System zu erzeugen 10

Aspektorientierung Aspekte haben zum Ziel, Teile eines Softwaresystems zu erfassen, die mit den regulären Mitteln der Modularisierung über das System verteilt wären Wie Aspekte definiert und ausgeführt werden, ist abhängig von der Sprache und Systemumgebung Concerns können statische und dynamische Einflüsse haben 11

Begriffsklärung Concern: Ein Belang oder Bereich in einem Softwaresystem. Wird i.d.r. als Anhaltspunkt für Modularisierung der Software verwendet. Crosscutting: Die Manifestation eines Concerns, der die (dominante) Dekomposition durchbricht. Joinpoint: Elemente, mit denen Aspekte interagieren können. Abhängig von Sprache und AO-Engine. Pointcut: Eine Selektion bestimmter Joinpoints. Advice: Ratschlag, der an bestimmten Pointcuts von der AO-Engine verwoben (eingebaut) wird. Aspect: Gruppiert Pointcut-Definitionen und Advices, die zu einem (crosscutting) Concern gehören. Weaving: Das Zusammensetzen von Aspekten mit anderen Aspekten und den Basismodulen. 12

13

AspectJ Spracherweiterung von Java AOP auf Java Code-Ebene Realisierung (Weaving) durch Bytecodemanipulation, entweder durch Compiler oder durch ClassLoader zur Laufzeit Joinpoints sind Ereignisse bei der Ausführung von Java Code Aufrufe von Methoden und Konstruktoren Ausführung von Methoden und Konstruktoren Lesen und Schreiben von Membervariablen Initialisierung von Klassen und Objekten Ausführung eines Exception Handlers Inter-type Declarations für statische Ergänzungen von Klassen Ergänzung neuer Membervariablen und Methoden Erweiterung der implementierten Interfaces Definition von Basisklassen 14

AspectJ Beispiel 15

Spring AOP Proxy-basierter Ansatz (Java-Interface Proxies oder CGLIB) Plain Java zur Laufzeit Arbeitet nur auf Spring-managed Beans Einzige Art von Joinpoints: Ausführung von Methoden Syntaxvarianten: @AspectJ XML 16

Spring AOP Beispiele 17

openarchitectureware Xpand (M2T) Templatesprache zur Erzeugung textueller Artefakte aus Modellen Wenige, einfache Sprachkonstrukte DEFINE: Definiert ein Template für eine Art von Modellelement EXPAND: Delegiert in ein Unter-Template FOR, FOREACH, IF: Kontrollstrukturen <<,>>: Bezug auf Modellelemente und Funktionen Alles andere wird als Klartext übernommen 18

openarchitectureware Xpand AO Templates sind Joinpoints Können durch Aspekt-Templates advised werden 19

openarchitectureware XWeave Statisches Merging von Modellen Joinpoints: Metamodellelemente Pointcut-Definition mit Expressions 20

21

Kriterien für bessere Software Wann wird Software besser? Allgemeine Kriterien: Qualität der Entwickler Qualität des Projektmanagements Effizienz des Prozesses und der Tools AO-relevante Kriterien Hoher Grad an Modularisierung Reduktion der Komplexität Geringes Fehlerpotenzial Akzeptanz von AO 22

Besser mit AspectJ? (1) Vollständige, mächtige AO-Realisierung für Java Stabil, praxiserprobt Gute Tools Aber die Komplexität 11 Typen von Joinpoints Jede Java-Klasse ist advise-bar 25+6 Schlüsselwörter für Pointcut Expressions Signaturmatching mit Wildcards 6 Schlüsselwörter für Advices 6 Schlüsselwörter für Intertype declarations, etc. 7 Schlüsselwörter für Aspektdeklaration 14 Annotations für @AspectJ Syntax 23

Besser mit AspectJ? (2) Gefahr der Un Strukturierung Pointcuts an prinzipiell allen Stellen des Java-Programms möglich Aspekte haben Zugriff auf private Members Verhalten von Methoden kann durch Aspekte verändert werden OO-Kapselung kann komplett unterwandert werden Der Contract von Interfaces kann gebrochen werden Hohes Fehlerpotenzial Definition nicht-trivialer Pointcuts kann schwierig sein Unbemerkte Selektion nicht beabsichtigter Joinpoints Überblick nur mit Toolunterstützung 24

Besser mit Spring AOP? Pragmatische statt vollständige AO-Lösung für Java Wesentlich geringere Komplexität 1 Typ von Joinpoint Nur Spring-managed Beans advise-bar 5+4 Schlüsselwörter für Pointcuts Signaturmatching mit Wildcards 6 Schlüsselwörter für Advices 1 Schlüsselwort für Inter-type declarations, etc. 3 Schlüsselwörter für Aspektdeklaration Geringerer Umfang erfordert weniger Einarbeitung Aber: Schlechte Toolunterstützung für @AspectJ und XML Syntax Proxy-Ansatz birgt subtile Laufzeitkuriositäten Fehlererkennung oft erst zur Laufzeit 25

Bessere Software mit AO-XPand? Aspektorientierung auf Template-Ebene, nicht auf Java-Code Andere Abstraktionsebene mit inhärent geringerer Komplexität Sehr geringe Komplexität der AO-Erweiterung: 1 Typ von Joinpoint Nur Templates advise-bar 1 neues Schlüsselwort Sehr einfache Wildcards zur Selektion von Pointcut-Templates Sehr kurze Einarbeitungszeit Aber: Schlechte Toolunterstützung für AO-Features Detailverbesserungen notwendig 26

Bessere Software mit XWeave? Aspektorienterung auf (Meta-)Modellebene Dadurch hohe Abstraktion Mit DSLs ist die Abstraktionsebene sogar frei wählbar Geringe Komplexität: Keine neuen Schlüsselwörter Einfache Wildcards für Pointcut-Definition im Modell Standard XPand Expressions zur Pointcut-Selektion Aber: Sehr junges Gebiet Erfordert andere Denkweise der Entwickler Integration von Modellen und Java-Code ist anspruchsvoll 27

Schlechtere Software ohne Akzeptanz Akzeptanz von Aspektorientierung teilweise erschreckend schlecht Schlechte Ergebnisse vorprogrammiert Häufige Reaktionen: Ablehnung Wozu brauch ich das? Das macht doch alles komplizierter! Angst Darf ich jetzt nicht mehr Java machen? Das kapier ich nicht! AOP wird als Ablösung von OOP wahrgenommen, nicht als Ergänzung AOP ist ein Paradigmenwechsel Ähnlich wie beim Wechsel von SP zu OOP bleiben einige auf der Strecke 28

Bessere Software durch AOSD! 29

Die Zukunft von AOP: AOSD Aspect-Oriented Software Development AOP leitet einen Paradigmenwechsel ein Aus aspektorientierter Programmierung (AOP) wird aspektorientierte Softwareentwicklung (AOSD) Zunächst Manifestierung in Programmiersprachen AspectJ, Spring AOP, JBoss AOP, Aspect#, AspectC++ Dann Arbeit und Forschung an AO-Theorie Universitäten, Publikationen, Konferenzen, Bücher, Einzug von AOSD in der breiten Praxis > 2010 30

Weiterentwicklung von AOSD Ubiquitous AOSD Höhere Wahrnehmung der Aspektorientierung Festigung der AO-Konzepte und Begriffe Aufnahme von AO in das Curriculum der Hochschulen Präsenz durch Publikationen Thinking in Aspects Höhere Abstraktion von AO Weg von AOP im Code Verbindung von AOSD und MDSD Early Aspects in Analyse und Designphase 31

Weitere Informationen Bei mir: Hier und jetzt Im Ausstellungsbereich Email: a.demelt@exxcellent.de Im Internet: http://aosd.net http://www.eclipse.org/aspectj http://www.springframework.org/ http://www.openarchitectureware.org/ Literatur: Clarke, Baniassad: Aspect-Oriented Analysis and Design Jacobsson, Ng: Aspect-Oriented Software Development with Use Cases 32