Aspektorientierte Modellierung Softwaretechnik-Seminar 2002 Thema: Evolutionäre Software Referent: Alexander Winter
Gliederung Einführung und Motivation Was ist Aspektorientierte Modellierung? Vorstellung und Vergleich zweier Ansätze der Aspektorientierten Modellierung Zusammenfassung und Ausblick 25.07.2002 SWT-Seminar SS 2002 2
Einführung Anforderung der Industrie an Softwareprodukte (Open-/closed-principle): Software soll in sich konsistent sein Software soll offen genug für Änderungen sein Sinn und Zweck der OO-Modellierung: Unterstützung des Entwicklungsprozesses zur Erfüllung der Anforderungen Richtlinien (z.b. RUP oder ROPES) und Erfahrungswerte sorgen für zielgerichtetes Vorgehen in bezug auf die Anforderungen 25.07.2002 SWT-Seminar SS 2002 3
Erweiterung des Fallbeispiels Einführung neuer Funktionalität im DDS: Simples Logging wird erweitert Funktionsweise: Client und Server führen ein Log über auftretende Ereignisse in einem Puffer Bei entsprechendem Füllstand: Schreiben des Logs in eine Datei 25.07.2002 SWT-Seminar SS 2002 4
Klassenmodell: Ursprüngliches DDS dialer.net.server +isregistered:boolean +register: void dialer.server.dialer +dial: boolean +hangup: boolean dialer.server.dialoutserver +dial: void +hangup: void +isdialed: boolean 25.07.2002 SWT-Seminar SS 2002 5
Klassenmodell: Ursprüngliches DDS dialer.net.client _connector +isregistered:boolean +register: void dialer.server.buttondialer +cmdexit:void +cmdserverdial:void +showmessage:void dialer.client.dialoutclient +dial: void +hangup: void +hasdialed: boolean 25.07.2002 SWT-Seminar SS 2002 6
Erweiterung des Loggings (I) <<interface>> Logger int buffersize +logevent(event, result) +writelog(file) ClientLogger ServerLogger <<uses>> <<uses>> dialer.client.dialoutclient +dial: void +hangup: void +hasdialed: boolean dialer.client.dialoutserver +dial: void +hangup: void +isdialed: boolean 25.07.2002 SWT-Seminar SS 2002 7
Nachteile des Modells Wenig Flexibilität gegenüber Änderungen, unter Umständen Verlust des Interfaces Das Klassenmodell reicht als Illustration des Vorgangs nicht aus Folge: wechselseitige Abhängigkeit verschiedener Modelle (Sequence Diagrams, Klassenmodell,) Fehlende Ausdruckskraft von UML (beispielsweise bei Sequence Diagrams) 25.07.2002 SWT-Seminar SS 2002 8
Ablauf des Loggings 25.07.2002 SWT-Seminar SS 2002 9
Ablauf des Loggings (II) 25.07.2002 SWT-Seminar SS 2002 10
Was ist Aspektorientierte Modellierung? Idee: Eigenschaften, die sich über mehrere Klassen verteilen, sollen im UML-Modell an einer Stelle konzentriert werden Angaben der Stellen, an denen diese Eigenschaft eine Rolle spielt, muß möglich sein Transformation des Modells in ein OO-Modell sollte existieren 25.07.2002 SWT-Seminar SS 2002 11
Was ist ein Aspekt? Nach Kiczales/Lamping: Eine Eigenschaft ist eine Komponente, sofern sie sauber in einer allgemeinen Prozedur (Objekt, Methode, API) gekapselt werden kann Ein Aspekt, sofern dies nicht der Fall ist (Crosscutting) Beispiele für Komponenten: GUI Widgets, Image Filter, Bankkonten,... Beispiele für Aspekte: Synchronisation, Geschwindigkeit, Speicherbedarf 25.07.2002 SWT-Seminar SS 2002 12
Aktueller Stand der AOM Bisher noch keine festgelegter Standard auf Modellierungsebene, sondern mehrere Ansätze Existierende Tools der AOP (LAC, AspectJ) vereinfachen die Umsetzung eines Modells in eine Implementation Vorstellung zweier Alternativen am Fallbeispiel: Erweiterung der Klassensemantik (Pawlak, Duchien, Florin, Legond-Aubry, Seinturier, Martelli) UML for Aspects (UFA, Stephan Herrmann) : Erweiterung der Komponenten-Semantik 25.07.2002 SWT-Seminar SS 2002 13
Modell 1: Erweiterung der Klassensemantik Einführung sogenannter Aspektklassen Unterschied zu gewöhnlichen Klassen: Addition von Aspektmethoden Anbindung an andere Klassen durch Pointcut relations Abstraktion von Verteilung und Klassenunterschieden durch neuen Stereotyp <<group>> 25.07.2002 SWT-Seminar SS 2002 14
Erweiterung des Loggings (II) File +attach(string Filename,Handle h:boolean) +open(handle h):boolean +write(handle h, Strimg s):boolean +close(handle h): void <<uses>> <<aspect>> Logging <<pointcut>> 1 Int buffersize 1 <<pointcut>> logevent Event[] buffer logevent?all\ hasdialed 1 <<after >> logevent(<event, <result) 1?ALL\ isdialed dialer.client.dialoutclient +writelog(<file) dialer.client.dialoutserver +dial: boolean +hangup: boolean +hasdialed: boolean +dial: boolean +hangup: boolean +isdialed: boolean 25.07.2002 SWT-Seminar SS 2002 15
Vorteile des Modells Aspekt ist an einer Stelle konzentriert anstatt über das Modell verteilt Pointcuts definieren bereits konkrete Stellen der Einbindung für die Programmumsetzung Weaver sorgt später für die automatisierte Einbindung an den richtigen Stellen => erhebliche Verringerung des Aufwands bei Änderungen des Aspekts/der Komponenten 25.07.2002 SWT-Seminar SS 2002 16
Modell 2 : UFA UML for Aspects Erweiterung von UML um Aspektuelle Komponenten (Aspectual Components) Aspektmodellierung geschieht auf Komponentenebene: Aspekt wird als abstrakte Komponente dargestellt Basiskomponenten werden adaptiert Anbindung des (allgemeinen) Aspekts geschieht durch einen Connector 25.07.2002 SWT-Seminar SS 2002 17
Erweiterung des Loggings (III) Server dialer.net.server +isregistered:boolean +register: void dialer.server.dialer +dial: boolean +hangup: boolean dialer.server.dialoutserver +dial: void +hangup: void +isdialed: boolean 25.07.2002 SWT-Seminar SS 2002 18
Erweiterung des Loggings (IV) Client dialer.net.client _connector +isregistered:boolean +register: void dialer.server.buttondialer +cmdexit:void +cmdserverdial:void +showmessage:void dialer.client.dialoutclient +dial: void +hangup: void +hasdialed: boolean 25.07.2002 SWT-Seminar SS 2002 19
Erweiterung des Loggings (V) {abstract} Observer <<connector>> Logging <<adapt>> Server <<adapt>> Client 25.07.2002 SWT-Seminar SS 2002 20
Erweiterung des Loggings (VI) {abstract} Observer {abstract} Subject +{abstract} attach(observer) +{abstract} detach(observer) +{abstract} notify() <<uses>> {abstract} Observer +{abstract} update() 25.07.2002 SWT-Seminar SS 2002 21
Erweiterung des Loggings (VI) <<connector>> Logging Server DataObserver File Server +attach... Subject = DialoutServer EventObserver <<adapts>> Dialer DialoutServer 25.07.2002 SWT-Seminar SS 2002 22
Erweiterung des Loggings (VII) << connector >> Logging DataObserver int buffersize Event[] buffer +update <<uses>> Subject = DialoutServer +attach <- after {start} +detach <- after {stop} +notify <- after {dial, hangup, } <<uses>> <<uses>> EventObserver int buffersize Event[] buffer +update File +attach(string f, Handle h) +open(handle h) +write(handle h, String s) <<uses>> initlogging (boolean events, boolean data) 25.07.2002 SWT-Seminar SS 2002 23
Vorteile von UFA Das Modell bietet alle Vorteile des ersten Modells Zusätzlich lassen sich Dynamic Connectors modellieren Da ein Aspekt als Komponente modelliert wird, läßt er sich ebenfalls adaptieren => Aufhebung der strikten Trennung von Aspekt und Komponente 25.07.2002 SWT-Seminar SS 2002 24
Vergleich beider Modelle: Aspektklassenmodell Aspektklassenmodell leicht erweiterbar durch Klassenmechanismen wie Vererbung Unterstützung der Implementation durch AspectJ Aufteilung und Übersicht größerer Modelle problematisch Dokumentationswert ohne zusätzliche Anmerkungen nach längerer Zeit geringer 25.07.2002 SWT-Seminar SS 2002 25
Vergleich beider Modelle: UFA UFA-Modell ebenfalls leicht erweiterbar durch Spezialisierung von Komponenten Unterstützung der Implementation durch LAC Gute Übersicht durch Wahl verschiedener Detailgrade möglich Umfassender als das Aspektklassenmodell, allerdings ist ein größerer Kontext für das Verständnis des Zusammenhangs notwendig 25.07.2002 SWT-Seminar SS 2002 26
Zusammenfassung Zur Zeit existieren mehrere verschiedene Ansätze Modellierungsidee hilfreich bei evolutionärer Software Bisheriger Stand: Toolunterstützung zur Modellierung fehlt Fehlender Ansatz zur Einbindung zweier Aspekte in eine Basisklasse Nutzen eines Modells zur Visualisierung der AOP hat sich bestätigt 25.07.2002 SWT-Seminar SS 2002 27
Offene Fragen Ist der Ansatz auch in größeren Projekten praxistauglich? Es fehlen umfassendere Modelle, an denen eine Konsistenz verschiedener Ansätze geprüft werden kann Konzepte aus der OO-Modellierung müssen noch entwickelt werden: Wann ist ein Modell gut? Methoden zum Reengineering oder zum Testen Aspektorientierter Programme fehlen völlig 25.07.2002 SWT-Seminar SS 2002 28
Quellen [1] Jan Wloka, Stephan Hermann: Systembeispiel eines DDS [2] G. Kiczales, J. Lamping, A.Mendhekar, C. Maeda, C. Videira, J. Irwin, J.-M. Longetier: Aspect-oriented Programming, 1997. [3] R. Pawlak, L. Duchien, G. Florin, F. Legond-Aubry, L. Seinturier, L. Martelli: A UML-Notation for Aspect-oriented Design. AOSD, 2002. [4] Stephan Herrmann: Composable Designs with UFA, 2002. 25.07.2002 SWT-Seminar SS 2002 29