1 WS 2012 Software-Engineering II Aspektorientierung.

Slides:



Advertisements
Ähnliche Präsentationen
Software Engeniering II
Advertisements

PHP Extension und Application Repository
Das V - Modell - Überblick
V - Modell Anwendung auf große Projekte
Vorgehensmodell - Wasserfallmodell
1 WS 2012 Software-Engineering II Einführung / Objektorientierung.
Prof. Dr. Liggesmeyer, 1 Software Engineering: Dependability Prof. Dr.-Ing. Peter Liggesmeyer.
Datenbanken Einführung.
Vorstellung der Diplomarbeit
Seite 1Maria, Philipp, Herbert Seite 1 Fitnessplaner Ziele: >Fitnessplaner für Onlinebetrieb >Registrierung >individuelle Trainingsplanerstellung.
Objektrelationales Mapping mit JPA
Java: Objektorientierte Programmierung
Java: Grundlagen der Objektorientierung
Inf (21) WS10/11 Ralf-Oliver Mevius Bachelor Informatik (21) Fallstudie Prozessmodellierung ( 21.3)
Anwendungen. © Prof. T. Kudraß, HTWK Leipzig Historie des WWW Grundlage Internet – Entwickelt Ende der 60er Jahre vom US-Militär (ARPA-Net) – Technische.
Das Build-Tool ANT ETIS SS05. ETIS SS05 - Nadine FröhlichANT 2 Gliederung Motivation Build - Datei –Allgemeiner Aufbau –Project –Target –Task –Properties.
XDoclet ETIS SS05.
AspectJ – Eine Aspektorientierte Programmiersprache
Explizite und editierbare Metainformationen für Software Muster.
Projekt Web Engineering
1 Reverse Engineering WS 07 / 08 A. Zündorf. Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University 2 Organisatorisches.
A. Zündorf, SE Group Reverse Engineering K2 1 Übersicht 1.Quelltextanalyse mit regulären Ausdrücken 2.Compilertechniken 3.Prozessanalyse 4.Dynamische Analyse.
A. Zündorf, SE Group Reverse Engineering K2 1 Übersicht 1.Quelltextanalyse mit regulären Ausdrücken 2.Compilertechniken 3.Prozessanalyse 4.Dynamische Analyse.
1 WS 2012 Software-Engineering II Objektorientiertes Testen.
Software-Engineering II
1 WS 2012 Software-Engineering II Analyse- und Entwurfsmuster.
1 WS 2012 Software-Engineering II Versionsverwaltung.
JDBC -Java Database Connectivity-. 15./22. April 2004JDBC2 JDBC.... verbindet Java-Programme mit SQL-basierten Datenbanken.. liefert eine generische SQL-API.
Grundbegriffe DVG Grundbegriffe.
DVG Einführung in Java1 Einführung in JAVA.
JDBC EDV JDBC.
UML Begleitdokumentation des Projekts
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Vorlesung Gestaltung von soziotechnischen Informationssystemen - RequirementsEngineering und Contextual Design- Thomas Herrmann, Lehrstuhl Informations-
Datenmodelle, Datenbanksprachen und Datenbankmanagementsysteme
... und alles was dazugehört
Simulation komplexer technischer Anlagen
Spezifikation von Anforderungen
Erweiterung von EMF Refactor um Update Funktionalität in grafischen Editoren Thorsten Arendt, AG Taentzer, SWT FoPra-Vorstellung, 19. April 2012.
University of Applied Sciences Übung Objektorientierte Programmierung II Dipl.-Inf. (FH) Markus Vogler.
© ISY Informationssysteme GmbHSeite: 1 ISY-Connect Connect Client (Konfiguration) Das obige Bild zeigt das Fenster von ISY Connect-Client im Konfigurationsmodus.
Einfache Automaten mit Lego Mindstorms praktisch umsetzen
Teil II Objekte ergeben ein Ganzes
Softwaretechnik und Informationssysteme (Gebiet und Modul II.1.1, Module III.1.x) Dozenten der Softwaretechnik.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 1 Folie 2 Microsoft.NET Framework: Quelle:
XML-Query. Übersicht Was ist XML-Query? Vergleich RDB XML-Dokument Syntaktisches und Use-Cases Kritik und Diskussion.
Software-Technik „Zielorientierte Bereitstellung und systematische Verwendung von Prinzipien, Methoden und Werkzeugen für die arbeitsteilige, ingenieurmäßige.
Innovator Die Komponenten.
Objektorientiertes Konstruieren
Projektmanagement Ziel und Umfang eines Softwareprojektes definieren
Eclipse-Entwicklungsumgebung
Wilfried Imrich CuP - Java Erste Vorlesung Entspricht ungefähr Kapitel 1.1 des Skriptums Wilfried Imrich Montanuniversität Leoben Freitag, 4. Oktober 2002.
Vorlesung Datenbanksysteme WS 2.0 Christoph Koch (Subject: DBVO:...
Dedizierte Systeme Typo3 Installation Dedizierte Systeme – Typo3 Installation – Christoph Stollwerk IT Zertifikat der Philosophischen Fakultät WS 2008/2009.
Programmierung von Agenten in Java: Implementierung einer Supply-Chain
1 Copyright 2005 SCADA SOFT AG WizCAD Version 1.0 Produkte Übersicht Christoph Vogelsanger.
Javelin Internet-based parallel computing using Java.
Programmiervorkurs WS 2014/15 Methoden
Programmiervorkurs WS 2014/15 Schleifen
Software Engineering Grundlagen
1 Strukturierung von Situationen (Strukturierung als Lernkomponente) Thomas Höpfel Seminar für Rechtstheorie und Rechtsinformatik WS 2004/05.
Software Engineering Strukturierte Analyse
TypoScript.
Einführung in die Programmierung mit Java
Institut für Kartographie und Geoinformation Prof. Dr. L. Plümer, Dipl.-Ing. D. Dörschlag, Dr. G. Gröger Einführung in die Programmierung mit Java 13.
Trigger-abhängige Client Interaktionen (bezüglich Oracle8i)
Objektorientierte (OO) Programmierung
Technische Universität München, Informatik XI Angewandte Informatik / Kooperative Systeme Verteilte Anwendungen: Entwurf Dr. Wolfgang Wörndl
Vortrag Einführung in AspectJ. Gliederung 1 Einleitung 2 Querschnittsfunktionalitäten in AspectJ 2.1 Sprachelemente 3 Beispiel 4 Join Point Modell 5 Weaving.
Einführung in die Aspektorientierte Programmierung Seminarbetreuung: PD Wolfram Amme Bearbeitung: Martin Boehmer.
 Präsentation transkript:

1 WS 2012 Software-Engineering II Aspektorientierung

2 WS 2012 Themenübersicht »Objektorientierung »Aspektorientierung »Vorgehensmodelle »UML »Analyse- & Entwurfsmuster »Objektorientiertes Testen »Versionsverwaltung »Refactoring »Labor (Praktischer Teil)

3 WS 2012 Aspektorientierung Projektdokumentation:

4 WS 2012 Aspektorientierung »Programmierparadigma (Prinzip) »Erweiterung der herkömmlichen (objektorientierten) Programmierung »Hilft dabei, Anwendungen strukturierter aufzubauen

5 WS 2012 Grundproblem »Man kann die generellen Aufgaben, die Applikationen erfüllen müssen in zwei bereiche Aufteilen »Core-Level-Concerns: Erfüllen die funktionalen Anforderungen der Software (Berechnungen, …) »System-Level-Concers: Erfüllen die technischen Randbedingungen der Software (Logging, …) »Diese zwei Ebenen sind in Software- Systemen fast immer sehr eng verwoben »Cross-Cutting-Concerns »Bei der Programmierung sollte es stets das Ziel sein, Methoden möglichst einfach und für einen dedizierten Zweck zu schreiben »Vermeidung von Cross-Cutting-Concerns

6 WS 2012 Die Idee des Aspekts »Durch die Definition eines Aspektes ist es möglich, Code bei bestimmten Ereignissen auszuführen »Beispiel: Immer vor dem Ausführen der Methode setName soll ein Text auf der Kommandozeile ausgegeben werden »Mimimierung der Vermischung von System-Level-Concerns und Core- Level-Concerns in Methoden

7 WS 2012 Beispiel: SQL-Statement »Applikation führt Datenbank-Abfragen aus »Alle SQL-Queries müssen vor und nach dem Ausführen in ein Log-File eingetragen werden => Fehleranalyse und Benchmarking void execute( String query ) { Logger.Log( START + new Date() + : + query ); myDBMS.connect(…); myDBMS.execute(query); myDBMS.disconnect(…); Logger.Log( END + new Date() + : + query ); } ====8<====8<====8<====8<====8<====8<====8<====8<====8<====8<====8<====8<==== START Jan 01 12:00:00 CEST 2007: SELECT `password` FROM `user` WHERE `status` = secret; END Jan 01 12:00:01 CEST 2007: SELECT `password` FROM `user` WHERE `status` = secret; START Jan 01 12:00:01 CEST 2007: UPDATE `user` SET `password` = hijacked; END Jan 01 12:00:29 CEST 2007: UPDATE `user` SET `password` = hijacked; ====8<====8<====8<====8<====8<====8<====8<====8<====8<====8<====8<====8<==== System- Level- Concerns

8 WS 2012 Werkzeuge »Für Java: AspectJ »Java hat Aspekte nicht als Feature in die Programmiersprache implementiert => Keine native Unterstützung »Durch sogenanntes weaving wird der Aspekt-Code in die Class-Dateien, die durch die Aspekte betroffen sind, eingesetzt (eingewoben) »AspectJ führt dies beim Compilieren der Code-Dateien durch

9 WS 2012 Download »AOP-Library: »Mit Eclipse-Integration: Voraussetzung: Passende Version von Eclipse mit PDE (Plugin Development Environment) ->

10 WS 2012 Neues AspectJ-Projekt

11 WS 2012 Neue Klasse sayHello-Methode Console-Output

12 WS 2012 Aspekt anlegen I Neuen Aspekt anlegen

13 WS 2012 Aspekt anlegen II Aspekt- definition

14 WS 2012 Methodenaufruf überwachen [advice]: call( [return] [class].[method]([signature]) { [action] } »[advice]: Definiert den Zeitpunkt der Überwachung »before(): Vor dem Methodenaufruf »after(): Nach dem Methodenaufruf (unabh. vom Ausgang) »after() throwing: Wenn die Methode mit einer Exception geendet ist »after() returning: Wenn die Methode regulär beendet wurde »[return]: Der Rückgabetyp der Methode, auf den der Aspekt angewandt werden soll »[class]: Der Name der Klasse, deren Methoden überwacht werden sollen »[method]: Der Name der Methode der zu überwachenden Methode »[signature]: Die Methodensignatur der zu überwachenden Methode »[action]: Java-Code, der im Eventfall ausgeführt werden soll Im Bsp.: before(): call( void HelloStudent.sayHello() ) { System.out.println( "=== Saying hello ===" ); }

15 WS 2012 Wildcards [advice]: call( [return] [class].[method]([signature]) { [action] } »Es ist an den meisten Stellen einer Aspekt-Definition erlaubt Wildcards (mit * gekennzeichnet) an Stelle von konkreten Angaben zu verwenden before(): call( * *.*() ) { System.out.println( "=== Calling any method ===" ); } Auch partielle Wildcards sind erlaubt: before(): call( * Hello*.say*() ) { System.out.println( "=== Calling a special method ===" ); } Wildcards für die Methodensignatur:.. before(): call( * Hello*.say*(.. ) ) { System.out.println( "=== Calling a special method with any parameters ===" ); }

16 WS 2012 Angewandt »Werden der konkrete und der Wildcard- Aspekt zusammen auf das Beispiel angewandt, ergibt sich folgendes Ergebnis: === Saying hello === === Calling any method === Hello Student. before(): call( void HelloStudent.sayHello() ) { System.out.println( "=== Saying hello ===" ); } before(): call( * *.*() ) { System.out.println( "=== Calling any method ===" ); }

17 WS 2012 Pointcuts »Um sich die eventuell öfters wiederkehrende Filter- Defintionen sparen zu können, wurden Pointcuts eingeführt »Ein Pointcut spezifiert eine Filter-Definition (auch Join Point genannt) wie sie schon zuvor verwendet wurden pointcut specialMethod(): call( void HelloStudent.sayHello() ); »Dieses Pointcut kann dann durch ein advice angewandt werden: before(): specialMethod() { System.out.println( "=== Saying hello ===" ); }

18 WS 2012 Parameter »Für viele Anwendungen ist es sicherlich relevant, welche Parameter bei dem Methodenaufruf übergeben wurden »Dies lässt sich über die Primitive args herausfinden pointcut benotung( float note ): call( void DHStudent.setNote( float ) ) && args( note ); Die Primitive args fängt dabei die Methoden-Argumente ab und speichert sie in der definierten Variable note. Diese muss sowohl in den Klammern von args(…) als auch in der Bezeichnung des Pointcut definiert sein. Angewandt werden kann dieses Pointcut folgendermaßen: after( float note ) returning: benotung( note ) { System.out.println("Benotet " + note); }

19 WS 2012 Das aufgerufene Objekt »So wie es möglich ist, die Parameter des Aufrufs zu erlangen, ist es auch möglich, herauszufinden, auf welches Objekt der Methodenaufruf stattfand pointcut benotung( DHStudent student ): call( void DHStudent.setNote( float ) ) && target( student ); Wie bei den Parametern kann später auf die Instanz von DHStudent zugegriffen werden: after( DHStudent student ) returning: benotung( student ) { System.out.println( "Student " + student + " wurde benotet." ); }

20 WS »Alternativ ist es möglich, Aspekte in herkömmlichen Java-Klassen mithilfe von Annotations zu definieren »Pointcut-Definition steht im Annotation-Value »Dabei sollte man Annotations in separaten Packages public class StudentAspect DHStudent.setNote(float)) && target(student)") public void beforeSetNote(DHStudent student) { System.out.println("Student " + student + " wurde benotet. "); }

21 WS 2012 Anwendung im BA-Umfeld public aspect Benotung { pointcut benotung( DHStudent student, float note ): call( void DHStudent.setNote( float ) ) && args( note ) && target( student ); after( DHStudent student, float note ) returning: benotung( student, note ) { Studiengangsleiter.getInstance().NotifyBenotung( student, note ); } Beachte: Ohne das Ändern des Codes von BADozent oder BAStudent war es möglich, den Studiengangsleiter über eine Notengebung zu informieren!

22 WS 2012 Anwendung im BA-Umfeld public aspect Benotung { pointcut benotung( DHStudent student, float note ): call( void DHStudent.setNote( float ) ) && args( note ) && target( student ); after( DHStudent student, float note ) returning: benotung( student, note ) { Studiengangsleiter.getInstance().NotifyBenotung( student, note ); } public class Studiengangsleiter { private static Studiengangsleiter sl = null; public static Studiengangsleiter getInstance() { if( Studiengangsleiter.sl == null ) { Studiengangsleiter.sl = new Studiengangsleiter(); } return Studiengangsleiter.sl; } public void NotifyBenotung( DHStudent student, float note ) { System.out.println( "Habe Note " + note + " für Student " + student + " notiert." ); } Singleton Design-Pattern