INSTITUT F¨UR INFORMATIK Automatisierte Modell-Co-Evolution ...
INSTITUT F¨UR INFORMATIK Automatisierte Modell-Co-Evolution ...
INSTITUT F¨UR INFORMATIK Automatisierte Modell-Co-Evolution ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>INSTITUT</strong> FÜR <strong>INFORMATIK</strong><br />
DER LUDWIG–MAXIMILIANS–UNIVERSITÄT MÜNCHEN<br />
Diplomarbeit<br />
<strong>Automatisierte</strong><br />
<strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />
bei der modellgetriebenen<br />
Entwicklung<br />
von<br />
Rich Internet Applications<br />
Olena Ivanyushyna
<strong>INSTITUT</strong> FÜR <strong>INFORMATIK</strong><br />
DER LUDWIG–MAXIMILIANS–UNIVERSITÄT MÜNCHEN<br />
Diplomarbeit<br />
<strong>Automatisierte</strong><br />
<strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />
bei der modellgetriebenen<br />
Entwicklung<br />
von<br />
Rich Internet Applications<br />
Olena Ivanyushyna<br />
Aufgabensteller: Prof. Dr. Martin Wirsing<br />
Betreuer: Dr. Nora Koch<br />
Abgabetermin: 31. Mai 2012
Hiermit versichere ich, dass ich die vorliegende Diplomarbeit selbständig verfasst und<br />
keine anderen als die angegebenen Quellen und Hilfsmittel verwendet habe.<br />
München, den 30. März 2012<br />
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .<br />
(Unterschrift der Kandidatin)
Abstract<br />
Die Rich Internet Applications(RIAs) bilden eine neue Art der Webanwendungen, welche die<br />
Grenzen der traditionellen Web Anwendungen sehr stark erweitern. Die Reichhaltigkeit der<br />
graphischen Schnittstelle und die Anwenderfreundlichkeit sind aus dem heutigen Internet<br />
nicht mehr weg zu denken. Die RIAs bieten eine Vielzahl von Vorteilen der herkömmlichen<br />
Webanwendungen und der Desktop-Anwendungen, werden mit fortgeschrittenen Webtechnologien<br />
umgesetzt und verfügen über eine Vielfalt von benutzerfreundlichen interaktiven<br />
Möglichkeiten.<br />
Mit der UML-based Web Engineering (UWE) Methodologie 1 kann man bereits RIAs modellieren.<br />
Für die <strong>Modell</strong>ierung wird ein UWE-Profil als leichtgewichtiger Erweiterungsmechanismus<br />
des UML Metamodells eingesetzt. Am UWE-Profil wurden in den letzten Jahren<br />
viele Änderungen vorgenommen. Neue Elemente, die RIA-spezifisch sind, wurden zum Profil<br />
hinzugefügt; eine Einbettung der Design Patterns wurde erarbeitet; die Sicherheitsaspekte<br />
wurden in das UWE-Profil integriert. Die <strong>Evolution</strong> des UWE-Profils brachte die Notwendigkeit<br />
der Anpassung der bereits existierenden UWE-<strong>Modell</strong>e mit sich, um ihre Konformität<br />
mit dem neuen, weiterentwickelten UWE-Profil herzustellen. Solche Anpassung wird <strong>Modell</strong>-<br />
<strong>Co</strong>-<strong>Evolution</strong> genannt. Die <strong>Modell</strong>e stehen im Fokus der modellgetriebenen Entwicklung,<br />
somit spielt die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> eine gravierende Rolle. Auf diesem Gebiet der modellgetriebenen<br />
Entwicklung wird aktuell sehr intensiv geforscht und nach Lösungsansätzen für<br />
die <strong>Co</strong>-<strong>Evolution</strong>-Problematik gesucht.<br />
Die vorliegende Arbeit stellt Vorschläge für die Umsetzung der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> vor. Diese<br />
Vorschläge garantieren die Herstellung der Konsistenz der existierenden UWE-<strong>Modell</strong>e. Es<br />
wird aus der Metamodell-<strong>Evolution</strong> die benötigte <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> abgeleitet. Durch eine<br />
Automatisierung dieses Prozesses ist die Eindeutigkeit der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>-Strategie<br />
gewährleistet. Über die Problematik des Automatisierungsgrades der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>-<br />
Anpassungsschritte für unterschiedliche Metamodelländerungstypen wird im Rahmen dieser<br />
Arbeit ausführlich diskutiert.<br />
Ein transformativer Ansatz zur automatisierten <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> der UWE-<strong>Modell</strong>e<br />
wurde erarbeitet. Eine Erweiterung des Eclipse-basierten <strong>Modell</strong>ierungswerkzeug Topcased<br />
(Toolkit in OPen source for Critical Applications & SystEms Development) durch das Plugin<br />
UWEclipse stellt eine Plattform für die <strong>Modell</strong>ierung von RIAs bereit. Der in dieser Arbeit<br />
umgesetzte transformative Ansatz wird später im Rahmen des UWEclipse integriert.<br />
1 http://uwe.pst.ifi.lmu.de<br />
vii
Inhaltsverzeichnis<br />
1 Einleitung 1<br />
1.1 Problemstellung der Arbeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2<br />
1.2 Lösungsansatz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />
1.3 Gliederung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3<br />
2 Grundlagen und verwendeten Technologien 5<br />
2.1 Rich Internet Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5<br />
2.2 Model Driven Architecture (MDA) . . . . . . . . . . . . . . . . . . . . . . . . 6<br />
2.2.1 Ziele der MDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />
2.2.2 Metamodell der Grundbegriffe der MDA . . . . . . . . . . . . . . . . . 7<br />
2.2.3 Durch MDA spezifizierte <strong>Modell</strong>e . . . . . . . . . . . . . . . . . . . . . 9<br />
2.3 Die <strong>Modell</strong>ierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />
2.3.1 Die Unified Modeling Language (UML). UML Profile . . . . . . . . . 10<br />
2.3.2 Die Meta <strong>Modell</strong>ierung und die Meta Object Facility (MOF) . . . . . 11<br />
2.3.3 Die Object <strong>Co</strong>nstraint Language (OCL) . . . . . . . . . . . . . . . . . 12<br />
2.4 Die Query View Transformations (QVT) . . . . . . . . . . . . . . . . . . . . . 13<br />
2.5 Das Eclipse Modeling Framework (EMF) . . . . . . . . . . . . . . . . . . . . 13<br />
2.5.1 Metamodellierung mit Ecore Tools . . . . . . . . . . . . . . . . . . . . 14<br />
2.5.2 Die Eclipse UML2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />
2.6 Die UWE Methodologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />
2.6.1 UWE Metamodell und UWE Profil . . . . . . . . . . . . . . . . . . . . 15<br />
2.6.2 Die Separation of <strong>Co</strong>ncerns . . . . . . . . . . . . . . . . . . . . . . . . 15<br />
2.6.3 MagicUWE - UWE Plug-in für MagicDraw . . . . . . . . . . . . . . . 15<br />
3 Die <strong>Modell</strong>evolution und die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> 17<br />
3.1 Was bringt die <strong>Modell</strong>-<strong>Evolution</strong> mit sich . . . . . . . . . . . . . . . . . . . . 18<br />
3.1.1 Die Relationstypen zwischen dem Metamodell und den <strong>Modell</strong>ierungsartefakten<br />
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />
3.2 Die Klassifizierung der Metamodelländerungen . . . . . . . . . . . . . . . . . 20<br />
3.2.1 Illustratives Beispiel für Metamodell-<strong>Evolution</strong> . . . . . . . . . . . . . 20<br />
3.2.2 Die additiven Änderungen eines Metamodells . . . . . . . . . . . . . . 23<br />
3.2.3 Die subtraktiven Änderungen eines Metamodells . . . . . . . . . . . . 24<br />
3.2.4 Die Updates an einem Metamodell . . . . . . . . . . . . . . . . . . . . 25<br />
3.2.5 Die Klassifizierung von Metamodelländerungen anhand der korrupten<br />
bzw. der non-korrupten Effekte auf existierende <strong>Modell</strong>e . . . . . . . . 25<br />
3.3 Die Transformation-<strong>Co</strong>-<strong>Evolution</strong> . . . . . . . . . . . . . . . . . . . . . . . . . 26<br />
3.4 <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> der UWE-Präsentationsmodelle . . . . . . . . . . . . . . 27<br />
viii
Inhaltsverzeichnis<br />
3.4.1 Die Metamodelldifferenzen zwischen UWE-Metamodellversion 1.7 und<br />
der Version 1.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27<br />
3.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />
4 <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz 33<br />
4.1 Der fundamentale Aufbau von Transformationsskript in der relationalen QVT-<br />
Sprache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33<br />
4.2 Die relationalen Transformationen. Eine Formale Darstellung der Konzepte . 36<br />
4.2.1 Die Transformationen . . . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />
4.2.2 Die Relationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38<br />
4.2.3 Die Domänen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />
4.2.4 Die when- und where-Klauseln . . . . . . . . . . . . . . . . . . . . . . 41<br />
4.2.5 Object Template Expressions und Inline-Objekterzeugung . . . . . . . 42<br />
4.3 Transformationen zur automatisierten <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> basierend auf UWE-<br />
Metamodellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45<br />
4.3.1 Signatur der Transformation . . . . . . . . . . . . . . . . . . . . . . . 45<br />
4.3.2 Die Identifizierung der Relationen . . . . . . . . . . . . . . . . . . . . 45<br />
4.3.3 Die Relation für das Paket . . . . . . . . . . . . . . . . . . . . . . . . 48<br />
4.3.4 Die Relationen für die PresentationClass und deren Subklassen . . . . 49<br />
4.3.5 Die Relationen für einfache UI-Elemente . . . . . . . . . . . . . . . . . 52<br />
4.3.6 Die Relation mapForm . . . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />
4.3.7 Die Relation mapAnchored<strong>Co</strong>l . . . . . . . . . . . . . . . . . . . . . . 55<br />
4.3.8 Die Relation mapProperty . . . . . . . . . . . . . . . . . . . . . . . . . 56<br />
4.4 Die Durchführung der Transformationen mit dem mediniQVT-Tool . . . . . . 57<br />
4.5 Ein Beispiel für metamodellbasierte <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> . . . . . . . . . . . 59<br />
4.5.1 Die Durchführung der Transformation an dem Adressbuch-<strong>Modell</strong> . . 59<br />
4.5.2 Die Konfiguration einer Transformation in mediniQVT . . . . . . . . . 61<br />
4.6 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62<br />
5 Integration des UWE-Profil-basierten transformativen Ansatzes in die UWE<br />
Toolumgebung 63<br />
5.1 Anpassung der metamodellbasierten Transformation für UWE-<strong>Modell</strong>e . . . . 63<br />
5.1.1 Der Zugriff auf die angewendeten UWE-Stereotypen . . . . . . . . . . 64<br />
5.1.2 Die neu angepasste Transformation . . . . . . . . . . . . . . . . . . . . 65<br />
5.1.3 Die Relation für die PresentationClass . . . . . . . . . . . . . . . . . . 68<br />
5.2 Wahl der Toolumgebung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71<br />
5.3 Die Anforderungsanalyse für die Integration des transformativen Ansatzes . . 73<br />
5.3.1 Die funktionalen Anforderungen . . . . . . . . . . . . . . . . . . . . . 73<br />
5.3.2 Die nicht-funktionalen Anforderungen . . . . . . . . . . . . . . . . . . 74<br />
5.4 Die Anwendungsfälle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76<br />
5.4.1 Das UseCase ” Die Transformation für ein <strong>Modell</strong> durchführen“ . . . . 76<br />
5.4.2 Das UseCase ” Die <strong>Modell</strong>differenzen anzeigen lassen“ . . . . . . . . . 77<br />
5.4.3 Das UseCase ” Die Konformität eines <strong>Modell</strong>s zu seinem Metamodell<br />
prüfen“ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77<br />
5.5 Die zusammengesetzte Toolumgebung . . . . . . . . . . . . . . . . . . . . . . 78<br />
5.5.1 Das mediniQVT-Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . 78<br />
5.5.2 Das EMF-<strong>Co</strong>mpare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80<br />
ix
Inhaltsverzeichnis<br />
5.6 Beispiel der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> für UWE-<strong>Modell</strong>e mit angewendetem UWE-<br />
Profil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83<br />
6 Die Zusammenfassung und der Ausblick 87<br />
6.1 Die Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87<br />
6.2 Der Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88<br />
A Darstellung der Metamodelle 91<br />
A.1 Erstellung von Metamodellen in Ecore-Format . . . . . . . . . . . . . . . . . 92<br />
A.2 Ein Generator-<strong>Modell</strong> aus Ecore-<strong>Modell</strong>en erstellen . . . . . . . . . . . . . . . 96<br />
A.3 Erstellung der Metamodelle in Form von Eclipse-Plug-ins . . . . . . . . . . . 98<br />
A.4 Das Deployment der Metamodell-Eclipse-Plug-ins . . . . . . . . . . . . . . . . 99<br />
A.5 <strong>Modell</strong>e basierend auf Metamodellen erstellen . . . . . . . . . . . . . . . . . . 101<br />
B Transformationsskript mapUWEversion 103<br />
Abbildungsverzeichnis 112<br />
Tabellenverzeichnis 113<br />
Listings 115<br />
Liste der Definitionen 117<br />
Literaturverzeichnis 119<br />
x
1. Einleitung<br />
So vielfältig die Einsatzbereiche für Rich Internet Applications sind, so umfangreich sind<br />
die Möglichkeiten, RIAs zu implementieren. Inzwischen gibt es bereits eine ganze Reihe von<br />
Technologien, Frameworks und konkreter Techniken, die genutzt werden können, um RIAs zu<br />
erstellen. Die rasante Entwicklung dieser Techniken bewirkt, dass immer neue User-Interface-<br />
Elemente und Interaktionsmöglichkeiten für den Benutzer bei der Entwicklung der RIAs zur<br />
Hilfe stehen.<br />
Im Bereich der modelgetriebenen Webentwicklung dagegen entwickeln sich erst seit kurzem<br />
faszinierende Forschungsgebiete und neue methodologische Ansätze zur modelgetriebenen<br />
Entwicklung von Rich Internet Applications, die sich zu einem großen Teil noch in frühen<br />
Entwicklungsphasen befinden. Hier werden derzeit aktiv die <strong>Modell</strong>ierungstechniken und<br />
Tools für die <strong>Modell</strong>ierung von Rich Internet Applications erweitert und angepasst. Es werden<br />
immer neue Erkenntnisse auf dem Fachgebiet der RIAs gemacht, so dass interessante<br />
Forschungsteilgebiete entstehen, die sich z.B. auf die Adaptivität der RIAs oder auf die<br />
neue Sicherheitsaspekte der RIAs beziehen oder die Integration der Anforderungsanalyse<br />
in den Entwurf erlauben. Es entstehen RIA-spezifische ” design pattern“, welche die ” best<br />
practices“ Lösungen für den Entwurf von RIAs wiedergeben und in die Metamodelle für die<br />
<strong>Modell</strong>ierung integriert werden können.<br />
Die Erarbeitung solcher <strong>Modell</strong>ierungstechniken soll mit der Entwicklung des Fachgebietes,<br />
als auch mit dem technischen Fortschritt mithalten können. Diese Tatsache bewirkt, dass<br />
für die <strong>Modell</strong>ierung eingesetzte Metamodelle einem schnell voranschreitenden <strong>Evolution</strong>sprozesses<br />
unterliegen.<br />
Die UML-based Web Engineering (UWE) Methodologie wird kontinuierlich weiterentwickelt.<br />
Die grundlegende Idee von UWE ist das Fachgebiet der Entwicklung von RIAs mithilfe einer<br />
Domain Specific Language (DSL) eindeutig zu beschreiben, um basierend auf dieser DSL<br />
ein UML Profil zu definieren, das auf das Fachgebiet der RIAs zugeschnitten ist. Somit<br />
wird mit Hilfe einer UML Erweiterung in Form dieses Profils die <strong>Modell</strong>ierung von RIAs<br />
mit der weitverbreitesten objektorientierten <strong>Modell</strong>ierungssprache der Welt ermöglicht. Wie<br />
das Fachgebiet ändert sich ebenfalls die UWE Methodologie. Es existiert eine Anzahl an<br />
Versionen des UWE-Profils und des UWE-Metamodells, diese sind wie z.B. die Version 1.7<br />
und die Version 1.8 auf der UWE-Seite 1 zu finden. Die <strong>Evolution</strong> des UWE-Profils erfordert<br />
bei jeder Verabschiedung einer neuen Profilversion die Anpassung der existierenden UWE-<br />
<strong>Modell</strong>e, da Inkonsistenzen wegen des Konformitätsverlustes der existierenden <strong>Modell</strong>e zu<br />
dem neuen Profil entstehen.<br />
1 http://uwe.pst.ifi.lmu.de/publicationsMetamodelAndProfile.html<br />
1
1. Einleitung<br />
1.1. Problemstellung der Arbeit<br />
Im Bereich der modellgetriebenen Webentwicklung besteht eine immer größer werdende Not<br />
an Techniken zur automatisierten <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Die Metamodell-<strong>Evolution</strong> stellt eine<br />
Bedrohung dar für die Anwendbarkeit der modellgetriebenen Entwicklung in Fachgebieten,<br />
die von Veränderungen stark geprägt sind. Zu solchen Fachgebieten zählen die RIAs. Das<br />
Problem wird durch die Inkompatibilitäten zwischen Metamodellversionen verursacht. Dies<br />
bewirkt, dass die <strong>Modell</strong>e, welche mit der älteren Metamodellversion konform gehen, wegen<br />
der Nicht-Konformität zur neueren Version angepasst werden müssen. Eine Annäherung an<br />
die Lösung dieses Problems ist die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> von <strong>Modell</strong>en mit ihrem jeweiligen<br />
Metamodell. Um die unterschiedlichen Deutungen des Begriffes der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> zu<br />
vermeiden, wird an dieser Stelle die Definition dafür eingeführt.<br />
Definition 1. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />
Unter <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> wird eine Anpassung der existierenden <strong>Modell</strong>e<br />
verstanden, die wegen der <strong>Evolution</strong> des zugrundeliegenden Metamodells<br />
durchgeführt werden muss. Die Anpassung bewirkt, dass diese <strong>Modell</strong>e mit<br />
dem neuen geänderten Metamodell konform gehen.<br />
Für die Metamodell-<strong>Evolution</strong> gibt es unterschiedliche Gründe: zum einen können neue<br />
Design-Lösungen für besseres Verständnis der Metamodelle die Metamodelländerungen bewirken.<br />
Zum anderen werden Metamodelle aufgrund der schnellen Entwicklung des Fachgebietes<br />
geändert. Das Hinzufügen der Design Pattern oder der ” best practices“ Lösungen kann<br />
der Metamodell-<strong>Evolution</strong> zugrunde liegen. Deswegen sollten die existierenden <strong>Modell</strong>e an<br />
diese Änderungen angepasst werden ohne dass sie ihre Gültigkeit verlieren. Nach der Metamodelländerung<br />
müssen alle <strong>Modell</strong>e die vor dieser Änderung erstellt wurden, mit angepasst<br />
werden, damit sie zu dem neuen Metamodell konform sind.<br />
Wie die Metamodell-<strong>Evolution</strong> wird die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> üblicherweise manuell durchgeführt.<br />
Dies ist eine sehr fehleranfällige Aufgabe, die zu einer Inkonsistenz zwischen dem<br />
Metamodell und den dazugehörigen <strong>Modell</strong>en führen kann. Die <strong>Modell</strong>ierer und Entwickler<br />
müssen all die betroffenen <strong>Modell</strong>e sorgfältig untersuchen, um mühsam die zu Inkonsistenzen<br />
führenden Elemente zu entdecken und später die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> schrittweise manuell<br />
durchzuführen. Dies ist an sich eine fehleranfällige und ohne Automatisierung ziemlich langweilige,<br />
monotone und vor allem zeitaufwendige Aufgabe. Zusätzliche Schwierigkeit bereitet<br />
die Tatsache, dass keine eindeutige Weise der <strong>Modell</strong>elementenanpassung verfügbar ist. Dies<br />
liegt daran, dass die <strong>Modell</strong>gültigkeit durch verschiedene Migrationsstrategien wieder hergestellt<br />
werden kann, d. h. verschiedene Anpassungen können aus der Metamodell-<strong>Evolution</strong><br />
abgeleitet werden. Dies wiederspricht aufgrund von Mehrdeutigkeit dem Grundprinzip der<br />
formalen <strong>Modell</strong>e. Aufgrund dieser schwerwiegenden Problematik, die bei der Entwicklung<br />
der Rich Internet Applications im Wege steht, muss eine Vorgehensweise für eine automatisierte<br />
<strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> entwickelt werden.<br />
2
1.2. Lösungsansatz<br />
1.2. Lösungsansatz<br />
In erster Linie soll diese Arbeit einen Einblick in die aktuellen Forschungstrends des Gebiets<br />
der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> gewähren. Es soll eine Diskussion über alle möglichen Szenarien für<br />
die Metamodelländerungen und deren Auswirkungen auf die existierenden <strong>Modell</strong>e erfolgen.<br />
Aus entstandenen Szenarien sollen Erkenntnisse erarbeitet werden, welche die Anpassung<br />
der Metamodellinstanzen vorschreiben, welche die Inkonsistenz des <strong>Modell</strong>s in Bezug auf<br />
das neue Metamodell beseitigt. Anhand der Auswirkung der Metamodelländerungen auf die<br />
<strong>Modell</strong>e sollte bestimmt werden, ob eine Automatisierung der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> stattfinden<br />
kann.<br />
Die UWE-Metamodelle in zwei ausgewählten unterschiedlichen Versionen sollen auf Differenzen<br />
überprüft werden. Die erkannten Metamodelländerungen sollen zusammengefasst<br />
werden. Für jede solche Änderung soll die Strategie zur <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> beschrieben<br />
werden. Aus den gewonnenen Erkenntnissen soll ein transformativer <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />
Ansatz für UWE-<strong>Modell</strong>e praktisch umgesetzt werden.<br />
Anschließend soll eine Anforderungsanalyse für die Integrationsmöglichkeiten in die Toolumgebung<br />
der UWE-Methodologie durchgeführt werden. Zu guter Letzt soll ein Integrationsweg<br />
ausgewählt und umgesetzt werden.<br />
1.3. Gliederung<br />
Im Kapitel 2 werden die Grundlagen und die verwendete Technologien erläutert. Innerhalb<br />
dieses Kapitels wird auf die zentralen Begrifflichkeiten dieser Arbeit angegangen. Angefangen<br />
mit der Definition der Rich Internet Applications, den grundlegenden Begriffen aus dem Bereich<br />
der <strong>Modell</strong> Driven Architecture bis hin zu einem Überblick über die aktuellen Ansätze<br />
zur modellgetriebenen Entwicklung von RIAs.<br />
Im Kapitel 3 wird eine Einführung in den Bereich der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> geboten. Es<br />
wird anhand der aktuellen Forschung eine umfassende Diskussion über die Metamodell-<br />
<strong>Evolution</strong> gegeben. Die Metamodelländerungen werden in ihrem vollen Umfang beschrieben<br />
und zu jeder solchen Änderung eine umfangreiche Beschreibung der <strong>Co</strong>-<strong>Evolution</strong>s-Schritte<br />
aufgezeichnet. Darüber hinaus wird eine Typologie der Änderungen in Bezug auf ihre Auswirkungen<br />
auf existierende Metamodellinstanzen vorgestellt. Zwei verschiedenen Versionen<br />
eines UWE-Metamodellausschnittes werden in Bezug auf die durch die UWE-Metamodell-<br />
<strong>Evolution</strong> entstandenen Differenzen untersucht. Eine Strategie wird für eine automatisierte<br />
<strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> für die betrachtete Metamodellversionen vorgeschlagen und detailliert<br />
beschrieben.<br />
Im Kapitel 4 wird diese Strategie mithilfe der <strong>Modell</strong>transformationen umgesetzt. Zuerst<br />
werden die formalen Konzepte der für die Transformationen ausgewählten relationalen QVT-<br />
Sprache beschrieben. Anschließend werden die konkreten Transformationen für die Durchführung<br />
der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> für UWE-Präsentationsmodell vorgestellt.<br />
Nachdem die Machbarkeit der Transformationen in Kapitel 4 illustriert wurde, werden im<br />
darauf anschließenden Kapitel 5 einige Überlegungen zu der Integration des transforma-<br />
3
1. Einleitung<br />
tiven Ansatzes in die UWE-Toolumgebung erläutert, angefangen bei der Diskussion über<br />
die Integrationsmöglichkeiten des transformativen Ansatzes in die UWE-Methodologie, gefolgt<br />
von einer Anwendungsfallanalyse, bis hin zu einem konkreten Integrationsvorschlag.<br />
Der Vorschlag wird für die Integration in das Eclipse-basierte UWEclipse-Tool[22], das eine<br />
Toolumgebung für die <strong>Modell</strong>ierung der UWE-<strong>Modell</strong>e bereitstellt, detailliert beschrieben.<br />
Infolgedessen wird eine Anpassung der in Kapitel 4 vorgestellten <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>-<br />
Transformationen vorgenommen und der Einsatz des EMF<strong>Co</strong>mpare-Tools für die <strong>Modell</strong>differenzenrepräsentation<br />
dargestellt.<br />
Anschließend werden in dem Kapitel die erreichten Ergebnisse resümiert und ein Ausblick<br />
für die Zukunft und die Verbesserungsmöglichkeiten des vorgestellten <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>-<br />
Ansatzes gegeben.<br />
4
2. Grundlagen und verwendeten Technologien<br />
In den folgenden Unterkapiteln werden die Grundlagen der modellgetriebenen Entwicklung<br />
von Rich Internet Applications vorgestellt und die für die vorliegende Arbeit relevante Begriffe<br />
wie ” Rich Internet Application“ und einige weitere Begriffe aus dem Bereich der Model<br />
Driven Architecture (MDA) definiert.<br />
2.1. Rich Internet Applications<br />
In den letzten Jahren hat der neue Begriff der Rich Internet Applications eine weite Verbreitung<br />
gefunden. In unterschiedlichen Quellen wurden die RIAs lange mithilfe deren Eigenschaften<br />
beschrieben. Eine umfassende Definition wurde in der Veröffentlichung ” Rich<br />
Internet Application. State-of-the-Art“[13] vorgeschlagen. Diese Definition wird im Rahmen<br />
dieser Arbeit als Grundbegriff für die RIAs eingeführt.<br />
Definition 2. Rich Internet Applications<br />
” Rich Internet Applications (RIAs) are web applications, which use data that<br />
can be processed both by the server and the client. Furthermore, the data exchange<br />
takes place in an asynchronous way so that the client stays responsive<br />
while continuously recalculating or updating parts of the user interface. On<br />
the client, RIAs provide a similar look-and-feel as desktop applications and<br />
the word rich“ means particularly the difference to the earlier generation of<br />
”<br />
web applications. RIAs are basically characterized by a variety of interactive<br />
operating controls, the possibility of on-/offline use of the application, and<br />
the transparent usage of the client and server computing power and of the<br />
network connection..“[13]<br />
Zu den wichtigsten Eigenschaften von RIAs gehört die asynchrone Kommunikation, wobei<br />
nicht nur ganze Internetseiten übertragen werden, sondern bestimmten Teile der Webseiten<br />
aktualisiert werden. Eine kennzeichnende Eigenschaft der RIAs ist die Reichhaltigkeit und die<br />
Benutzerfreundlichkeit der graphischen Oberfläche, die in nichts den Desktop-Anwendungen<br />
nachsteht.<br />
Die wachsende Verbreitung der RIAs bedingt die neuen Trends im Bereich der modellgetriebenen<br />
Webentwicklung. Neue Techniken und Ansätze, die später zum Teil erläutert werden,<br />
ermöglichen bereits die <strong>Modell</strong>ierung der RIAs.<br />
5
2. Grundlagen und verwendeten Technologien<br />
2.2. Model Driven Architecture (MDA)<br />
Model Driven Architecture (MDA) wurde von der OMG (Object Management Group) im<br />
Jahr 2000 als neues Softwareentwicklungs-Paradigma vorgestellt. Die MDA spezifiziert die<br />
Richtlinien für die Ausführung des modellgetriebenen Prozesses. Die OMG hat eine Reihe<br />
von Standards veröffentlicht, welche die Umsetzung des modellgetriebenen Vorgehens vorantreiben<br />
sollen. Zu diesen Standards gehören unter anderem die UML (Unified Modeling<br />
Language), die MOF(Meta Object Facility), die OCL (Object <strong>Co</strong>nstraint Language), das<br />
XMI (XML Metadata Interchange) und die QVT (Query Views Transformations). Über diese<br />
wird in dem Kapitel 2.3 ein Überblick verschafft.<br />
Die MDA verfolgt das Ziel, die Spezifikation von Software-Systemen unabhängig von ihrer<br />
technischen Realisierung zu ermöglichen. Damit wird die Komplexität bestehender Entwicklungstechnologien<br />
verborgen und eine weitgehend plattformunabhängige <strong>Modell</strong>ierung<br />
erzielt. Der Fokus wird somit auf die Fachlichkeit gelegt. Als Basismodellierungssprache wird<br />
die UML eingesetzt. Die MDA definiert verschiedene Abstraktionsebenen auf denen <strong>Modell</strong>e<br />
spezifiziert werden können. Genaue Erläuterungen zu diesem Thema sind im Kapitel 2.2.3<br />
zu finden.<br />
Der Grundgedanke der MDA besteht darin, den Fokus von der Implementierung auf die<br />
<strong>Modell</strong>ierung zu verlegen. Dabei soll die Überführung der <strong>Modell</strong>e von abstrakten zu plattformabhängigen<br />
<strong>Modell</strong>en, automatisiert unter dem Einsatz von <strong>Modell</strong>transformationen<br />
verlaufen. Somit kann das MDA-Entwicklungsprozess aus mehreren Iterationen bestehen,<br />
wobei bei jeder Iteration eine <strong>Modell</strong>ierungsaktivität von Transformationen gefolgt wird.<br />
Ein weiterer Grundgedanke befasst sich mit der Unterstützung von Domain Specific Languages<br />
(DSL). Laut Gruhn, Pieper und Röttgers wird unter dem Begriff Domäne in diesem<br />
Zusammenhang in dem Buch [10] ganz allgemein ein Wissensbereich bzw. ein Problemraum<br />
verstanden. Somit stellt die DSL ein weiteres Konzept zur Vereinfachung komplexer Sachverhalte<br />
dar. Als Beispiel für eine graphische DSL dient die Entity-Relationship <strong>Modell</strong> für<br />
die Darstellung eines Datenbankschemas für die Domäne der Datenbankrepräsentation dar.<br />
So legt die MDA die Richtlinien für die Erstellung eigener <strong>Modell</strong>ierungssprachen fest, die<br />
auf eine Domäne zugeschnitten sind.[10]<br />
Im nächsten Kapitel werden die Ziele der MDA erläutert.<br />
2.2.1. Ziele der MDA<br />
<strong>Modell</strong>getriebene Entwicklung verfolgt folgende Ziele:[10] [20]<br />
6<br />
• Die Effizienzsteigerung und die Reduzierung des Entwicklungsaufwands:<br />
– Durch Abstraktion<br />
– Durch Automatisierung der Vorgänge mithilfe Werkzeugunterstützung<br />
– Durch Wiederverwendung (Patterns, DSL)<br />
• Die Systemintegration und die Interoperabilität:
2.2. Model Driven Architecture (MDA)<br />
– Durch die Trennung der Fachlichkeit und der Technologie wird die Identifizierung<br />
der Schnittstellen vereinfacht und somit die Austauschbarkeit und die Wiederverwendbarkeit<br />
der Komponenten und so die Modularität der Anwendungen<br />
gewährleistet<br />
• Qualitätsverbesserung:<br />
– Durch den Einsatz der formalen <strong>Modell</strong>e und Transformationen<br />
– Durch eine wohl definierte Architektur<br />
– Durch die Trennung der Fachlichkeit von den technischen Details<br />
– Durch die Konservierung der Fachlichkeit und des Expertenwissens in <strong>Modell</strong>en<br />
• Portabilität:<br />
– Durch eine einfache Migration auf neue Technologien unter Verwendung passenden<br />
Transformationen aus dem PIM (<strong>Co</strong>mputational Independent Model) in das<br />
PSM (Platform Independent Model), wobei die Fachlichkeit erhalten bleibt<br />
• Domänen-Orientierung<br />
– Durch die Spezifikationen einer DSL lassen sich Zusammenhalte schneller beschreiben<br />
– Durch den hohen Grad der Formalisierung<br />
– Durch das hohe Abstraktionsniveaus und eindeutige Semantik<br />
– Durch die Wiederverwendung der erstellten domänenspezifischen <strong>Modell</strong>en<br />
Im Weiteren werden die Begriffe der MDA eingeführt.<br />
2.2.2. Metamodell der Grundbegriffe der MDA<br />
In diesem Kapitel werden die Grunddefinitionen des MDAs dargestellt, die aus dem Buch von<br />
Gruhn, Pieper und Röttgers[10] zitiert werden nach einem Abgleich mit den Definitionen auf<br />
der OMG-Webpräsenz[17]. Die Metamodell der Grundbegriffe der MDA ist in der Abbildung<br />
2.1 zu sehen:<br />
Im Weiteren werden die Definitionen der OMG aufgelistet, wobei auf die Interpretation der<br />
Definitionen laut [10] weitgehend verzichtet wird.<br />
Definition 3. System<br />
” Ein System ist ein aus Teilen zusammengesetztes und strukturiertes Ganzes.<br />
Es hat eine Funktion, erfüllt einen Zweck und verfügt über eine Architektur.“[10]<br />
Definition 4. Model<br />
” Ein <strong>Modell</strong> beschreibt oder spezifiziert ein System zu einem bestimmten<br />
7
2. Grundlagen und verwendeten Technologien<br />
Abbildung 2.1.: Metamodell der Grunddefinitionen der MDA [10]<br />
Zweck. Dazu erfasst es alle hierfür relevanten Aspekte, etwa Struktur, Verhalten,<br />
Funktion und die Umwelt des Systems.“[10]<br />
Definition 5. Metamodell<br />
” Ein Metamodell ist die Menge von Elementen mit denen <strong>Modell</strong>e, die Instanzen<br />
dieses Metamodells sind, erstellt werden können. Es enthält die Regeln,<br />
die bei der Erstellung des <strong>Modell</strong>s beachtet werden müssen (abstrakte<br />
Syntax) sowie die Bedeutung der Elemente und Elementkonstellationen (Semantik).“[10]<br />
Definition 6. Profile<br />
” Ein Profil ist eine leichtgewichtige Erweiterung eines Metamodells. Dazu<br />
stellt es neue <strong>Modell</strong>elemente zur Verfügung oder redefiniert bzw. erweitert die<br />
Semantik oder Syntax bereits bestehender Elemente. Im Gegensatz zur Definition<br />
völlig neuer Metamodelle (schwergewichtiger Ansatz) können sie die Bedingungen,<br />
die an Elemente der <strong>Modell</strong>e gestellt werden, nur verschärfen.“[10]<br />
8
2.2. Model Driven Architecture (MDA)<br />
Definition 7. Domain<br />
” Unter dem Begriff Domäne versteht man ein abgrenzbares, kohärentes Wissensgebiet.<br />
In einem Metamodell (respektive in einem Profil) werden die Konzepte<br />
einer Domäne in Bezug gesetzt und beschrieben. Zusammen mit ihrem<br />
sprachdefinierenden Charakter bezeichnet man Metamodell und Profil daher<br />
als Domänenspezifische Sprache (engl. Domain-Specific Language, DSL).“[10]<br />
Definition 8. Application<br />
” Eine Anwendung oder Applikation (engl. Application) ist ein zu erstellendes<br />
Stück Software, welches die zu entwickelnde Funktionalität umfasst. Ein<br />
System kann sich aus einer oder mehreren Anwendung(en) zusammensetzen,<br />
die auf einer oder mehreren Plattform(en) ausgeführt werden.“[10]<br />
Definition 9. Plattform<br />
” Eine Plattform ist eine Ausführungsumgebung für eine Anwendung. Ihre<br />
Funktionalität stellt sie durch zweckmäßige Schnittstellen bereit, auf die die<br />
Anwendung ohne Kenntnis der eigentlichen Implementierung zugreifen kann.<br />
Typische Beispiele für Plattformen sind im Bereich Betriebssysteme (Unix,<br />
Windows), Programmiersprachen (C++, Java) und Middleware (CORBA,<br />
Java EE, .NET) zu finden. Typisch für Plattformen ist auch, dass sie oft in<br />
der Art eines Plattform-Stacks (dt. in etwa Plattform Stapel) aufeinander<br />
aufsetzen. So bildet die Hardware eines <strong>Co</strong>mputers die unterliegende Plattform<br />
für das Betriebssystem, das seinerseits wieder Plattform für die einzelnen<br />
Anwendungen bietet usw.“[10]<br />
Definition 10. Transformation<br />
” Eine Transformation (oder genauer <strong>Modell</strong>-Transformation) ist der Prozess<br />
der Umwandlung eines <strong>Modell</strong>s in ein anderes <strong>Modell</strong> des gleichen Systems.<br />
Die Spezifikation für eine solche Transformation ist in Abbildungsregeln<br />
(engl. Mapping Rules) festgehalten, die in einer Abbildung (engl. Mapping)<br />
gebündelt sind.“[10]<br />
Im weiteren Verlauf dieser Arbeit werden die oben genannten Begriffe stets im Sinne dieser<br />
Definitionen verwendet. Folgend werden die Abstraktionsebenen, auf denen sich <strong>Modell</strong>e der<br />
MDA befinden können, beschrieben.<br />
2.2.3. Durch MDA spezifizierte <strong>Modell</strong>e<br />
Die MDA spezifiziert folgende Abstraktion für <strong>Modell</strong>e. Die Abstraktion beinhaltet drei Ebenen<br />
in denen sich die Beschreibung des Models mit jeder weiteren Stufe mehr konkretisiert<br />
und verfeinert wird.<br />
9
2. Grundlagen und verwendeten Technologien<br />
In der ersten Ebene des CIMs (<strong>Co</strong>mputation Independent Model) enthält das <strong>Modell</strong> die Beschreibung<br />
der fachlichen Anforderungen mit Begriffen und Konzepten seiner Domäne(womöglich<br />
unter dem Einsatz einer DSL). Wobei das <strong>Modell</strong> unabhängig von Plattform und Programmiersprache<br />
ist.<br />
Auf der nächsten Ebene namens PIM (Platform Independent Model) beschreiben die <strong>Modell</strong>e<br />
die Fachlichkeit, also die Struktur und die Funktionalität der Anwendung. Diese <strong>Modell</strong>e<br />
sind unabhängig von implementierungstechnischen Details.<br />
Schließlich wird auf der dritten Abstraktionsebene das <strong>Modell</strong> mit allen technischen und<br />
implementierungsrelevanten Details angereichert und enthält somit eine plattformspezifische<br />
Umsetzung des PIMs. Hierbei ist zu erwähnen, dass die plattformunabhängigen <strong>Modell</strong>e die<br />
Grundlage für den MDA-Ansatz darstellen. Im Rahmen des Entwicklungsprozesses werden<br />
die in <strong>Modell</strong>en beschriebenen Gegebenheiten mithilfe von Transformationen aus einer Abstraktionsebene,<br />
in die <strong>Modell</strong>e einer anderen Abstraktionsebene überführt. Die OMG hat<br />
hierfür einen weiteren Standard namens ” Queries Views Transformations“ (QVT) veröffentlicht.<br />
[10] [20] [23]<br />
Im folgenden Kapitel werden die von der OMG veröffentlichten Standards näher betrachtet.<br />
2.3. Die <strong>Modell</strong>ierung<br />
Das Ziel dieses Abschnitts ist, einen Einblick in die <strong>Modell</strong>ierungsaspekte bei der modellgetriebenen<br />
Entwicklung zu gewähren und die aktuellen Standards zur Spezifikation der<br />
<strong>Modell</strong>en, die eine wichtige Rolle im Zusammenhang mit MDA spielen, zu erläutern. Nach<br />
einer Beschreibung der Unified Modeling Language wird die Meta Object Facility der OMG<br />
Group vorgestellt. Anschließend wird die Object <strong>Co</strong>nstraint Language beschrieben.<br />
2.3.1. Die Unified Modeling Language (UML). UML Profile<br />
Die <strong>Modell</strong>ierungssprache UML(Unified Modeling Language) zum graphischen Entwurf von<br />
Software hat seit ihrer Erscheinung im Jahr 1997 kontinuierlich an Bedeutung im Bereich<br />
des Objektorientierten Engineerings gewonnen. Martin Fowler äußert sich in seinem Buch<br />
” UML Konzentriert“[9] folgendermaßen dazu aus: UML hat die babylonische Sprachverwir-<br />
”<br />
rung der früheren Notationen aufgelöst“.<br />
Die UML wird unter allen graphischen Notationen de facto eingesetzt, und stellt somit<br />
eine Vereinigung der ” best practices“ und sogar ein Standard in der Softwareentwicklung<br />
dar.[9] Es ist anzumerken, dass in diesem Zusammenhang unter Standard keine Normierung<br />
und Standardisierung wie z.B. ISO gemeint sind. Der Standard ist als die Veröffentlichung<br />
einer Spezifikation durch die Object Management Group (OMG) zu verstehen.<br />
Außerdem repräsentiert die UML die Basismodellierungssprache des MDA. Auf der Web-<br />
Präsenz der OMG findet man eine Sammlung von UML-Spezifikationen namens UML-Stack.<br />
10
2.3. Die <strong>Modell</strong>ierung<br />
Daraus kann man fünf Hauptelemente der UML erkennen.[10] Die fundamentalen Sprachkonstrukte<br />
des UML sind in der Infrastructure Library zusammengefasst, die ein Teil der<br />
UML-Infrastructure bildet. Die UML-Infrastructure legt die Architekturgrundlage der UML-<br />
Spezifikation dar und liefert außerdem ein Meta-Metamodell für die UML-Superstructure.[11]<br />
Alle Metamodelle sind unter dem Einsatz vom MOF (Meta Object Facility) definiert, mehr<br />
zu dem MOF im folgenden Kapitel.<br />
Das UML-Metamodell enthält keine Informationen über die grafische Notation der UML,<br />
sondern definiert nur die logischen, strukturellen Zusammenhänge der UML-Sprachelemente.<br />
Zum Austausch der Metamodelle ist das XMI-Format (XML Metadata Interchange) bereitgestellt.<br />
Die textuelle, auf der mathematischen Grundlage aufbauende Sprache OCL (Object<br />
<strong>Co</strong>nstraint Language) erlaubt die Formulierung von Bedingungen und somit die Validierung<br />
der UML-<strong>Modell</strong>e.<br />
Einer der gewichtigsten Vorteile der UML liegt in ihrer Fähigkeit der Erweiterbarkeit. Die<br />
Spezifikation der UML bietet im Grunde keine Möglichkeit alle fachlichen technischen Problemdomänen<br />
adäquat abzubilden. Unter einer Domäne wird in diesem Zusammenhang ganz<br />
generell ein Wissens- bzw. Fachgebiet verstanden. Um eine <strong>Modell</strong>ierungssprache für besondere<br />
Fachgebiete in Form einer DSL (Domain Specific Language) zu erweitern, müssen die<br />
nötigen Erweiterungsmerkmale bestimmt werden, die durch die <strong>Modell</strong>ierungssprache spezifizierbar<br />
sein sollen.<br />
Die Beschreibung neuer oder erweiterter <strong>Modell</strong>ierungssprachen wird durch den Einsatz<br />
von UML-Profilen ermöglicht. Das UML-Profil stellt eine Menge der identifizierten Erweiterungsmerkmale<br />
dar, deren Beschaffenheit durch UML-Infrastructure exakt vorgegeben ist.<br />
Für die Definition von einem UML-Profil sind folgende drei Konstrukte ausschlaggebend: die<br />
Stereotypen, die Tagged Values und die Bedingungen (<strong>Co</strong>nstraints). Die Stereotypen legen<br />
die Bedeutung eines <strong>Modell</strong>ierungselements fest. Die Tagged Values spezialisieren bestimmte<br />
Attribute eines <strong>Modell</strong>ierungselements. Mithilfe der <strong>Co</strong>nstraints können spezielle Bedingungen<br />
zur Begrenzung der Instanzen eines Metamodells definiert werden.[20]<br />
Weiterer wichtiger Vorteil ist die Möglichkeit Metamodelle mithilfe von der UML zu entwickeln.<br />
Solche Möglichkeit bietet die Meta Object Facility (MOF), die im weiteren betrachtet<br />
wird.<br />
2.3.2. Die Meta <strong>Modell</strong>ierung und die Meta Object Facility (MOF)<br />
Die OMG hat im Rahmen der Meta Object Facility (MOF)[18] eine Konzeption zur Beschreibung<br />
der Metamodelle für andere <strong>Modell</strong>ierungssprachen entworfen. Die Metamodelle<br />
werden auf der Basis von den UML-Klassendiagrammen definiert. Die <strong>Modell</strong>ierungssprachen,<br />
die auf diesem Weg definiert worden sind, werden als formale <strong>Modell</strong>ierungssprachen<br />
oder auch als MOF-Sprachen im Rahmen dieser Arbeit bezeichnen.<br />
Die MOF definiert eine Metamodellhierarchie mit vier Metalevels M0-M3, wobei dem Level<br />
M3 die MOF selbst zugeordnet ist. Hier wird die MOF als das Urmodell bezeichnet. Alle<br />
anderen <strong>Modell</strong>e basieren auf der MOF und sind somit den darunter liegenden Levels zuge-<br />
11
2. Grundlagen und verwendeten Technologien<br />
Metalevel Name Beispiel<br />
M3 Urmodell MOF<br />
M2 Metamodelle UML Superstructure, OCL<br />
M1 <strong>Modell</strong>e Klassendiagramm<br />
M0 Systeme Website<br />
Tabelle 2.1.: Tabelle. Die Metalevels nach der MOF [10]<br />
ordnet. Mithilfe der MOF-Konzepte werden die Metamodelle für die <strong>Modell</strong>ierungssprachen<br />
entworfen, die ihren Platz auf dem Metalevel M2 einnehmen. Als Beispiel hierfür werden<br />
die OCL und die auf der MOF basierende UML-Superstructure, die alle Diagrammarten der<br />
UML festlegt, angegeben. Die Instanzen der definierten Metamodelle und somit die <strong>Modell</strong>e<br />
selbst werden dem Metalevel M1 zugeordnet. Letztendlich gehören die Anwendungen und die<br />
reelle Tatsachen, die mithilfe der <strong>Modell</strong>e beschrieben werden, zum Metalevel M0. Über dem<br />
M3 Level sind keine Levels mehr definiert worden. Die MOF ist selbstbeschreibend definiert.<br />
Hiermit sind bei der MOF-Definition die Konstrukte verwendet worden, die die MOF selber<br />
definiert.[10]<br />
Die MOF 2 ist in zwei Bestandteile aufgeteilt: das Essential MOF Model (EMOF) und das<br />
<strong>Co</strong>mplete MOF Model (CMOF). Die EMOF beinhaltet die Basisfunktionalität von der MOF<br />
und somit eine Untermenge davon, die die Definition einfacher Metamodelle zur Verfügung<br />
stellt. Die komplette CMOF enthält die Definition aller anderen Metamodelle des UML-<br />
Stacks wie die UML-Superstructure, sowie die EMOF und somit die gesamte Funktionalität<br />
der Meta Object Facility.[10]<br />
Die Tool-Interoperabilität wird mit dem XMI Format (XML Metadata Interchange) ermöglicht.<br />
Dieses Format kann als Mapping der MOF-Strukturen auf eXtensible Markup Language<br />
(XML) aufgefasst werden. Das XMI wird oft bei den Transformationswerkzeugen als<br />
Input- und Output-Format für <strong>Modell</strong>e gefordert.<br />
Im nächten Kapitel wird ein weiterer Standard der OMG vorgestellt.<br />
2.3.3. Die Object <strong>Co</strong>nstraint Language (OCL)<br />
Die Object <strong>Co</strong>nstraint Language (OCL) ist eine formale Sprache, mit der die Bedingungen<br />
in Form von <strong>Co</strong>nstraints für <strong>Modell</strong>e definiert werden können. Die OCL bietet als textuelle<br />
Ergänzung zu graphischen Diagrammen eine Möglichkeit die Bedingungen mit den <strong>Modell</strong>elementen<br />
zu verknüpfen. Hiermit kann z.B. der gültige Wertebereich für eine Variable oder<br />
eine Invariante für eine Klasse, die zu jederzeit gelten soll, definiert werden. Darüber hinaus<br />
kann unter Verwendung der OCL-Bedingungen das Vorhandensein bestimmter <strong>Modell</strong>elemente<br />
geprüft werden oder eine Vorbedingung für die Ausführung einer Operation definiert<br />
werden.<br />
12
2.4. Die Query View Transformations (QVT)<br />
Die OCL ist eine streng typisierte Sprache, was die Auswertung der OCL-Syntax zur <strong>Modell</strong>ierungszeit<br />
ermöglicht. Die mathematischen Konzepte der Mengenlehre und der Prädikatenlogik<br />
liegen der OCL-Sprache zugrunde. Für die mathematischen Symbole wird eine<br />
formal textuelle Notation verwendet. Hierbei hat die OCL einen deklarativen Charakter.<br />
Dies bedeutet, dass unter Verwendung von der OCL die Bedingungen erfasst werden, die für<br />
ein <strong>Modell</strong> erfüllt sein sollen und somit diese als gültig bewertet wird. Es kann jedoch mit<br />
Hilfe von OCL-Bedingungen nicht festgelegt werden wie ein <strong>Modell</strong> den gültigen Zustand<br />
erlangt.<br />
Die Verwendung der OCL-Sprache erlaubt dem <strong>Modell</strong>ierer eine hohe Präzision der Anwendungsbeschreibung<br />
zu erreichen, wobei hoher Abstraktionsgrad bewahrt wird. Die <strong>Modell</strong>validierung<br />
ist nahezu unvorstellbar ohne den Einsatz von so einer mächtigen Sprache<br />
wie die OCL. Einige Transformationssprachen wie z.B. die relationale QVT-Sprache basieren<br />
auf die OCL. Die von der OMG spezifizierte QVT (Query Views Transformations) wird im<br />
nächsten Abschnitt vorgestellt.<br />
2.4. Die Query View Transformations (QVT)<br />
Die QVT ist ein von der OMG veröffentlichter Standard zur Durchführung von <strong>Modell</strong>transformationen.<br />
Die QVT umfasst drei unterschiedlichen Transformationssprachen. Die<br />
imperative Sprache QVT Operational Mappings (QVT Operational) und die deklarativen<br />
Sprachen QVT Relations und QVT <strong>Co</strong>re.[23]<br />
Transformationen können unidirektional oder bidirektional sein. Dabei sind die deskriptiven<br />
Sprachen bidirektional und die imperative Sprache unidirektional. QVT unterscheidet<br />
zwischen zwei Konzepten für die Transformationen: der Model-To-Model-Transformation<br />
und der Model-To-Text Transformation. Mit einer Model-To-Text-Transformation kann eine<br />
<strong>Co</strong>de-Generierung erfolgen.<br />
2.5. Das Eclipse Modeling Framework (EMF)<br />
Das Eclipse Modeling Framework(EMF) ist ein <strong>Modell</strong>ierungsframework, der die Erstellung<br />
von eigenen <strong>Modell</strong>ierungssprachen erlaubt. Das EMF ist als eine Sammlung der Eclipse-<br />
Plug-ins konzipiert und benutzt ein eigenes Meta-Metamodell namens Ecore. In der Version<br />
2.0 kann das Ecore als Implementierung von EMOF betrachtet werden. Die Ecore-repräsentierte<br />
Metamodelle sind zum EMOF Format (siehe Kapitel 2.3.2) weitgehend äquivalent. Die<br />
Abbildung des Ecore auf das XMI ist der Abbildung des EMOFs auf das XMI sehr ähnlich.<br />
Der Unterschied bei Mappings auf das XMI ist zum Beispiel, dass die Namen der Bezeichner<br />
in Ecore Format mit E beginnen. Für einen Bezeichner Class steht z.B. EClass usw.<br />
Die Ecore-XMI Repräsentation lässt sich bei Bedarf unter Verwendung der EMF Werkzeuge<br />
einfach in das EMOF-Format überführen.[10][20]<br />
13
2. Grundlagen und verwendeten Technologien<br />
2.5.1. Metamodellierung mit Ecore Tools<br />
Die Erstellung von Metamodellen ermöglicht eine EMF Komponente, die Ecore Tools genannt<br />
wird. Sie stellt die Ecore-<strong>Modell</strong>-Editoren, die Ecore-Diagramm-Editoren zur <strong>Modell</strong>ierung<br />
der Metamodelle sowie das EMF Generator Template zur Verfügung. Das EMF<br />
Generator Template dient zur automatischen Generierung von Eclipse-Plug-ins, die die Editoren<br />
für die Erstellung und die Bearbeitung der Instanzen dieser Metamodelle erlauben.<br />
Wird das Ecore-Metamodell für eigene <strong>Modell</strong>ierungssprachen definiert, so kann aus diesem<br />
Ecore-Metamodell ein Generator-<strong>Modell</strong> für die Eclipse-Plug-ins generiert werden. Diese<br />
Plug-ins stellen Editoren bereit, welche die <strong>Modell</strong>ierung auf der eigenen <strong>Modell</strong>ierungssprache<br />
ermöglichen. Für die Ausführung von den <strong>Modell</strong>-Transformationen sollen oft die<br />
Metamodelle mit angegeben werden. Im Rahmen dieser Arbeit wurden für die Transformation<br />
benötigten Metamodelle in dem Ecore-Format definiert. Aus den Metamodellen wurden<br />
die Eclipse-Plug-ins generiert, welche die Editoren für die Erstellung der Metamodellinstanzen<br />
liefern. Die genaue Vorgehensweise dafür wird im Rahmen dieser Arbeit vorgestellt (siehe<br />
Anhang A). Darüber hinaus soll angemerkt werden, dass die Definition der Metamodelle für<br />
eigene <strong>Modell</strong>ierungssprachen eine schwergewichtige UML-Erweiterung mit sich bringt. Eine<br />
elegantere Alternative bietet der Einsatz eines UML-Profils.[23]<br />
2.5.2. Die Eclipse UML2<br />
Wie oben bereits erwähnt, verabschiedet OMG einen Standard dadurch, dass die Spezifikation<br />
dieses Standards veröffentlicht wird. Die konkreten Implementierungen des UML2-<br />
Metamodells werden von verschiedenen Open-Source- oder kommerziellen Tool-Herstellern<br />
entwickelt. Hierbei wurden unterschiedliche UML-2 Metamodell-Implementierungen um kleinere<br />
Tool-spezifische Inhalte erweitert. Somit unterscheiden sich diese Implementierungen<br />
voneinander. Dies hat eine schlechte Interoperabilität zur Folge. Als weiterer Faktor für die<br />
schlechte Interoperabilität zwischen verschiedenen Tools wäre eine ungenaue Spezifikation<br />
des XMI in den frühen Versionen zu benennen. Im Rahmen des Eclipse-UML2-Projekts<br />
wurde UML2-Metamodell unter Verwendung des Ecore-Formats spezifiziert und unter der<br />
Eclipse Public License (EPL) veröffentlicht. Somit können alle <strong>Modell</strong>ierungs- bzw. Transformationstools<br />
innerhalb der Eclipse ein einheitliches Metamodell verwenden. Ein standardisierter<br />
XMI-Export ist ebenfalls angeboten.[23][10]<br />
2.6. Die UWE Methodologie<br />
Die UML-based Web Engineering-Methodologie ist ein modellgetriebener Ansatz für die<br />
Entwicklung von Rich Internet Applications. Das UWE setzt auf die Standards des Model<br />
Driven Architecture und hat als Ziel ” Development Driven by Models“ durchzusetzen, wobei<br />
an allen Entwicklungsphasen der Einsatz von <strong>Modell</strong>transformationen zum maximalen Grad<br />
der Automatisierung des Entwicklungsprozesses beitragen soll.[12]<br />
14
2.6.1. UWE Metamodell und UWE Profil<br />
2.6. Die UWE Methodologie<br />
Das UWE-Metamodell ist als konservative Erweiterung des UML 2 Metamodells definiert.<br />
Dies ermöglicht ein Mapping des UWE-Metamodells auf ein UML Profil. Die UWE-Methodologie<br />
basiert auf einem UWE-Profil, der leichtgewichtigen UML Erweiterung, die eine Spezialisierung<br />
für die Domäne der modernen Webentwicklung in Form einer domänenspezifischen<br />
Sprache erstellt. Somit sind die UWE-<strong>Modell</strong>diagramme als <strong>Modell</strong>ierungssprache gut<br />
verständlich. Das UWE nutzt XMI als Austauschformat und ist somit zu den Tools kompatibel,<br />
die das XMI einsetzten.[14][12]<br />
2.6.2. Die Separation of <strong>Co</strong>ncerns<br />
UWE setzt auf die strikte Separation of <strong>Co</strong>ncerns. Die Webanwendung wird in den separaten<br />
<strong>Modell</strong>en beschrieben. Im Laufe des UWE-Entwicklungsprozesses werden die <strong>Modell</strong>e<br />
mithilfe <strong>Modell</strong>transformationen ineinander überführt[14][12].<br />
• Das Inhaltsmodell: In dem Inhaltsmodell werden die Inhalte der Webanwendung in<br />
Form eines Klassendiagramms modelliert, die aus einer Anforderungsanalyse hervorgehen.<br />
Das Ziel von dem Inhaltsmodell ist die visuelle Spezifikation der Domänenrelevanten<br />
Informationen der Webanwendung.<br />
• Das Navigationsmodell: Das Navigationsmodell spiegelt die Navigationsstruktur der<br />
Webanwendung wider, wobei diese Struktur aus dem Inhaltsmodell und den Anforderungen<br />
abgeleitet wird. Das Metamodell der Navigationsstruktur ist durch eine Anzahl<br />
spezieller Stereotype erweitert. Navigationsklassen repräsentieren die Navigationsknoten<br />
einer Webanwendung, die eine Business Logik enthalten sollen.<br />
• Das Prozessmodell: Das Prozessmodell enthält die Spezifikation der Funktionalitäten<br />
der Webanwendung, die basierend auf dem Inhaltsmodell und dem Navigationsmodell<br />
veranschaulicht werden.<br />
• Das Präsentationsmodell: Das Präsentationsmodell liefert eine abstrakte Sicht auf die<br />
Struktur von Benutzeroberfläche einer RIA. Es basiert auf dem Navigationsmodell.<br />
Der Vorteil von dem Präsentationsmodell ist, dass das <strong>Modell</strong> unabhängig von den<br />
Darstellungstechniken ist, welche für die Webanwendungsimplementierung eingesetzt<br />
werden können. Basiselemente der Repräsentationsmodelle sind Präsentationsklassen,<br />
die direkt auf den Knoten aus dem Navigationsmodell basieren.<br />
2.6.3. MagicUWE - UWE Plug-in für MagicDraw<br />
MagicUWE 1 ist ein MagicDraw-basiertes Plug-in, das eine Entwicklungsumgebung im Rahmen<br />
der UWE-Methodologie bereitstellt. Magic UWE unterstützt die <strong>Modell</strong>ierung von den<br />
unterschiedlichen UWE-<strong>Modell</strong>en. Das MagicDraw vereint in sich die Integration des UWE-<br />
Profils und einer benutzerfreundlichen Schnittstelle. Das Tool verfügt über eine Toolbar, in<br />
der für alle UWE-Diagramme passende Elemente (Klassen, Properties usw.) zur Verfügung<br />
stehen, womit eine bequeme <strong>Modell</strong>ierung erfolgen kann. Es sind <strong>Modell</strong>-Transformationen<br />
1 http://uwe.pst.ifi.lmu.de/toolMagicUWEReferenceV1.3.html<br />
15
2. Grundlagen und verwendeten Technologien<br />
in das MagicUWE integriert, deren Ausführung die Erstellung der <strong>Modell</strong>e vereinfachen. Das<br />
MagicUWE-Plug-in für das UML-basiertes Tool MagicDraw lässt sich leicht erweitern und<br />
verfügt über Konfigurations- und Anpassungsmöglichkeiten.<br />
Nachdem die grundlegenden Begriffe für die modellgetriebenen Entwicklung von RIAs erläutert<br />
wurden, wird im Folgenden die <strong>Modell</strong>-<strong>Evolution</strong> und <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> vorgestellt.<br />
16
3. Die <strong>Modell</strong>evolution und die<br />
<strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />
In diesem Kapitel werden die Grundlagen der Thematik der <strong>Co</strong>-<strong>Evolution</strong> vorgestellt. Die<br />
unterschiedlichen <strong>Modell</strong>ierungsartefakte sind auf verschiedenen Wegen von dem Metamodell<br />
bzw. deren Änderungen abhängig. Dabei wird zwischen folgenden Hauptarten der <strong>Co</strong>-<br />
<strong>Evolution</strong> unterschieden: der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> und der Transformationen-<strong>Co</strong>-<strong>Evolution</strong>.<br />
Diese erfolgen in Form einer Anpassung existierender Model- bzw. Transformationsinstanzen<br />
gemäß einer neuen Metamodell-Version.<br />
Im Rahmen dieser Arbeit wird der Schwerpunkt auf die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> gelegt. In<br />
diesem Zusammenhang werden im Folgenden die unterschiedlichen Arten der Metamodell-<br />
Modifikationen entsprechend der Typologie der benötigten Anpassungen kategorisiert. Diese<br />
Anpassung der <strong>Modell</strong>e enthält Schritte, welche für die Eliminierung der durch <strong>Modell</strong>evolution<br />
bedingten Differenzen benötigt werden. Für jeden solchen Typ wird der Automatisierungsgrad<br />
dieser Änderungen diskutiert, da nicht bei allen solchen Änderungstypen die<br />
<strong>Co</strong>-<strong>Evolution</strong> vollautomatisiert ablaufen kann. In solchen Fällen ist menschliche Eingriff unvermeidbar.<br />
Im Bereich der <strong>Co</strong>-<strong>Evolution</strong> der restlichen Software-Artefakte wird momentan geforscht.<br />
Es existieren bereits Ansätze zur Transformationen-<strong>Co</strong>-<strong>Evolution</strong>[16]. Auf die <strong>Co</strong>-<strong>Evolution</strong><br />
der Artefakte, die nicht <strong>Modell</strong>e oder Transformationen sind, wird im Rahmen dieser Arbeit<br />
nicht weiter eingegangen. Zu solchen Artefakten gehören beispielsweise die <strong>Modell</strong>-Editoren,<br />
die auf dem entsprechenden Metamodell basieren, die Dokumentation des Systems sowie die<br />
Anforderungen an das System. Eine Publikation berichtet über Erfolge in der Umsetzung<br />
einer Methodik für <strong>Co</strong>-<strong>Evolution</strong> von GMF-Editor[21]. Dieser Bereich der <strong>Co</strong>-<strong>Evolution</strong> ist<br />
sehr neu und die Arten der betroffenen Artefakte sind sehr umfangsreich, was eine vollständig<br />
automatisierte Migration der Gesamtmenge aller Software-Artefakte vermutlich unmöglich<br />
macht. Nach der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> und der Transformation-<strong>Co</strong>-<strong>Evolution</strong> bleiben immer<br />
einige Artefakte vorhanden, welche manuell angepasst werden müssen.<br />
Ein Versuch einen Ansatz zu erarbeiten, der die voll-automatisierte <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />
mit der Unterstützung von Transformationen ermöglicht, wirft eine Reihe von Problemen<br />
auf. Im Folgenden werden diese Probleme erläutert und die Möglichkeiten diskutiert, diese<br />
Ideen in die Realität umzusetzen. Anschließend wird die UWE-Methodologie unter die Lupe<br />
genommen und zwei Versionen der UWE-Metamodelle miteinander verglichen. Letztendlich<br />
wird die <strong>Co</strong>-<strong>Evolution</strong> Strategie für diese UWE Versionen aufgezeigt.<br />
17
3. Die <strong>Modell</strong>evolution und die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />
3.1. Was bringt die <strong>Modell</strong>-<strong>Evolution</strong> mit sich<br />
Die Abhängigkeiten zwischen dem Metamodell und den unterschiedlichen im Entwicklungsprozess<br />
beteiligten Software-Artefakten im Laufe des Metamodelllebenszyklus können zu<br />
einem beliebigen Zeitpunkt entstehen. Zum Beispiel ist eine <strong>Modell</strong>transformation, die als<br />
Ausgangsmodell Model M1 hat und als Resultat ein <strong>Modell</strong> M2 liefert, von Metamodellen<br />
von M1 und M2 abhängig. Ein graphisches oder textuelles Tool erlaubt es ein <strong>Modell</strong> zu<br />
beschreiben, wobei das Tool mit dem Metamodell in Abhängigkeit steht. [7] [8]<br />
Tool/Artefakt Beschreibung Abhängigkeit<br />
bei der<br />
Entwicklung<br />
Graphische sowie<br />
textuelle Editoren<br />
<strong>Modell</strong>-zu-<strong>Modell</strong>-<br />
Transformationen<br />
<strong>Modell</strong>-zu-Text-<br />
Transformationen<br />
Graphische oder textuelle<br />
Editoren, die Bearbeitung<br />
und Erstellung der<br />
<strong>Modell</strong>e unterstützen<br />
Transformationen, die<br />
aus einem Ausgangsmodell<br />
Zielmodelle<br />
generieren<br />
Transformationen, die als<br />
Ziel Textuelle Artefakte,<br />
wie z.B. den <strong>Co</strong>de aus<br />
dem Ausgangsmodell generieren<br />
Abhängigkeit<br />
bei der<br />
<strong>Evolution</strong><br />
Technologie<br />
Schwach Stark GMF, MagicDraw,<br />
Enterprise Architect,<br />
Topcased<br />
etc.<br />
Stark Mittel ATL, QVT Operational,<br />
QVT Relations,<br />
VIATRA2 etc.<br />
Schwach Schwach UWE4JSF, Acceleo<br />
etc.<br />
Tabelle 3.1.: Tabelle. Die Abhängigkeit zwischen dem Metamodell und den Softwareartefakten.<br />
[8]<br />
In der Tabelle 3.1 werden verschiedene Typen der Abhängigkeiten zwischen dem Metamodell<br />
und den unterschiedlichen Artefakten unterschieden, die im Laufe der Entwicklung entstehen<br />
können. Die Metamodelländerungen haben einen Einfluss auf existierende Software-<br />
Artefakte im Sinne der <strong>Co</strong>-<strong>Evolution</strong>-Problematik. Die Artefakte müssen angepasst werden,<br />
damit sie im Sinne der aktuellen Version des Metamodells wohldefiniert bleiben.<br />
Das Metamodell kann sich auf unterschiedlichen Wegen entwickeln: einige Änderungen können<br />
rein additiv sein und keinen Einfluss auf existierende Artefakte haben, wobei keine oder<br />
nur ganz kleine <strong>Co</strong>-<strong>Evolution</strong>-Anpassungen benötigt werden. Allerdings können in manchen<br />
Fällen Metamodell-Modifikationen Inkompatibilität und Inkonsistenzen mit sich bringen,<br />
welche nicht einfach und nicht immer automatisiert behoben werden können.<br />
3.1.1. Die Relationstypen zwischen dem Metamodell und den<br />
<strong>Modell</strong>ierungsartefakten<br />
Die benötigten <strong>Co</strong>-<strong>Evolution</strong>-Adaptationsschritte hängen von dem Typ der Relation zwischen<br />
dem Metamodell und dem betroffenem Artefakt ab.<br />
Alfonso Pierantonio und <strong>Co</strong>. unterscheiden in [8] zwischen folgenden Relationstypen:<br />
18
3.1. Was bringt die <strong>Modell</strong>-<strong>Evolution</strong> mit sich<br />
Abbildung 3.1.: Eine Übersicht der Beziehungen zwischen einem Metamodell und den Softwareartefakten<br />
[8]<br />
• conformsTo: diese Relation verbindet <strong>Modell</strong>e mit ihren Metamodell. Ein Model ist zu<br />
einem Metamodell konform, wenn dieses <strong>Modell</strong> jedes Konzept spezifiziert, das in der<br />
<strong>Modell</strong>definition vorkommt. Dabei werden die Konzepte des Metamodells entsprechend<br />
der Regeln benutzt, die im Metamodell spezifiziert sind;<br />
• domain<strong>Co</strong>nformsTo: ist eine Relation zwischen der Definition einer Transformation<br />
und der Definitionen der Metamodelle, auf denen diese Transformation operiert.<br />
Zum Beispiel könnte eine Konformitätseinschränkung festlegen, dass die Elemente einer<br />
Transformationsregel einer Metaklasse aus dem Quellmetamodell entsprechen müssen<br />
und dasselbe für Zielelemente und entsprechendes Zielmetamodell gelten soll;<br />
• dependsOn: ist die schwächste und meistens komplexeste Relation von allen. Diese<br />
Relation besteht zwischen dem Metamodell und der <strong>Modell</strong>ierungsartefakte, die keine<br />
direkten und wohlgeformten vordefinierten Abhängigkeiten zu Metamodell-Elementen<br />
besitzen. Zum Beispiel im Falle der GMF (Graphical Modeling Framework) <strong>Modell</strong>e referenzieren<br />
einige von ihnen nicht direkt auf die im Metamodell angegebenen Elemente,<br />
wenn auch eine Form der Konsistenz aufrechterhalten werden muss; 1<br />
Der Fokus dieser Arbeit liegt auf der Problematik der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>, weil die <strong>Modell</strong>e<br />
die zentrale Bedeutung in der MDA einnehmen. Einzelne Lösungsvorschläge für Probleme<br />
in der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> und Transformationen-<strong>Co</strong>-<strong>Evolution</strong> existieren bereits. Es<br />
existieren sogar Vorschläge für die <strong>Co</strong>-<strong>Evolution</strong> der <strong>Modell</strong>ierungsartefakte, die mit dem<br />
Metamodell dependsOn-Abhängigkeit besitzen, wie z.B. für den graphische GMF-Editor.<br />
Leider sind diese Lösungen zum größten Teil unreif bzw. in einem Prototypen-Stadium oder<br />
1 www.eclipse.org/gmf<br />
19
3. Die <strong>Modell</strong>evolution und die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />
basieren auf verschiedenen Standards und deren unterschiedlichen Versionen.<br />
Es existiert noch kein Tool, indem eine umfassende, einheitliche und universelle Lösung<br />
für <strong>Co</strong>-<strong>Evolution</strong>-Strategien für alle Typen der Artefakte vertreten ist. Der Kern der <strong>Co</strong>-<br />
<strong>Evolution</strong> liegt aber bei der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Auf die <strong>Modell</strong>e-<strong>Co</strong>-<strong>Evolution</strong> wird im<br />
weiterem detailliert eingegangen.<br />
3.2. Die Klassifizierung der Metamodelländerungen<br />
Die Metamodelle können als grundlegendes Konzept des MDA betrachtet werden, da sie eine<br />
formale Definition für die wohlgeformten <strong>Modell</strong>e bereitstellen. In anderen Worten bilden<br />
Metamodelle die Grundlage für die Sprachen, durch deren Verwendung die Gegebenheiten<br />
der Realität in einem abstrakten Sinne beschrieben werden. Durch die Weiterentwicklung<br />
der Metamodelle, die im Laufe deren Lebenszyklus unausweichlich sind, stößt man auf die<br />
Notwendigkeit das Problem der Versionskonflikte zu lösen. Die existierenden <strong>Modell</strong>e gehen<br />
mit der älteren Metamodell konform, aber nicht mit dem neuen Metamodell. Diese Konformitätsrelation<br />
ist vom Typ conformsTo (3.1.1) und damit abgebrochen. Dabei geht die<br />
Validität des <strong>Modell</strong>s verloren. Dieses Problem entsteht durch Inkompatibilität zwischen<br />
den Versionen des Metamodells und kann durch Anpassungsmechanismus der <strong>Modell</strong>-<strong>Co</strong>-<br />
<strong>Evolution</strong> gelöst werden. Somit kann die conformsTo-Relation (3.1.1) zwischen dem neuen<br />
Metamodell und entsprechenden angepassten <strong>Modell</strong>instanzen aufrechterhalten bleiben. Die<br />
<strong>Modell</strong>e können zu neuen Instanzen entsprechend der vorgenommenen Metamodelländerungen<br />
auf die neue Version migriert werden.<br />
Leider ist <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> nicht immer einfach: abhängig von der Art der Metamodell-<br />
Änderungen können sich Schwierigkeiten ergeben. Es ergeben sich unterschiedliche Arten von<br />
Metamodelländerungen im Bezug auf die Auswirkungen, die diese Änderungen an existierenden<br />
<strong>Modell</strong>en verursachen. Einige der Änderungen können rein additiv und unabhängig<br />
von anderen <strong>Modell</strong>-Elementen sein und somit keinen Anpassungsbedarf an existierenden<br />
<strong>Modell</strong>en verursachen.<br />
Einige Metamodelländerungen bedingen den Verlust von Konformität der existierenden <strong>Modell</strong>e<br />
zu dem neuen geänderten Metamodell. Diese Konformität kann dennoch mit einfachen<br />
voll automatisierten Anpassungen der <strong>Modell</strong>e wiederhergestellt werden; in manchen Fällen<br />
verursachen Metamodelländerungen Inkompatibilität und Inkonsistenz der <strong>Modell</strong>e, die auf<br />
vollständig automatisiertem Wege nicht beseitigt werden können. Hier ist der menschliche<br />
Eingriff unvermeidbar. Einige dieser Änderungen, lassen sich teilautomatisiert durchführen.<br />
Eine Untermenge der Metamodelländerungen lässt eine Automatisierung der Anpassung der<br />
existierenden <strong>Modell</strong>e nicht zu. Hier muss der <strong>Modell</strong>ierer die <strong>Modell</strong>e manuell ändern. Dies<br />
wird im nächsten Abschnitt weiter ausgeführt.<br />
3.2.1. Illustratives Beispiel für Metamodell-<strong>Evolution</strong><br />
Im Folgenden wird ein Beispiel von Model-<strong>Evolution</strong> vorgeführt. Es wird ein vereinfachtes<br />
Metamodell für die <strong>Modell</strong>ierung von Petri-Netze vorgestellt. [7] Das Ausgangsmetamodell<br />
20
3.2. Die Klassifizierung der Metamodelländerungen<br />
der Petri-Netze MM0 besteht aus Plätzen (Place) und Transitionen (Transition), wie es in<br />
der Abbildung 3.2 zu sehen ist.<br />
Abbildung 3.2.: Das Petri-Netze-Metamodell MM0 [7]<br />
Die Plätze können Eingangs- und Ausgangs-Transitionen besitzen. Die Transitionen verbinden<br />
einen Platz entsprechend mit Eingangs- und Ausgangsplätze (src- und dst Assoziationen).<br />
Aus diesem ganz vereinfachten Metamodell wird im nächsten Schritt ein neues Metamodell<br />
erstellt. Im Metamodell MM1 im Bild 3.3 soll jedes Netz mindestens einen Platz<br />
und eine Transition besitzen. Außerdem werden gerichtete Kanten zwischen den Plätzen<br />
und Transitionen explizit durch die Einführung von PTArc (Place-Transition Arc) und<br />
TPArc(Transition-Place Arc) Metaklassen definiert. [7]<br />
Abbildung 3.3.: Das Petri-Netze-Metamodell MM1 [7]<br />
Diese Verfeinerung erlaubt es, weitere Eigenschaften zu den Beziehungen zwischen den<br />
Plätzen und den Transitionen hinzuzufügen. Z.B. kann der Petri-Netze Formalismus jetzt<br />
mittels dieser Verfeinerung durch die Annotation der gerichteten Kanten mit Gewicht erweitert<br />
werden. Aufgrund der Tatsache, dass die beiden Klassen PTArc sowie TPArc gerichtete<br />
Kanten repräsentieren, können diese durch Hinzunahme einer Superklasse generalisiert werden.<br />
Wobei die neue Eigenschaft ” Gewicht“ in diese Metasuperklasse als Metaattribute vom<br />
Typ Integer hinzugenommen werden kann. Siehe Bild 3.4. Diese Änderung wird im Metamodell<br />
MM2 mit aufgenommen. Letztendlich wird die Metaklasse Net in PetriNet umbenannt.<br />
[7]<br />
Die Versionen MM1 und MM2 des Petri-Netze Metamodells, die davor vorgestellt wurden,<br />
können zu Ungültigkeit der bestehenden <strong>Modell</strong>instanzen nach der Migration auf eine<br />
neuere Version führen. Anhand der Änderungstypen soll eine Analyse dieser Versionen in<br />
Bezug auf die Auswirkung der Änderung auf die existierende <strong>Modell</strong>e erfolgen. Anschlie-<br />
21
3. Die <strong>Modell</strong>evolution und die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />
ßend werden Überlegungen über notwendigen Adaptationsschritte vorgenommen, die an den<br />
existierenden <strong>Modell</strong>en durchgeführt werden sollen, um Konformität mit dem neuen Metamodell<br />
wiederherzustellen. Die Änderungen eines Metamodells können anhand korrupten<br />
oder non-korrupten Effekte auf die existierenden <strong>Modell</strong>e klassifiziert werden [7]:<br />
• ” non-breaking changes“: Die Änderungen an einem Metamodell, die bewirken, dass<br />
existierende <strong>Modell</strong>e mit der durch diese Änderungen entstandenen neuen Version des<br />
Metamodells ohne jegliche Anpassungen konform gehen.<br />
• ” breaking and resolvable changes“: Die Konformität der existierenden <strong>Modell</strong>e zu<br />
dem geändertem Metamodell bleibt nicht erhalten und kann mithilfe vollautomatisierter<br />
<strong>Co</strong>-<strong>Evolution</strong> wiederhergestellt werden.<br />
Abbildung 3.4.: Das Petri-Netze-Metamodell MM2 [7]<br />
• ” breaking and unresolvable changes“: Die Konformität der existierenden <strong>Modell</strong>e<br />
der neuen Version des Metamodells bleibt nicht erhalten und kann nicht automatisiert<br />
wiederhergestellt werden. Menschlicher Eingriff ist unerlässlich.<br />
Das obere Beispiel zeigt, dass das Einfügen einer abstrakten Metaklasse Arc als Generalisierung<br />
der Metaklassen PTArc und TPArc (ohne Hinzunahme des Attributes weight) zu der<br />
Kategorie der ” non-breaking changes“ gehört. Nach einer solchen Änderung sind existierende<br />
<strong>Modell</strong>e, die mit dem MM1 Metamodell konform gehen, auch zu dem MM2 Metamodell<br />
konform. Die <strong>Co</strong>-<strong>Evolution</strong>-Aktivitäten sind an dieser Stelle nicht nötig.<br />
Die Hinzunahme der neuen Metaklassen PTArc und TPArc zu dem Metamodell MM0 bewirkt,<br />
dass die existierenden <strong>Modell</strong>e zu dem neuen MM1 Metamodell nicht mehr konform<br />
bleiben. Die Platz- und Transition-Instanz können dann nicht mehr direkt miteinander verbunden<br />
werden, da die PTArc- und TPArc- Elemente gemäß dem neuen Metamodell dafür<br />
eingesetzt werden sollen. Die <strong>Modell</strong>e können automatisiert in die neue Metamodellversion<br />
überführt werden, indem für jedes Platz-Transition Paar zwei zusätzliche PTArc- und<br />
TPArc-Instanzen hinzugefügt werden. Diese Metamodelländerung teilt man somit in die<br />
Kategorie ” breaking and resolvable changes“ ein.<br />
Oft führen die Metamodelländerungen zu Inkonsistenzen in den <strong>Modell</strong>en, die ohne menschlichen<br />
Eingriff nicht beseitigt werden können. Ein Beispiel dafür wäre die Hinzunahme eines<br />
22
3.2. Die Klassifizierung der Metamodelländerungen<br />
neuen Attributs in die Metaklasse Arc des MM2 <strong>Modell</strong>s, das zuvor im MM1 Metamodell<br />
nicht vorkam. Die <strong>Modell</strong>e, die mit dem MM1 Metamodell konform gehen, können nicht automatisiert<br />
auf die MM2 Version überführt werden, ohne dass Konformität eingebüßt wird.<br />
Nur ein <strong>Modell</strong>ierer kann die fehlende Information, die in diesem Fall die Gewichtung des<br />
Pfeils betrifft, in die existierenden <strong>Modell</strong>e einfügen. Dies ist ein Beispiel für die ” breaking<br />
and unresolvable changes“. Eine Abhilfe könnte die Definition eines Default-Wertes für dieses<br />
Attribut sein. Dadurch wäre die <strong>Co</strong>-<strong>Evolution</strong> automatisierbar und würde der Kategorie<br />
der ” breaking and unresolvable changes“ angehören.<br />
3.2.2. Die additiven Änderungen eines Metamodells<br />
Alle Szenarien der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> können entsprechend der Metamodellmodifikationen<br />
behandelt werden. Bei diesen Metamodellmodifikationen wird zwischen der additiven (engl.<br />
additive), subtraktiven (engl. subtraktive) und ändernden (engl. updative) Modifikation unterschieden.<br />
Mit additiven Änderungen werden folgende Additionen zu dem Metamodell<br />
gemeint[7][24]:<br />
• Das Einfügen einer Metaklasse: Eine neue Metaklasse wird dem Metamodell hinzugefügt.<br />
Dies hat keinerlei Auswirkung auf die restlichen Klassen des <strong>Modell</strong>s, ebenso<br />
wenn die neue Metaklasse abstrakt ist. Als Vorbedingung muss gelten, dass die neu<br />
hinzukommende Metaklasse in dem Metamodell nicht bereits enthalten ist. Somit wird<br />
die Unterscheidung der Klassen gewährleistet und das Vorhandensein von Duplikaten<br />
ausgeschlossen. Das Einfügen neuer Metaklassen bringt das Thema <strong>Co</strong>-<strong>Evolution</strong> nur<br />
dann auf, wenn die neue Metaklasse zwingend erforderlich (obligatorisch) ist. Nur der<br />
<strong>Modell</strong>ierer kann die neuen Instanzen dieser Metaklasse in die existierenden <strong>Modell</strong>e<br />
einfügen.<br />
• Das Einfügen einer Meta-Eigenschaft: Dies ist dem Einfügen einer Metaklasse<br />
ähnlich. Im Falle einer nicht obligatorischen Eigenschaft ist keine <strong>Co</strong>-<strong>Evolution</strong>-<br />
Aktivität notwendig. Die neue Eigenschaft kann mit der Berücksichtigung einer bestimmten<br />
Kardinalität obligatorisch sein. In diesem Fall ist die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />
nicht ohne menschliche Interaktion möglich. Besondere Aufmerksamkeit ist im Falle<br />
der Vererbung gefragt. Die Konformität bleibt erhalten, wenn die neue Eigenschaft in<br />
eine abstrakte Metaklasse, die keine nicht-abstrakte Subklassen besitzt, eingefügt wird.<br />
Ist die Metaklasse nicht abstrakt, so sind sowohl die Metaklasse selbst als auch alle<br />
ihre Subklassen betroffen. Das Eingreifen des Menschen ist dann wiederum unabdingbar,<br />
um den Wert der eingefügten obligatorischen Metaeigenschaft in allen betroffenen<br />
<strong>Modell</strong>elementen zu setzen. Legt man einen Default-Wert für die Eigenschaft fest, so<br />
lässt sich die <strong>Co</strong>-<strong>Evolution</strong> automatisieren.<br />
• Die Generalisierung einer Meta-Eigenschaft: Eine Meta-Eigenschaft ist generalisiert,<br />
wenn ihr Typ oder ihre Kardinalität geschwächt wird. Zum Beispiel, wenn die<br />
Kardinalität einer Metaklasse von 3..n auf 0..n geändert wird. Es ist in diesem Fall<br />
keine <strong>Co</strong>-<strong>Evolution</strong>-Aktion an den betroffenen Klassen der existierenden <strong>Modell</strong>e erforderlich.<br />
Die Instanzen dieser Metaklasse bleiben konform zu der neuen Version des<br />
Metamodells.<br />
• Das Verlagern einer Meta-Eigenschaft einer Metaklasse zu ihrer Superklas-<br />
23
3. Die <strong>Modell</strong>evolution und die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />
se (engl. pull metaproperty): Eine Meta-Eigenschaft wird aus einer Subklasse B<br />
zu ihrer Superklasse A verschoben. Sie wird in der Metaklasse B gelöscht und zu der<br />
Metaklasse A eingefügt. Ist diese Eigenschaft nicht obligatorisch, so muss keine <strong>Modell</strong>-<br />
<strong>Co</strong>-<strong>Evolution</strong>-Aktion ausgeführt werden. Andernfalls müssen als Resultat Instanzen<br />
der Metaklasse A und deren Subklassen modifiziert werden. Weil diese Klassen diese<br />
Meta-Eigenschaft erben. Die Instanzen der Klasse B müssen nicht modifiziert werden,<br />
da sie diese Eigenschaft bereits besitzen.<br />
• Das Extrahieren einer Superklasse: Eine Anzahl von Eigenschaften, die für einer<br />
bestimmten Menge von Klassen gemeinsam ist, wird in eine neue Superklasse in einer<br />
Hierarchie extrahiert. Die gemeinsamen Eigenschaften werden in diese Superklasse<br />
verschoben. Ist die Superklasse abstrakt, so ist keine <strong>Co</strong>-<strong>Evolution</strong> notwendig. Sonst<br />
können die Änderungseffekte auf den Fall des Verlagerns einer Meta-Eigenschaft einer<br />
Metaklasse zu ihrer Superklasse (engl. pull metaproperty) zurückgeführt werden.<br />
3.2.3. Die subtraktiven Änderungen eines Metamodells<br />
Die subtraktiven Änderungen beziehen sich auf das Löschen einiger Metamodellelemente<br />
und unterteilen sich in folgende Typen[7][24]:<br />
24<br />
• Das Löschen einer Metaklasse: Eine Metaklasse wird aus einem Metamodell gelöscht,<br />
um einem Sub-Metamodell Platz zu machen. In diesem Fall induziert eine solche Änderung<br />
normalerweise das Löschen aller Instanzen dieser Metaklasse. Wenn diese Klasse<br />
Subklassen hatte oder Referenzen zu den anderen Metaklassen besessen hat, sind die<br />
dadurch verursachten Seiteneffekte auch an diesen referenzierten Instanzen zu berücksichtigen.<br />
• Das Löschen einer Meta-Eigenschaft: Effekte sind analog zu denen, wie beim<br />
Löschen einer Metaklasse.<br />
• Die Verlegung einer Meta-Eigenschaft in eine Subklasse (push metaproperty):<br />
Ein Umzug einer Eigenschaft von einer Superklasse A zu ihren Subklassen bedeutet,<br />
dass diese Eigenschaft in der ursprünglichen Superklasse A gelöscht wird, um dann<br />
in allen Subklassen von A übernommen zu werden. Ist die Superklasse A abstrakt, so ist<br />
keine <strong>Modell</strong>-<strong>Co</strong>-Adaptation erforderlich. Andernfalls müssen alle Instanzen der Klasse<br />
A entsprechend modifiziert werden. Ist die Eigenschaft obligatorisch, so muss ihr Wert<br />
in allen betroffenen Klassen manuell gesetzt werden. Alternativ ermöglicht die Definition<br />
eines Default-Values ähnlich wie bei dem Fall des Einfügens einer Meta-Eigenschaft<br />
die Automatisierung für dieses Vorgehen.<br />
• Das Abflachen der Hierarchie (engl. flatten hierarchy): Das Abflachen einer<br />
Hierarchie bedeutet die Eliminierung einer Superklasse und Auslagerung aller Eigenschaften<br />
in die Subklassen. Dieses Szenario ist im vorigem Fall der Verlegung einer<br />
Meta-Eigenschaft in eine Subklasse (engl. push) abgedeckt.<br />
• Die Einschränkung der Kardinalität oder des Typs einer Meta-Eigenschaft:<br />
Eine Meta-Eigenschaft wird in diesem Zusammenhang durch die Einengung bzw. die<br />
Verringerung deren Kardinalitätsbereichs oder deren Typbereichs eingeschränkt. Dies<br />
ist ein komplexer Fall, wobei alle Instanzen eine manuelle <strong>Co</strong>-Adaption bedürfen. Wird
3.2. Die Klassifizierung der Metamodelländerungen<br />
der obere Grenzwert einer Multiplizität verringert, so müssen bestimmte Werte bzw.<br />
Klassen gelöscht werden. Wird der untere Grenzwert einer Multiplizität erhöht, so<br />
müssen zu den betroffenen Elementen neue Werte hinzugefügt werden, was normalerweise<br />
nur durch die manuelle Anpassung möglich ist. Die Wahl der zu löschenden<br />
Elemente kann nicht ohne menschlichen Eingriff getroffen werden. Nach einer Einschränkung<br />
eines Typbereichs in einem Attribut muss für jede betroffene Instanz eine<br />
Typkonvertierung dieses Attributes erfolgen.<br />
3.2.4. Die Updates an einem Metamodell<br />
Letztendlich kann die neue Version eines Metamodells einige Updates deren Elemente enthalten.<br />
Die damit hervorgerufenen Modifikationen können wie folgt gruppiert werden[7][24]:<br />
• Das Metaelement umbenennen: Die Umbenennung ist ein einfacher Fall. Die<br />
Änderung soll bei den existierenden Instanzen durchgeführt werden und kann somit<br />
vollständig automatisiert erfolgen.<br />
• Die Verlagerung einer Metaeigenschaft aus einer Metaklasse zu einer anderen<br />
Metaklasse: Bestimmte Eigenschaften einer Metaklasse A wird gelöscht und<br />
in eine andere Metaklasse B eingefügt.<br />
• Das Extrahieren (engl. to extract) einer Metaklasse und das Löschen (engl.<br />
to inline) einer Metaklasse: Das Extrahieren einer Metaklasse bedeutet, dass eine<br />
neue Metaklasse definiert wird und alle relevanten Felder aus einer existierenden Metaklasse<br />
in die neue verschoben werden. Eine Metaklasse zu löschen bedeutet, dass alle<br />
ihre Eigenschaften in eine andere Klasse verschoben werden, dabei wird die ursprüngliche<br />
Metaklasse gelöscht.<br />
3.2.5. Die Klassifizierung von Metamodelländerungen anhand der korrupten<br />
bzw. der non-korrupten Effekte auf existierende <strong>Modell</strong>e<br />
Die Klassifizierung von Metamodelländerungen anhand der korrupten bzw. der non-korrupten<br />
Effekte auf existierende <strong>Modell</strong>e ist in der Tabelle 3.2 zusammengefasst.<br />
Auf den ersten Blick wird der Eindruck erweckt, dass diese Klassifizierung die Assoziationen<br />
zwischen den Klassen nicht berücksichtigt. Dies ist aber nicht der Fall, weil die Assoziationen<br />
als Eigenschaften der Metaklassen betrachtet werden können.<br />
Alle möglichen oben beschriebene Szenarien für Metamodell-<strong>Evolution</strong> sind in der Tabelle<br />
3.2 in folgende Kategorien unterteilt: ” non-breaking changes“, ” breaking and resolvable<br />
changes“ und ” breaking and unresolvable changes“. Basierend auf dieser Kategorisierung leiten<br />
sich die Strategien für die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> von den existierenden <strong>Modell</strong>instanzen<br />
ab. Die ” non-breaking changes“ bedürfen keiner <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Die existierenden <strong>Modell</strong>e<br />
müssen nicht angepasst werden. Die ” breaking and resolvable changes“ bedürfen eine<br />
<strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>, wobei diese automatisiert werden kann. Die einzige Kategorie, welche<br />
die Automatisierung der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> sehr schwierig zum Teil unmöglich macht,<br />
ist die ” breaking and unresolvable changes“. Von allen Metamodelländerungen kann ” Die<br />
25
3. Die <strong>Modell</strong>evolution und die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />
Änderungstyp Änderungen<br />
Non-breaking changes<br />
Breaking and resolvable changes<br />
Breaking and unresolvable changes<br />
Die Generalisierung einer Metaeigenschaft<br />
Das Einfügen einer nicht-obligatorischen Metaklasse<br />
Das Einfügen einer nicht obligatorischen Metaeigenschaft<br />
Das Extrahieren einer abstrakten Superklasse<br />
Das Löschen einer Metaklasse<br />
Das Löschen einer Metaeigenschaft<br />
Der Umzug einer Metaeigenschaft in eine Subklasse (push metaproperty)<br />
Das Flachmachen einer Hierarchie (flatten hierarchy)<br />
Das Umbenennen von Metaelementen<br />
Der Umzug einer Metaeigenschaft zu einer anderen Metaklasse<br />
Das Extrahieren einer Metaklasse bzw. Inline einer Metaklasse<br />
Das Einfügen einer obligatorischen Metaklasse<br />
Das Einfügen einer obligatorischen Metaeigenschaft<br />
Der Umzug einer Metaeigenschaft zu einer Superklasse (pull metaproperty)<br />
Die Einschränkung der Kardinalität oder des Typs einer Metaeigenschaft<br />
Das Extrahieren einer nicht abstrakten Superklasse<br />
Tabelle 3.2.: Klassifizierung der Änderungen eines Metamodells im Überblick.[7][24]<br />
Einschränkung der Kardinalität oder des Typs einer Metaeigenschaft“ in keiner Weise automatisiert<br />
werden. Die restlichen Fälle lassen sich mit einer Abhilfe wie z.B. der Einführung<br />
eines Default-Wertes automatisieren. Diese Strategien wurden bereits für jeden solchen Typ<br />
dargestellt.[7][24]<br />
3.3. Die Transformation-<strong>Co</strong>-<strong>Evolution</strong><br />
Die Änderungen an einem Metamodell können die <strong>Modell</strong>transformationen beeinträchtigen.<br />
Inkonsistenzen entstehen, wenn die Transformation nicht mehr der domainTo-Relation 3.1.1<br />
genügt. Dies kann z.B. passieren, wenn ein Konzept aus dem Metamodell entfernt wird, das in<br />
der Transformationsregel angesprochen wird. In Bezug auf Transformationen unterscheidet<br />
man Metamodelländerungen in den drei folgenden Kategorien [8][16]:<br />
26<br />
• Vollautomatisiert: Änderungen an einem Metamodell, die Transformationen beeinträchtigen,<br />
wobei die existierende <strong>Modell</strong>e dank dieser Transformationen vollautomatisiert<br />
ohne Benutzer Interaktionen auf die neue Version migriert werden können.<br />
• Partiell automatisiert: Modifikationen des Metamodells, die Transformationen so<br />
Beinträchtigen, dass eine Migration notwendig ist, um die Validität der Transformationen<br />
und somit die domainTo Relation (3.1.1) wiederherzustellen. Diese Migration kann
3.4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> der UWE-Präsentationsmodelle<br />
automatisiert erfolgen mit der Ausnahme einiger feiner Anpassungen, die nur manuell<br />
durchzuführen sind, um die <strong>Co</strong>-<strong>Evolution</strong> dieser Transformationen zu vervollständigen.<br />
• Vollsemantisch: Die Änderungen am Metamodell, die existierende Transformationen<br />
so beeinträchtigen, dass das Migration nur durch einen Menschen manuell definiert<br />
werden kann.<br />
3.4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> der UWE-Präsentationsmodelle<br />
Im Laufe des Forschungsprozesses wurde die UWE-Methodologie, die im Kapitel bereits<br />
vorgestellt wurde, kontinuierlich verbessert und an die neuen Anforderungen der RIAs angepasst.<br />
Die UWE-Metamodell-<strong>Evolution</strong> verläuft gemäß diesen Anpassungen, sodass mehrere<br />
Versionen des UWE-Metamodells sowie des UWE-Profils bereits existieren. Im Rahmen<br />
dieser Arbeit wird der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>-Ansatz zur Veranschaulichkeit am Beispiel eines<br />
Ausschnittes des UWE-Metamodells, namens Präsentationsmodell, erarbeitet. In den<br />
nächsten Abschnitten werden die UWE-Präsentationsmetamodell-Differenzen zwischen Versionen<br />
1.7 und 1.8 vorgestellt. Anschließend werden die entdeckten Differenzen entsprechend<br />
der Typologie aus dem Kapitel 3.2 zugeordnet. Darauf basierend wird die Umsetzung der<br />
<strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> für das UWE-Präsentationsmodell aufgezeichnet.<br />
3.4.1. Die Metamodelldifferenzen zwischen UWE-Metamodellversion 1.7 und<br />
der Version 1.8<br />
Im Folgenden wird die <strong>Evolution</strong> des Präsentationsmodells des UWE-Metamodells betrachtet,<br />
die im Kapitel 2.6.2 bereits vorgestellt wurde. Das Präsentationsmodell des UWE-<br />
Metamodells definiert das Layout für die entsprechenden früher definierten Navigations- und<br />
Prozess-<strong>Modell</strong>e. Es enthält die Kompositionsstrukturen aus Klassen, die User- Interface-<br />
Elemente und die <strong>Co</strong>ntainer der grafischen Oberfläche in der Form einer Webseite repräsentieren.<br />
Im Weiteren, nach einer ausführlichen Beschreibung aller Elemente der beiden Präsentationsmodellen,<br />
werden die Unterschiede zwischen den Elementen herausgearbeitet.<br />
Die Abbildung 3.5 stellt das UWE-Präsentations-Metamodell der Version 1.7 dar. An dieser<br />
Stelle wird auf den Aufbau des Präsentationsmodells in der Version 1.7 näher eingegangen.<br />
Die PresentationClass ist eine spezielle Klasse zur Darstellung einer Webseite oder deren<br />
Teile und kann User-Interface-Elemente sowie Präsentationsklassen enthalten.<br />
Die Klasse PresentationPage hat dieselbe Semantik wie die PresentationClass und wird<br />
verwendet, um die oberste Ebene der Kompositionsstruktur einer Webseite zu kennzeichnen.<br />
Somit darf die PresentationPage nicht in einem anderen <strong>Co</strong>ntainer enthalten sein. Die<br />
PresentationGroup dient zur Darstellung von Bereichen einer Webseite, sobald diese komplex<br />
sind. Genauer gesagt beinhalten solche Bereiche mehrere Präsentationselemente bzw.<br />
Präsentationsklassen. Die PresentationProperty ist ein spezielles Attribut von der Klasse<br />
PresentationClass und deren Subklassen PresentationPage und PresentationGroup. Mit diesem<br />
Attribut werden die Präsentationselenente angegeben, die in PresentationClass bzw.<br />
PresentationPage bzw. PresentationGroup beinhaltet werden. Die PresentationClass und<br />
ihre Subklassen können aus den Subklassen der Klasse UIElement bestehen, die die User<br />
27
3. Die <strong>Modell</strong>evolution und die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />
Abbildung 3.5.: Das UWE-Präsentations-Metamodell. Version 1.7<br />
Interface Elemente einer Webseite repräsentieren.<br />
In der Abbildung 3.6 ist nicht zu übersehen, dass mehrere Änderungen an dem Metamodell<br />
vorgenommen wurden. Folgende abstrakte Metaklassen sind zur Unterscheidung der User-<br />
Interface-Elementen eingeführt worden: die ValuedElement, die InteractiveElement und die<br />
OutputElement. Dabei wird zwischen den Outputelementen wie z.B. Text, Bild usw. und den<br />
interaktiven Elementen differenziert. Die interaktiven Elemente unterteilen sich in Buttons,<br />
Anchor Elemente und Input-Elemente, die solche User-Interface-Elemente wie Textinput und<br />
Fileinput beinhalten. All die abstrakten Klassen bekamen eine Anzahl neuer Attribute, in<br />
welchen die RIA-Eigenschaften beschrieben sind.<br />
Darüber hinaus wurde die PresentationClass in die PresentationGroup umbenannt. Außerdem<br />
werden folgende Elemente umbenannt: Page zu PresentationPage, Choice zu Selection<br />
und Form zu InputForm.<br />
Die Klasse Anchored<strong>Co</strong>llection wird nicht weiter unterstützt, stattdessen soll entweder ein<br />
Anchor mit der Angabe der dazugehörigen Multiplizität oder eine IteratedPresentationGroup<br />
eingesetzt werden.<br />
Einige neue Klassen zur Unterstützung der RIA Eigenschaften wurden eingeführt, darunter:<br />
Tab, MediaObject, Fileinput und Custom<strong>Co</strong>mponent. In der Tabelle 3.3 sind alle Änderungen<br />
übersichtlich dargestellt. Dabei ist die Kategorie und der Typ jeder Änderung entsprechend<br />
der Kategorisierung aus dem Kapitel 3.2 angegeben.<br />
Zu jeder der Metamodell-Änderungen aus der Kategorie der ” breaking and resolvable changes“<br />
wird im Folgenden je eine Transformation definiert, die eine automatisierte Überführung<br />
der existierenden <strong>Modell</strong>en auf die neue Version ermöglichen. Bei den ” non-breaking changes“<br />
28
3.4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> der UWE-Präsentationsmodelle<br />
Abbildung 3.6.: UWE-Präsentations-Metamodell. Version 1.8<br />
29
3. Die <strong>Modell</strong>evolution und die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />
Änderungstyp Änderungen Metamodellelemente<br />
Non-breaking changes<br />
Breaking and resolvable changes<br />
Das Einfügen einer nicht obligatorischen Metaklasse Tab, MediaObject, Custom<strong>Co</strong>mponent<br />
Das Einfügen einer nicht obligatorischen Metaeigenschaft Attribute der Klassen: UIElement, PresentationGroup,<br />
ValuedElement, OutputElement,<br />
InputElement<br />
Das Extrahieren einer abstrakten Superklasse ValuedElement, InputElement, OutputElement,<br />
InteractiveElement<br />
Das Löschen einer Metaklasse Anchored<strong>Co</strong>llection<br />
Das Umbenennen eines Metaelements PresentationClass - PresentationGroup, Page<br />
- PresentationPage, Form - InputForm, Choice<br />
- Selection<br />
Tabelle 3.3.: Überblick der Metamodell-Änderungen im Bezug auf Änderungstypen<br />
muss keine Aktion ausgeführt werden, da diese Änderungen die Gültigkeit der existierenden<br />
<strong>Modell</strong>en nicht verletzen.<br />
Wie oben beschrieben kann für alle durch die <strong>Modell</strong>-<strong>Evolution</strong> betroffenen Elemente außer<br />
Anchored<strong>Co</strong>llection eine eindeutige Strategie für die Anpassung der entsprechenden <strong>Modell</strong>elementen<br />
angegeben werden. Im Falle der Klasse Anchored<strong>Co</strong>llection sind zwei Alternativen<br />
möglich. Es ist zu entscheiden ob eine Automatisierung der Überführung der Anchored<strong>Co</strong>llection-Elemente<br />
in die <strong>Modell</strong>e der neuen Version stattfinden soll, oder die Anpassung der<br />
Anchored<strong>Co</strong>llections durch den <strong>Modell</strong>ierer manuell erfolgen soll. Im Weiteren wird die Alternative<br />
mit der Umsetzung durch die IteratedPresentationGroup in den Transformationen<br />
übernommen. Die Wahl beruht auf der Tatsache, dass die Beschreibung zu dem Einsatz des<br />
Anchored<strong>Co</strong>llections in ” UWE Metamodel and Profile User Guide and Reference“ in der<br />
Version 1.7 [15] und der IteratedPresentationGroup in der Version 1.9 [6] dieselbe ist. Sie<br />
lautet, dass diese Elemente für die Präsentation eines Menüs oder eines Indexes verwendet<br />
werden können.<br />
Somit ist im Falle der UWE-Präsentationsmodelle eine komplett automatisierte transformative<br />
Model-<strong>Co</strong>-<strong>Evolution</strong> möglich, was dadurch bedingt ist, dass keine der Metamodell-<br />
Änderungen den Änderungstyp ” breaking and unresolvable changes“ hat.<br />
3.5. Zusammenfassung<br />
Metamodelle wie auch alle Softwareartefakte ändern sich im Laufe der Zeit. <strong>Evolution</strong> der<br />
Metamodelle betrifft unterschiedliche <strong>Modell</strong>ierungsartefakte, die mit dem entsprechenden<br />
Metamodell in einer Beziehung stehen, solche wie existierende <strong>Modell</strong>e, <strong>Modell</strong>transformationen,<br />
<strong>Modell</strong>ierungstools, Dokumentation und Anforderungen. Die <strong>Modell</strong>e stellen die<br />
Grundlage einer modellgetriebenen Entwicklung dar. Somit müssen die <strong>Modell</strong>e infolge einer<br />
Metamodell-<strong>Evolution</strong> als Erstes angepasst werden. In dieser Arbeit liegt der Fokus auf der<br />
<strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>.<br />
In diesem Kapitel wurde eine umfangreiche Beschreibung der Metamodelländerungen mit<br />
einer Diskussion über die Auswirkungen dieser Änderungen auf die Metamodellinstanzen<br />
vorgeführt. Anschließend wurde die Typologie zur Unterscheidung der möglichen Auswir-<br />
30
3.5. Zusammenfassung<br />
kungen der Änderungen auf die existierenden <strong>Modell</strong>e erläutert. Die ” breaking and resolvable<br />
changes“ des Metamodells haben keine Auswirkungen auf die Metamodellinstanzen.<br />
Die ” breaking and resolvable changes“ sind sehr interessant, da deren Auswirkungen auf<br />
die existierende <strong>Modell</strong>e automatisiert mithilfe der <strong>Modell</strong>transformationen beseitigt werden<br />
können.<br />
Sobald die Metamodell-<strong>Evolution</strong> eine der ” breaking and unresolvable changes“ mit sich<br />
bringt, bei denen eine Abhilfe wie z.B. die Definition eines Default-Wertes nicht anwendbar<br />
ist, kann die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> von betroffenen <strong>Modell</strong>elementen ausschließlich manuell<br />
erfolgen. Diese Tatsache stellt eine große und unlösbare Problematik dieses Bereiches dar.<br />
Eine ultimative Lösung dieses Problems ist nicht in Sicht.<br />
Zusätzlich ist die klare Trennung zwischen den Metamodell-<strong>Evolution</strong>-Kategorien leider nicht<br />
möglich. In der Wirklichkeit zeigen die Erfahrungen, dass Metamodell-<strong>Evolution</strong> nicht immer<br />
auf eine Sequenz der atomaren <strong>Co</strong>-<strong>Evolution</strong>sschritte zurückgeführt werden kann.[7]<br />
Grundsätzlich wird auf das Metamodell im Rahmen des <strong>Evolution</strong>sprozesses zeitgleich eine<br />
komplexe Kombination der Änderungen angewendet. Zudem gehören diese Änderungen<br />
zu verschiedenen Typen und weisen Abhängigkeiten voneinander auf. Die <strong>Co</strong>-<strong>Evolution</strong>-<br />
Strategie sollte in diesem Fall nicht nur auf der oben vorgestellten Klassifizierung beruhen,<br />
sondern auch auf den Entscheidungen des <strong>Modell</strong>ierers. Diese Entscheidungen basieren auf<br />
seinem Wissen über das Fachgebiet und die Zusammenhänge im konkreten <strong>Modell</strong>.<br />
Insgesamt soll der <strong>Co</strong>-<strong>Evolution</strong>-Prozess in möglichst großen Umfang automatisiert verlaufen.<br />
Anschließend sollen für die einzelnen ” breaking and unresolvable changes“ durch den<br />
<strong>Modell</strong>ierer eine konkrete Strategie für die betroffenen <strong>Modell</strong>elemente spezifiziert werden,<br />
was eine Eindeutigkeit der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> erzielen soll. Die Eindeutigkeit der <strong>Modell</strong>-<br />
<strong>Co</strong>-<strong>Evolution</strong> wird nur dann gewährleistet, wenn alle möglichen zulässigen Varianten der<br />
<strong>Co</strong>-<strong>Evolution</strong>-Strategie berücksichtigt, dokumentiert und im Rahmen des Projekts für alle<br />
zugänglich gemacht werden.<br />
<strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> soll im Rahmen der UWE-Methodologie ermöglicht werden. Eine ausführliche<br />
Beschreibung der Metamodelldifferenzen eines UWE-Metamodellausschnitts in der<br />
Versionen 1.7 und 1.8 wurde in diesem Kapitel vorgenommen. Es hat sich ergeben, dass die<br />
Änderungen, die das UWE-Metamodell üblicherweise während dessen Weiterentwicklung<br />
erfährt unter die Kategorien der ” unbreaking changes“ oder der ” breaking and resolvable<br />
changes“ gehören. Somit ist eine vollautomatisierte Überführung der existierenden <strong>Modell</strong>e<br />
möglich. Das UWE-Metamodell ist in Teilmodelle unterteilt. Jedes davon ist sehr übersichtlich<br />
und besitzt konkret definierte <strong>Modell</strong>elemente. Somit ist die automatisierte <strong>Modell</strong>-<strong>Co</strong>-<br />
<strong>Evolution</strong> für UWE-<strong>Modell</strong>e ein sich gut rentierender Ansatz, deren Einsatz viel Zeit sparen<br />
kann und eine hohe Qualität der <strong>Modell</strong>e bei der Versionsmigration gewährleistet.<br />
Im nächsten Kapitel wird ein transformativer Ansatz für die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> eines<br />
Ausschnittes des UWE-Metamodells vorgestellt.<br />
31
3. Die <strong>Modell</strong>evolution und die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />
32
4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter<br />
transformativer Ansatz<br />
In diesem Kapitel wird ein transformativer Ansatz beschrieben, der die automatisierte <strong>Modell</strong>-<br />
<strong>Co</strong>-<strong>Evolution</strong> der UWE-Präsentationsmodelle realisiert. Für die Umsetzung der Transformationen<br />
wird die relationale QVT-Sprache verwendet. Im vorangehenden Kapitel wurden die<br />
Änderungen zwischen den Präsentationsmetamodellen der Version 1.7 und 1.8 erläutert und<br />
gemäß der im Kapitel 3 vorgestellten Typologie in zwei Gruppen eingeteilt.<br />
Zu der ersten Gruppe gehören die Änderungen, die keine <strong>Co</strong>-<strong>Evolution</strong>-Aktion an den existierenden<br />
<strong>Modell</strong>en bedingen. Die zweite Gruppe beinhaltet die Änderungen des UWE-Präsentationsmetamodells,<br />
die zur Notwendigkeit der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> der existierenden <strong>Modell</strong>e<br />
führen. Für jede Änderung an einem UWE-Metamodellelement aus der zweiten Gruppe<br />
kann eine Relation in der relationalen QVT-Sprache definiert werden. Diese Relation generiert<br />
anhand der für die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> betroffenen <strong>Modell</strong>elemente der existierenden<br />
<strong>Modell</strong>e die geänderten <strong>Modell</strong>elemente, die konform zu der neuen UWE-Metamodell-Version<br />
sind. Nach einer Einführung in die relationale QVT-Sprache und ihre Konzepte werden all<br />
diese Relationen im Rahmen einer QVT-Transformation definiert und detailliert beschrieben.<br />
Die OMG veröffentlichte die Spezifikation der Query-View-Transformations (QVT), welche<br />
in Form der QVT-Sprachen Definitionen die Grundlagen und Richtlinien für die Transformationen<br />
vorgibt. Da die OMG keine Implementierungen des QVTs vorgibt, werden die<br />
Implementierungen von verschiedenen Tool-Herstellern bereitgestellt. Zu diesem Zeitpunkt<br />
gibt die Implementierung von mediniQVT am besten die Spezifikation der relationalen<br />
QVT-Sprache(QVT-Relations) wieder. Im Rahmen dieser Arbeit wird daher die medini-<br />
QVT Implementierung der relationalen Sprache für die Erfassung der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>-<br />
Transformationen verwendet.<br />
4.1. Der fundamentale Aufbau von Transformationsskript in der<br />
relationalen QVT-Sprache<br />
Die QVT-Spezifikation der OMG eignet sich leider nicht gut als ein Lehrbuch für die relationale<br />
QVT-Sprache. Siegfried Nolte hat ein sehr umfangreiches Buch über die relationale<br />
QVT-Sprache veröffentlicht[19]. Das Buch beinhaltet die Beschreibung der generellen<br />
Konzepte der relationalen QVT-Sprache, viele nützliche Beispiele und die Anleitungen zur<br />
Ausführung der Transformationen mithilfe von dem mediniQVT-Tool. Der Autor hat sich<br />
mit der relationalen Sprache auseinander gesetzt und sehr ausführliche und hilfreiche Definitionen<br />
verfasst. Nach Nolte lässt sich die Query View Transformations so interpretieren:<br />
33
4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />
• Query: ” Die Query ist die Beschreibung einer Anfrage bezogen auf ein Quellmodell,<br />
um den Kandidaten für die Transformation zu ermitteln. Der Kandidat für die Transformation<br />
ist entweder Quellmodell selbst oder ein spezieller Ausschnitt des <strong>Modell</strong>s,<br />
welcher durch die Abfrage, die Query, eingegrenzt wird.“[19]<br />
• View: ” Die View ist die Beschreibung einer Sicht, wie das Ergebnis im Zielmodell<br />
aussehen soll.“[19]<br />
• Transformation ” Die Transformation ist der Prozess, das konkrete Quellmodell mit<br />
den definierten Query zu ermitteln und in das Zielmodell zu überführen.“[19]<br />
Mit einer Query wird aus einem Quellmodell stützend auf sein formales Metamodell eine<br />
bestimmte Untermenge deren Elemente selektiert. Eine spezielle View legt ein Zielmodell<br />
fest, welches in vollem Umfang aus den Quellmodellelementen hergeleitet wird. Unter dem<br />
Einsatz einer Transformation wird aus den selektierten Quellmodellelementen die vorher<br />
festgelegte View generiert. Dies bezeichnet Nolte in seinem Buch als das QVT-Prinzip. [19]<br />
Im Rahmen der Transformation werden zwischen den Elementen des Quellmodells und den<br />
Elementen des Zielmodells, die Bezug zueinander haben, Relationen definiert. Die Relationen<br />
beschreiben in Form der Musterdefinitionen konkret das gültige Erscheinungsbild des<br />
Zielmodells. Diese Vorgehensweise wird als ” Pattern Matching“ genannt.[19]<br />
Die relationale QVT-Sprache operiert mit folgenden Sprachkonstrukten: transformation, top<br />
relation, enforce und checkonly domain usw. In der Abbildung 4.1 ist der generelle Aufbau<br />
von Transformationen der relationalen QVT-Sprache zu sehen. Hierbei handelt es sich um<br />
einen generellen Überblick über die Sprachelemente und deren Beziehungen.[19]<br />
34<br />
• Eine QVT-Transformation (transformation) generiert aus Quellmodell ein Zielmodell,<br />
wobei dem Quell- und dem Zielmodell je ein bestimmtes Metamodell zugrunde<br />
liegt. Es können bei dem Input wie bei dem Output einer Transformation jeweils mehr<br />
als ein <strong>Modell</strong> angegeben werden.<br />
• Der Bezug einer konkreten Teilmenge des Quellmodells auf die Elemente des Zielmodells<br />
wird in den Relationen dargestellt. Eine Transformation soll mindestens eine<br />
Relation besitzen.<br />
• Eine oder mehrere Domänen können in einer Relation enthalten sein. Die Definition<br />
der Regeln für die Gültigkeit der <strong>Modell</strong>elemente wird mit Hilfe von sogenannten<br />
Domänenmustern (domain patterns) vorgenommen, die in Form einer Domäne<br />
(domain) einer Relation hinzugefügt werden.<br />
• Jede Domäne außer primitiven Domänen beinhaltet so ein Domänenmuster. Die primitiven<br />
Domänen werden dafür eingesetzt um die einfachen Datentypen, wie z.B. String<br />
als Argumente übergeben zu können. Die restlichen Domänen können als getypte Variable<br />
verstanden werden, die ein Metamodellelement in einer speziellen Form darstellt. In<br />
der Domänenmuster-Definition (pattern definition) erfolgt die Selektion der Eigenschaften<br />
des ausgewählten Metamodellelements, um von diesem Metamodellelement<br />
ausgehend die Elemente in dem Zielmodell zu generieren.<br />
• Die optionalen when- oder where-Klauseln können Bedingungen in Form der OCL-<br />
Ausdrücke enthalten. Mit Hilfe dieser Bedingungen wird die Gültigkeitsprüfung der<br />
Relation zusätzlich verschärft.
4.1. Der fundamentale Aufbau von Transformationsskript in der relationalen QVT-Sprache<br />
Abbildung 4.1.: Der Aufbau einer Transformation in der relationalen QVT-Sprache [19]<br />
• Darüber hinaus ist es möglich spezielle Hilfsfunktionen (queries), die mit OCL-Anweisungen<br />
umgesetzt werden, zu definieren. Die Hilfsfunktionen werden außerhalb der Relationen<br />
erstellt.<br />
• Die Verwendung der Variablen ist ausschließlich in den Relationen zugelassen. Dabei<br />
können es beliebige OCL-Variablen sein: primitive Datentypen (String, Boolean),<br />
Sammlungstypen (Set(String)) oder Variablen von einem Objekttyp (Class, Set(Attribute)<br />
etc.)<br />
• Bedingungen, domain patterns und queries werden mithilfe der OCL-Ausdrücke<br />
umgesetzt.<br />
• Eine optionale Spezifikation von keys schließt die Generierung von Duplikaten im<br />
Zielmodell aus.<br />
35
4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />
Textuell ergibt sich folgender syntaktischer Aufbau einer Transformation:<br />
1 transformation <br />
2 (<br />
3 [ , ]∗<br />
4 )<br />
5 /∗ d i e f o l g e n d e Angabe i s t o p t i o n a l ∗/<br />
6 [ key { [ ,<br />
7 ]∗ } ; ] ∗<br />
8 −− mindestens e i n e Relation auf dem obersten Level muss es geben −−<br />
9 [ [ top ] relation <br />
10 {<br />
11 [ : ; ] ∗<br />
12 −− mindestens e i n e Domäne muss es geben −−<br />
13 [ [ checkonly | enforce ]<br />
14 domain : <br />
15 {<br />
16 [ , ]∗<br />
17 } ; ]+<br />
18 −− checkonly und e n f o r c e domains b e s i t z e n Patterns , −−<br />
19 −− p r i m i t i v e domains n i c h t −−<br />
20 [ p r i m i t i v e domain :<br />
21 ; ] ∗<br />
22 −− c o n d i t i o n s sind optional , a l l e r d i n g s unter −−<br />
23 −− Umständen unverzichtbar , z .B. f ü r r e l a t i o n − −−<br />
24 −− oder function −c a l l s −−<br />
25 [ when { } ]<br />
26 [ where { } ]<br />
27 }]+<br />
28 −− o p t i o n a l e H i l f s f u n k t i o n e n −−<br />
29 [ query ( [ [ , ] ] ∗ )<br />
30 {} ] ∗<br />
31 }<br />
Listing 4.1: Der Syntaktischer Aufbau eines Transformationsskriptes[19]<br />
Für die Definition der Hilfsfunktionen, sowie der Regeln in den where- und den when-<br />
Klauseln steht die komplette OCL-Sprache zur Verfügung.<br />
Im nächsten Kapitel wird näher auf die formale Beschreibung der relationalen QVT-Sprache<br />
eingegangen. Dabei wird für jedes oben beschriebenes Element der Sprache die Syntax angegeben.<br />
In den darauf folgenden Kapiteln werden die Transformationen, welche die UWE-<br />
Präsentationsmodell-<strong>Co</strong>-<strong>Evolution</strong> ermöglichen, detailliert beschrieben.<br />
4.2. Die relationalen Transformationen. Eine Formale Darstellung<br />
der Konzepte<br />
Nach der Einführung in den Aufbau einer QVT-Transformation, soll nun die Erläuterung<br />
der Hauptsprachmittel folgen, mit denen die Transformationen erarbeitet werden.<br />
36
4.2. Die relationalen Transformationen. Eine Formale Darstellung der Konzepte<br />
4.2.1. Die Transformationen<br />
Eine Transformation (transformation) wird als eine Relation zwischen <strong>Modell</strong>en betrachtet,<br />
die einen Namen besitzt und in Form einer Parameterliste <strong>Modell</strong>e deklariert. Jedes<br />
<strong>Modell</strong> besitzt einen Namen und einen Typ. Der Typ wird durch das entsprechende Metamodell<br />
bestimmt.[19]<br />
Die Syntax:<br />
1 transformation <br />
2 ( [ , ] ∗ )<br />
3 {<br />
4 [ ] ∗<br />
5 [ ] ∗<br />
6 [ ] ∗<br />
7 }<br />
Listing 4.2: Der Syntaktischer Aufbau einer Transformation[19]<br />
Die Definition der Relationen zwischen den <strong>Modell</strong>elementen legt die Grundlage für die<br />
Überführung eines <strong>Modell</strong>s in ein anderes fest. Die UWE-Präsentationsmodelle in der Version<br />
1.7, im weiteren SimpleUWEold-<strong>Modell</strong>e genannt, bestehen aus Paketen4.3, die folgende<br />
Elemente enthalten können: Pages, Presentation Classes, Presentation Groups, Text, Buttons<br />
usw. Wobei Pages, PresentationClasses und Presentation Groups Properties besitzen.<br />
Das Beispiel:<br />
1 transformation mapUWEversion ( s r c : SimpleUWEold , t r g : SimpleUWEnew )<br />
2 {<br />
3 −−keys−−<br />
4 top relation mapPackage {−− body −−}<br />
5 top relation mapPage {−− body −−}<br />
6 relation mapProperty {−− body −−}<br />
7 top relation mapPresClass {−− body −−}<br />
8 top relation mapPresGroup {−− body −−}<br />
9 top relation mapText {−− body −−}<br />
10 top relation mapAnchor {−− body −−}<br />
11 top relation mapImage {−− body −−}<br />
12 top relation mapButton {−− body −−}<br />
13 top relation mapTextInput {−− body −−}<br />
14 top relation mapAnchored<strong>Co</strong>l {−− body −−}<br />
15 top relation mapForm {−− body −−}<br />
16 −− q u e r i e s−−<br />
17 }<br />
Listing 4.3: Das Beispiel einer Transformation[19]<br />
Innerhalb der Transformationen können außer Relationen zusätzliche Hilfsfunktionen und<br />
Abfragen (queries) definiert werden, die aus einfachen oder komplexen OCL-Ausdrücken<br />
bestehen. Die Hilfsfunktionen lassen sich bei Bedarf in Form externer Dateien auslagern, die<br />
über eine Import-Anweisung eingebunden werden können.[19]<br />
37
4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />
4.2.2. Die Relationen<br />
Eine Relation (relation) ist das primäre Element einer Transformation. In Form von Domänenmustern<br />
(domain patterns) werden in den Domänen einer Relation die Selektionsbedingungen<br />
für einen <strong>Modell</strong>auschnitt angegeben, der der Transformation als Quellmodell unterzogen<br />
wird. Der Mechanismus ist einer ebenfalls deskriptiven SQL-Abfrage auf einen relationalen<br />
Datenbestand ähnlich. Nur die <strong>Modell</strong>elemente, die dem Domänenmuster genügen, werden<br />
in die Transformation miteinbezogen. Innerhalb einer Relation können Variablen deklariert<br />
und verwendet werden, die in allen Domänen dieser Relation als global gelten. Die Variablen<br />
können vom Typ eines Elements aus den Metamodellen sein oder den beliebigen<br />
OCL-Datentyp besitzen.[19]<br />
Das Beispiel:<br />
1 transformation mapUWEversion ( s r c : SimpleUWEold , t r g : SimpleUWEnew )<br />
2 {<br />
3 −− E r s t e l l t e i n P r e s e n t a t i o n Paket im Z i e l m o d e l l −−<br />
4 −− mit dem Namen und dem Attribut kind aus Quellmodell −−<br />
5 top relation mapPackage<br />
6 {<br />
7 packageName : String ;<br />
8 packageKind : String ;<br />
9 checkonly domain s r c srcPckg : SimpleUWEold : : Package<br />
10 {<br />
11 name = packageName ,<br />
12 kind = packageKind<br />
13 } ;<br />
14 enforce domain t r g tgtPckg : SimpleUWEnew : : Package<br />
15 {<br />
16 name = packageName ,<br />
17 kind = packageKind<br />
18 } ;<br />
19 −− when−p r e d i c a t e −−<br />
20 −− where−p r e d i c a t e −−<br />
21 }<br />
Listing 4.4: Das Beispiel einer Relation<br />
Das Präsentationspaket soll mithilfe der Relation aus dem Listing 4.4 kopiert werden. Zuerst<br />
wird der Name und das Attribut kind des Pakets in den Variablen zwischengespeichert<br />
und anschließend in der folgenden Domäne dem Namen und dem Attribut kind des zu<br />
generierenden Pakets zugewiesen.<br />
Die Arten von Relationen<br />
Es wird zwischen zwei Arten von Relationen unterschieden[19]:<br />
38<br />
• top-level-Relation ist eine Relation, die unmittelbar bzw. implizit ausgeführt wird,<br />
sobald bei der Transformation eines <strong>Modell</strong>s das <strong>Modell</strong>element gefunden wird, für<br />
welches die Selektionsbedingungen aus einer Domäne der Relation erfüllt sind. Solche<br />
Relationen werden mit dem Schlüsselwort top gekennzeichnet.
4.2. Die relationalen Transformationen. Eine Formale Darstellung der Konzepte<br />
• non-top-level-Relation ist eine Relation, welche durch einen expliziten Aufruf aus<br />
einer anderen Relation heraus, ausgeführt wird. Diese Relationen werden mit keinem<br />
Schlüsselwort gekennzeichnet.<br />
Es muss mindestens eine top-level-Relation im Rahmen einer Transformation geben. Ansonsten<br />
wird eine solche Transformation keine Wirkung erzielen. In dem Listing 4.5 sind<br />
alle Relationen außer der mapProperty-Relation als top-level-Relationen deklariert. Wird<br />
bei der Abarbeitung eines <strong>Modell</strong>s ein bestimmtes Element gelesen, so wird die entsprechende<br />
top-level-Relation aufgerufen. Die mapProperty wird nur in dem Fall ausgeführt, wenn<br />
die Relation mapProperty explizit innerhalb von z.B. mapPage aufgerufen wird. Dabei muss<br />
beachtet werden, dass die top-level Relationen nur innerhalb der when-Klauseln aufgerufen<br />
werden können. Non-top-level-Relationsaufrufe dürfen ausschließlich innerhalb der where-<br />
Klauseln stehen.<br />
Mit jeder Ausführung von der mapPage Relation, wie in der Zeile 5 im Listing 4.5 steht, wird<br />
zuerst wegen des Aufrufs unter der when-Klausel die mapPackage Relation aufgerufen. Damit<br />
wird sichergestellt, dass zu dem Paket in dem sich die Page befindet ein entsprechendes<br />
Paket in dem Zielmodell bereits existiert.<br />
Das Beispiel:<br />
1 transformation mapUWEversion ( s r c : SimpleUWEold , t r g : SimpleUWEnew )<br />
2 {<br />
3 −−keys−−<br />
4 top relation mapPackage {−− body −−}<br />
5 top relation mapPage<br />
6 {<br />
7 −− body −−<br />
8 when<br />
9 {<br />
10 mapPackage (−−arguments−−) ;<br />
11 }<br />
12 where<br />
13 {<br />
14 mapProperty (−−arguments−−) ;<br />
15 }<br />
16 }<br />
17 relation mapProperty {−− body −−}<br />
18 −− q u e r i e s−−<br />
19 }<br />
Listing 4.5: Das Beispiel einer Relation unter dem Einsatz der when- und where-Klauseln<br />
In der where-Klausel in der Zeile 14 vom Listing 4.5 wird durch den Aufruf der Relation<br />
mapProperty sichergestellt, dass bei jeder Erzeugung von Page-Elements im Zielmodell auch<br />
die Erstellung von deren Attribute erzwungen wird.<br />
4.2.3. Die Domänen<br />
Nur die gültigen Relationen werden bei der Abarbeitung einer Transformation herangezogen.<br />
Durch die Definition der domain pattern werden die Regeln für die Gültigkeit der<br />
39
4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />
Relation definiert. Eine Domäne repräsentiert die <strong>Modell</strong>elemente eines Metamodells als getypte<br />
Variable, die Root-Variable genannt wird. Der Domänenname und die Deklaration<br />
der Root-Variablen bilden die Signatur einer Domäne. Anschließend wird das Domänenmuster<br />
definiert. Mit dem Schlüsselwort checkonly wird gekennzeichnet, dass die Gültigkeit<br />
der Domäne geprüft wird, dies ist bei den Quellmodellelementen der Fall. Das enforce<br />
kennzeichnen die Domänen, deren Gültigkeit erzwungen wird. Erzwungen werden die<br />
Zielmodellelemente.[19]<br />
Die Syntax:<br />
1 [ checkonly | enforce ] domain <br />
2 <br />
3 {<br />
4 [ , ] ∗<br />
5 } ;<br />
Listing 4.6: Die Syntax einer Domäne[19]<br />
Mit wird ein <strong>Modell</strong>element bei der Argumentenliste der Transformation deklariert.<br />
Ein Domänenmuster enthält neben dem Definitionsteil einen prozeduralen Teil<br />
(pattern expression), der wiederum aus einer oder mehreren durch Kommata getrennten<br />
Zuweisungsoperationen(template expressions) besteht. Mithilfe Pattern Matching werden<br />
bestimmte <strong>Modell</strong>elemente im Rahmen des prozeduralen Teils geprüft(checkonly) oder<br />
erzwunden(enforce).[19]<br />
Die Relation mapPackage aus dem Listing 4.7 definiert die Beziehung zwischen den Paketen<br />
im <strong>Modell</strong> SimpleUWEold und den Paketen im dem <strong>Modell</strong> SimpleUWEnew. Die Root<br />
Variable srcPckg repräsentiert die Menge aller Pakete in SimpleUWEold, die das definierte<br />
Domänenmuster erfüllen. Die Variable trgPckg repräsentiert das zu generierende Paket im<br />
Zielmodell.<br />
1 top relation mapPackage<br />
2 {<br />
3 pckgName : String ;<br />
4 checkonly domain s r c srcPckg : SimpleUWEold : : Package<br />
5 {<br />
6 name = pckgName<br />
7 } ;<br />
8 enforce domain t r g tgtPckg : SimpleUWEnew : : Package<br />
9 {<br />
10 name = pckgName<br />
11 } ;<br />
12 }<br />
Listing 4.7: Das Beispiel eines prozeduralen Teil(pattern expression) einer Domäne<br />
Der Typname der Root-Variablen wird hier in vollständig spezifizierter Form angegeben, welche<br />
es erlaubt die Elemente der Metamodelle mit gleichen Namen eindeutig zu unterscheiden:<br />
:: <br />
also in Fall der Root-Variable:<br />
40
4.2. Die relationalen Transformationen. Eine Formale Darstellung der Konzepte<br />
srcPckg : SimpleUWEold::Package<br />
Es wird zwischen vorher deklarierten Variablen (variable template expressions) und<br />
den object template expressions, welche die <strong>Modell</strong>elemente zum Gegenstand haben,<br />
unterschieden.<br />
Als Hilfsmittel zur Speicherung des Namens des Paket wird eine freie Variable pckgName<br />
vom Typ String deklariert. In diesem Beispiel wird bei der Zuweisungsoperation eine variable<br />
template expression verwendet. Als Beispiel einer Komponente der Root-Variable<br />
vom Typ SimpleUWEold::Package dient name aus der Zeile 6 des Listings 4.7.<br />
Die Komponenten der Root-Variable stehen stets auf der linken Seite der Zuweisungsoperation.<br />
Auf der rechten Seite einer Zuweisungsoperation kann eine freie Variable, ein OCL-<br />
Ausdruck oder ein konkreter Wert seinen Platz haben. Der Checkonly-Teil wird vor dem<br />
Enforce-Teil ausgeführt, somit enthält die pckgName Variable bei jeden Ausführung der<br />
Transformation den aktuellen Wert des Namens des Packages aus SimpleUWEold. Dabei<br />
wird der Name des Pakets srcPckg wegen des checkonly-Status nicht verändert.<br />
In der darauf folgenden Domäne wird der Wert der Variable pckgName dem Namen des<br />
tgtPckg vom Typ SimpleUWEnew::Package zugewiesen. Bei jeder Ausführung dieser Relation<br />
wird ein Package des Typs SimpleUWEnew mit denselben Namen wie das ursprüngliche<br />
srcPckg Paket erzwungen.<br />
Eine Relation kann sowohl über mehrere checkonly-Domänen als auch mehrere enforce-<br />
Domänen verfügen. Bei der Ausführung einer Transformation wird zuerst die Gesamtmenge<br />
der checkonly-Domänen abgearbeitet und gültige <strong>Modell</strong>elemente aus dem Quellmodell selektiert.<br />
Ist ein <strong>Modell</strong>element selektiert, so wird die Generierung dieses Elements stattfinden.<br />
Dies wird check-before-enforce Semantik genannt und bildet ein wichtiges Konzept der<br />
relationalen QVT-Sprache.[19]<br />
4.2.4. Die when- und where-Klauseln<br />
Bestimmte Vorbedingungen und Invarianten können durch die Eingabe spezieller Prädikaten<br />
innerhalb der der when- und where-Klauseln geprüft oder hergestellt werden[19]:<br />
• Mithilfe einer when-Klausel werden die Vorbedingungen festgelegt, die erfüllt sein<br />
müssen, damit die Relation ausgeführt wird.<br />
• Mithilfe einer where-Klausel werden die Invarianten definiert. Für alle <strong>Modell</strong>elemente<br />
der Relation zu jedem Zeitpunkt während der Abarbeitung der Relation werden die<br />
Invarianten geprüft. Bei jedem Zugriff auf eine der veränderbaren Variablen müssen<br />
die Invarianten hergestellt werden.<br />
Innerhalb der when- und where-Klauseln dürfen beliebige, durch Semikola getrennte OCL-<br />
Ausdrücke stehen, wobei folgende Regeln beachtet werden müssen[19]:<br />
• Die top-level-Relationen dürfen nur in when-Klauseln explizit aufgerufen werden.<br />
41
4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />
• Die non-top-level-Relationen dürfen nur in where-Klauseln aufgerufen werden.<br />
• Die Funktionen dürfen nur in where-Klauseln aufgerufen werden.<br />
Das Beispiel einer where-Klausel:<br />
1 top relation mapPackage<br />
2 {<br />
3 pckgName : String ;<br />
4 checkonly domain s r c srcPckg : SimpleUWEold : : Package<br />
5 {<br />
6 name = pckgName<br />
7 } ;<br />
8 enforce domain t r g tgtPckg : SimpleUWEnew : : Package<br />
9 {<br />
10 name = pckgName<br />
11 } ;<br />
12 −− Hier e i n e Bedingung : der Name des Packages −−<br />
13 −− s o l l P r e s e n t a t i o n heißen −−<br />
14 where<br />
15 {<br />
16 name = ’Presentation’ ;<br />
17 }<br />
18 }<br />
Listing 4.8: Beispiel einer where-Klausel<br />
Beim Zugriff auf die freie Variable pckgName in de enforce domain in der Zeile 6 des<br />
Listings 4.8, wird für pckgName mithilfe der where-Klausel ein definierter Zustand hergestellt,<br />
nämlich pckgName enthält den Wert ’Presentation’. Damit wird sichergestellt, dass<br />
ausschließlich Präsentations-Pakets zur Transformation herangezogen werden. Wird bei der<br />
Ausführung der Transformation ein Paket mit einem anderen Namen gefunden, so wird diese<br />
nicht für die Generierung eines Zielpakets selektiert.<br />
4.2.5. Object Template Expressions und Inline-Objekterzeugung<br />
Wie im Kapitel 4.2.3 erläutert, können Zuweisungsausdrücke eines Domänenmusters object<br />
expressions sein, wenn es sich um Instanzen von <strong>Modell</strong>en oder von <strong>Modell</strong>elementen handelt,<br />
oder variable expressions, wenn es sich um Variablen handelt. “Ein object template<br />
expression ist ein Ausdruck innerhalb eines Domänenmusters, der sich auf ein Element des<br />
assoziierten <strong>Modell</strong>s bezieht.”[19]<br />
Das Beispiel:<br />
1 top relation mapText<br />
2 {<br />
3 textName : String ;<br />
4 srcPackage : SimpleUWEold : : Package ;<br />
5 trgPackage : SimpleUWEnew : : Package ;<br />
6 checkonly domain s r c te : SimpleUWEold : : Text<br />
7 {<br />
8 namespace = srcPackage ,<br />
9 name = textName<br />
42
10 } ;<br />
4.2. Die relationalen Transformationen. Eine Formale Darstellung der Konzepte<br />
11 enforce domain t r g te2 : SimpleUWEnew : : Text<br />
12 {<br />
13 namespace = trgPackage ,<br />
14 name = textName<br />
15 } ;<br />
16 }<br />
Listing 4.9: Das Beispiel einer object template expression<br />
Das Muster der Domäne domain src, dass sich auf ein <strong>Modell</strong> vom Typ SimpleUWEold<br />
bezieht, ist insgesamt ein object template expression, der sich auf die Instanz text vom<br />
Typ Text bezieht. Zwei Zuweisungen sind in dem Domänenmuster enthalten: einen Variablenausdruck<br />
name = textName und einen Objektausdruck namespace = trgPackage. Das<br />
Domänenmuster kann alternativ wie folgt definiert werden[19]:<br />
1 top relation mapText<br />
2 {<br />
3 textName : String ;<br />
4 checkonly domain s r c te : SimpleUWEold : : Text<br />
5 {<br />
6 namespace = srcPackage : SimpleUWEold : : Package {} ,<br />
7 name = textName<br />
8 } ;<br />
9 enforce domain t r g te2 : SimpleUWEnew : : Text<br />
10 {<br />
11 namespace = trgPackage : SimpleUWEnew : : Package {} ,<br />
12 name = textName<br />
13 } ;<br />
14 when<br />
15 {<br />
16 mapPackage ( srcPackage , trgPackage ) ;<br />
17 }<br />
18 }<br />
Listing 4.10: Das Beispiel einer object template expression. Alternative<br />
Hier wird das Paket srcPackage in der Zeile 6 implizit mithilfe einer inneren ein object template<br />
expression deklariert und verwendet. Dabei ist dieser Objektzuweisungsausdruck mit<br />
der vordeklarierten Objektvariablen nicht gleichzusetzen. Implizite Zuweisung durch ein object<br />
template expression bedeutet folgendes[19]:<br />
namespace = srcPackage : SimpleUWEold::Package<br />
was folgendem OCL-Ausdruck entspricht:<br />
namespace->includes(srcPackage)<br />
Demgegenüber impliziert die Alternative mit einer vordefinierten Variablen:<br />
namespace = srcPackage<br />
43
4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />
Manchmal kommt es vor, dass <strong>Modell</strong>elemente im Zielmodell mithilfe object template<br />
expression in der enforce-Domäne generiert werden sollen. Dieses Verfahren wird als Inline-Objekterzeugung<br />
bezeichnet.<br />
Das Beispiel:<br />
1 top relation mapPage<br />
2 {<br />
3 pageName : String ;<br />
4 propertyName : String ;<br />
5 checkonly domain s r c srcPg : SimpleUWEold : : Page<br />
6 {<br />
7 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />
8 name = pageName ,<br />
9 ownedAttribute = presProp : SimpleUWEold : : PresentationProperty<br />
10 {<br />
11 name=propertyName<br />
12 }<br />
13 } ;<br />
14 enforce domain t r g trgPg : SimpleUWEnew : : PresentationPage<br />
15 {<br />
16 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />
17 name = pageName ,<br />
18 −− I n l i n e Pattern zur Erzeugung der PresentationProperty −−<br />
19 −− unter Verwendung des Namen der Property aus dem SimpleUWEold−<br />
<strong>Modell</strong> −−<br />
20 ownedAttribute = presProp2 : SimpleUWEnew : : PresentationProperty<br />
21 {<br />
22 name = propertyName<br />
23 }<br />
24 } ;<br />
25 when<br />
26 {<br />
27 mapPackage ( srcPckg , tgtPckg ) ;<br />
28 }<br />
29 }<br />
Listing 4.11: Das Beispiel einer Inline-Objekterzeugung.<br />
Hier betrachten wir die Relation mapPage. Es wird gewährleistet, dass zu jeder Page ein<br />
PresentationPage in neuem <strong>Modell</strong> generiert wird, wobei dieses PresentationPage genau so<br />
viele PresentationProperties mit denselben Namen wie die ursprüngliche Page besitzen soll.<br />
Diese Properties werden mithilfe inline-Objekterzeugung erzwungen (siehe Zeilen 20-24 im<br />
Listing 4.11).<br />
Bis zur dieser Stelle wurden alle wichtigen formalen Konzepte der Relationalen QVT-Sprache<br />
erläutert, die für die Definition der Transformation für UWE-Präsentationsmodelle benötigt<br />
werden. In den nächsten Kapiteln werden die Relationen für die Überführung der Präsentationsmodellelemente<br />
aus der Version 1.7 des UWE-Metamodells in die Version 1.8 des<br />
UWE-Metamodells vorgestellt.<br />
44
4.3. Transformationen zur automatisierten <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> basierend auf UWE-Metamodellen<br />
4.3. Transformationen zur automatisierten <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />
basierend auf UWE-Metamodellen<br />
Nachdem in den vorangehenden Kapiteln die ausgewählten Grundkonzepte der relationalen<br />
QVT-Sprache vorgestellt wurden, kann an dieser Stelle die Transformation zu der automatisierten<br />
Überführung der UWE-Präsentationsmodelle der Version 1.7 in die Präsentationsmodelle<br />
der Version 1.8 definiert werden. Dabei wird der Fokus auf die UWE-spezifische<br />
Details gelegt und die Konzepte der relationalen QVT-Sprache nicht weiter erläutert.<br />
4.3.1. Signatur der Transformation<br />
Die Transformation soll ein Präsentationsmodell, das in der Version 1.7 des UWE-Metamodells<br />
erstellt wurde in ein Präsentationsmodell der Version 1.8 überführen. Die Metamodelle werden<br />
hier entsprechend SimpleUWEold und SimpleUWEnew genannt. Die Transformation<br />
in der relationalen QVT-Sprache heißt ” mapUWEversion“. Die UML-<strong>Modell</strong>e der SimpleU-<br />
WEold (Abb. A.7) und SimpleUWEnew (Abb. A.8) sind im Anhang A angegeben.<br />
1 transformation mapUWEversion ( s r c : SimpleUWEold , t r g : SimpleUWEnew )<br />
2 {<br />
3 −− r e l a t i o n s −−<br />
4 }<br />
Listing 4.12: Transformationssignatur.<br />
Das Quellmodell wird durch src repräsentiert und das Zielmodell entsprechend mit trg. Dies<br />
bedeutet, dass src und dessen <strong>Modell</strong>elemente das Gegenstand von checkonly-Domänen,<br />
und trg und dessen <strong>Modell</strong>elemente das Gegenstand der enforce-Domänen sind.<br />
4.3.2. Die Identifizierung der Relationen<br />
Als nächstes werden die UWE-Präsentationsmetamodelle untersucht und deren nicht abstrakte<br />
Klassen genau betrachtet. Einige Elemente des UWE-Metamodells haben sich in der<br />
neuen Version nicht verändert, daher wird die Transformation zu einem Teil aus der Relationen<br />
bestehen, welche die <strong>Modell</strong>elemente einfach kopieren und zum anderem Teil aus den<br />
Relationen, die die Metamodelländerungen berücksichtigen.<br />
Als erstes werden alle nicht abstrakten Elemente der SimpleUWEold-Metamodells zusammengefasst.<br />
Für die Elemente, die nicht von der Metamodell-<strong>Evolution</strong> betroffen sind, soll<br />
eine einfache Kopier-Aktion ausgeführt werden. Die restlichen Elemente sollen entsprechend<br />
der Metamodelländerungen transformiert werden. Dabei ist zu erwähnen, dass in unserem<br />
Fall es sich bei allen Metamodelländerungen um ” breaking and resolvable changes“ handelt,<br />
wie in der Tabelle 3.3 im Kapitel 3.4.1 bereits beschrieben wurde.<br />
In der Tabelle 4.1 sind alle Elemente erfasst, die bei einem UWE-<strong>Modell</strong> als <strong>Modell</strong>elemente<br />
vorkommen können. Im Rahmen der Transformation sollen die Instanzen des SimpleUWEold-<br />
Metamodells in die Instanzen des SimpleUWEnew-Metamodells überführt werden. Dabei er-<br />
45
4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />
Nr. SimpleUWEold SimpleUWEnew Transformationsaktion Relation<br />
1 Package Package Kopie mapPackage<br />
2 Text Text Kopie mapText<br />
3 Image Image Kopie mapImage<br />
4 Button Button Kopie mapButton<br />
5 Anchor Anchor Kopie mapAnchor<br />
6 TextInput TextInput Kopie mapTextInput<br />
7 PresentationProperty PresentationProperty Kopie mapProperty<br />
8 Form InputForm Umbenennen. Die Attribute elements<br />
sollen als PresentationProperties<br />
der InputForm hinzugefügt<br />
werden<br />
mapForm<br />
9 Choice Selection Umbenennen mapChoice<br />
10 Page PresentationPage Umbenennen mapPage<br />
11 PresentationClass PresentationGroup Umbenennen mapPresClass<br />
12 PresentationGroup PresentationGroup Nicht mehr unterstützt, stattdessen<br />
PresentationGroup<br />
13 Anchored<strong>Co</strong>llection IteratedPresentationGroup Elemente werden mit Iterated-<br />
PresentaitonGroup ersetzt, wobei<br />
Anchors als PresentationProperties<br />
zu dieser hinzugefügt werden<br />
14 —— Attribute collapse<br />
und dragdrop<br />
Neue RIA-spezifische Attribute sind<br />
zu der Klasse PresentationGroup<br />
hinzugefügt worden. Die Page, InputForm<br />
und IteratedPresentation-<br />
Group erben diese Attribute<br />
mapPresGroup<br />
mapAnchored<strong>Co</strong>l<br />
mapPage,<br />
mapPresentationGroup,<br />
mapForm, mapAnchored<strong>Co</strong>l<br />
Tabelle 4.1.: Alle Klassen des SimpleUWEold-Metamodells mit den entsprechenden Transformationsaktionen<br />
und den Relationen.<br />
geben sich drei Arten der Elemente des SimpleUWEold-Präsentationsmetamodells in Bezug<br />
auf ihre strukturelle Beschaffenheit und die Platzierung in der Metamodellhierarchie:<br />
• UI-Elemente, die PresentationProperties besitzen können: PresentationClass und seine<br />
Unterklassen PresentationGroup und Page.<br />
• PresentationProperties enthalten eine Assoziation presentationElement auf das entsprechenden<br />
UI-Element, das in der PresentationClass beinhaltet ist. Dieses UI-Element<br />
kann wiederum ein PresentationClass oder deren Erbe sein oder ein einfaches UI-<br />
Element, wie unten beschrieben.<br />
• Die Erben der Klasse UIElement, die einfache UI-Elemente wie Text, Button, Anchor<br />
usw. darstellen. Diese dürfen wiederum keine PresentationProperties besitzen.<br />
Die Relationen einer Gruppe sind sehr ähnlich. Deswegen können im Weiteren repräsenta-<br />
46
4.3. Transformationen zur automatisierten <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> basierend auf UWE-Metamodellen<br />
Nr. SimpleUWEnew-Attribut Transformationsaktion Relationen<br />
1 liveReport Neues RIA-spezifische Attribut vom<br />
Typ Boolean ist zu der neuen abstrakten<br />
Klasse ValuedElement hinzugefügt<br />
worden. Die Text-, Image-<br />
, Button-, Anchor-, TextInput- und<br />
Selection-Elemente erben dieses Attribut<br />
2 periodicRefresh Neues RIA-spezifische Attribut vom<br />
Typ Boolean ist zu der neuen abstrakten<br />
Klasse OutputElement hinzugefügt<br />
worden. Die Text- und<br />
Image-Elemente erben dieses Attribut<br />
2 auto<strong>Co</strong>mpletion Neues RIA-spezifische Attribut vom<br />
Typ Boolean ist zu der neuen abstrakten<br />
Klasse InputElement hinzugefügt<br />
worden. Die TextInputund<br />
Selection-Elemente erben dieses<br />
Attribut<br />
2 liveValidation Neues RIA-spezifische Attribut vom<br />
Typ Boolean ist zu der neuen abstrakten<br />
Klasse InputElement hinzugefügt<br />
worden. Die TextInputund<br />
Selection-Elemente erben dieses<br />
Attribut<br />
Tabelle 4.2.: Attribute aus den Abstrakten Klassen.<br />
mapText,<br />
mapImage,<br />
mapButton,<br />
mapAnchor,<br />
mapTextInput,<br />
mapChoice<br />
mapText, map-<br />
Image<br />
mapTextInput,<br />
map-Choice<br />
mapTextInput,<br />
map-<br />
Anchored<strong>Co</strong>l<br />
tive Exemplare einer Gruppe vorgestellt werden. Alle Relationen sind im Anhang im vollen<br />
Umfang B angegeben.<br />
Die abstrakten Metaklassen können in dem Zielmodell mithilfe der Transformationen nicht<br />
instanziert werden. In dem UWE-Präsentationsmetamodell in der Version 1.8 ist eine Anzahl<br />
der abstrakten Klassen eingeführt worden. Die neuen abstrakten Klassen besitzen neue RIAspezifische<br />
Attribute. Diese Attribute können in den jeweiligen Subklassen der abstrakten<br />
Klasse in den dazugehörigen Relationen eingefügt werden. Die Attribute der Metaklassen<br />
sind in der Tabelle 4.2 zusammengefasst, wobei die betroffenen nicht-abstrakten Subklassen<br />
und die entsprechenden Relationen mit angegeben sind. Durch diese Lösung werden mithilfe<br />
der Transformation die <strong>Modell</strong>e erstellt die zum neuen Metamodell im vollen Umfang<br />
konform sind.<br />
Alle Relationen außer mapProperty sollen top-level-Relationen sein, da jedes Element<br />
des <strong>Modell</strong>s transformiert werden soll (die Arten von Relationen wurden im Kapitel 4.2.2<br />
betrachtet). Besitzen die <strong>Modell</strong>elemente PresentationProperties, so soll die non-top-level-<br />
Relation mapProperty an der Stelle erzwungen werden, also nicht implizit, sondern explizit<br />
durch Aufruf ausgeführt werden. Diese Aufrufe werden innerhalb der where-Klausel definiert<br />
(siehe Kapitel 4.2.4).<br />
1 transformation mapUWEversion ( s r c : SimpleUWEold , t r g : SimpleUWEnew )<br />
2 {<br />
47
4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />
3 top relation mapPackage {−− body −−}<br />
4 top relation mapPage {−− body −−}<br />
5 relation mapProperty {−− body −−}<br />
6 top relation mapPresClass {−− body −−}<br />
7 top relation mapPresGroup {−− body −−}<br />
8 top relation mapText {−− body −−}<br />
9 top relation mapAnchor {−− body −−}<br />
10 top relation mapImage {−− body −−}<br />
11 top relation mapButton {−− body −−}<br />
12 top relation mapTextInput {−− body −−}<br />
13 top relation mapAnchored<strong>Co</strong>l {−− body −−}<br />
14 top relation mapForm {−− body −−}<br />
15 }<br />
Listing 4.13: Identifizierte Relationen<br />
Als nächstes nehmen wir die Relation mapPackage genau unter die Lupe.<br />
4.3.3. Die Relation für das Paket<br />
In dem UWE-Präsentationsmodell ist eine klare hierarchische Struktur der Beziehungen<br />
zwischen den Elementen festgelegt:<br />
1 top relation mapPackage<br />
2 {<br />
3 pckgName : String ;<br />
4 checkonly domain s r c srcPckg : SimpleUWEold : : Package<br />
5 {<br />
6 name = pckgName<br />
7 } ;<br />
8 enforce domain t r g tgtPckg : SimpleUWEnew : : Package<br />
9 {<br />
10 name = pckgName<br />
11 } ;<br />
12 −− Hier e i n e Bedingung : der Name des Packages −−<br />
13 −− s o l l P r e s e n t a t i o n heißen −−<br />
14 where<br />
15 {<br />
16 name = ’Presentation’ ;<br />
17 }<br />
18 }<br />
Listing 4.14: Relation mapPackage<br />
Auf dem obersten Level befindet sich das Präsentations-Package. Alle restlichen Präsentationselemente<br />
befinden sich darin als packagedElements. Bei der Ausführung der Transformation<br />
wird mit mapPackage angefangen. Danach werden die darauf folgenden Relationen<br />
ausgeführt. Für das Präsentations-Paket wird im Zielmodell ein Präsentations-Paket mit<br />
demselben Namen erzeugt.<br />
48
4.3. Transformationen zur automatisierten <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> basierend auf UWE-Metamodellen<br />
4.3.4. Die Relationen für die PresentationClass und deren Subklassen<br />
Die Elemente vom Typ PresentationClass, Page und PresentationGroup wurden bei der<br />
Metamodell-<strong>Evolution</strong> geändert. (Siehe Tabelle 4.1 in den Zeilen 10-13). Das Element PresentationClass<br />
ist zu der PresentationGroup umbenannt worden. Das Element PresentationGroup<br />
wird in der neuen Version nicht mehr unterstützt. Deswegen sollen die Elemente,<br />
die als PresentationGroup in der alten Version definiert waren, durch die Elemente PresentationClass<br />
umgesetzt werden, die in der neuen UWE-Präsentationsmetamodellversion<br />
PresentationGroup heißen. Dies ist ein gutes Beispiel dafür, dass sehr tiefes Wissen über<br />
die Beschaffenheit der Metamodelle unabdingbar ist. Hier sollen die Zusammenhänge genau<br />
spezifiziert werden. Obwohl es so aussieht, als ob man die Elemente PresentationGroup in<br />
die Elemente PresentationGroup der neuen Version überführt, hat sich die Semantik dieser<br />
Elemente verändert. Das Element Page ist lediglich in das PresentationPage umbenannt<br />
worden.<br />
mapPage<br />
Die Relationen für die Elemente PresentationGroup, Page und PresentationClass sind analog,<br />
wobei bei dem Element PresentationClass als Oberklasse die Unterscheidung zwischen<br />
dieser Klasse und deren Subklassen eingeführt werden soll. Die Auflösung dieser Vererbung<br />
wird später im Kapitel 4.3.4 behandelt. Im folgenden Listing ist die komplette mapPage-<br />
Relation dargestellt.<br />
1 −− Relation mapPage mappt Page auf PresentationPage . −−<br />
2 −− P r e s e n t a t i o n P r o p e r t i e s werden übernommen −−<br />
3 top relation mapPage<br />
4 {<br />
5 pageName : String ;<br />
6 checkonly domain s r c srcPg : SimpleUWEold : : Page<br />
7 {<br />
8 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />
9 name = pageName ,<br />
10 −− Es wird geprüft , ob page Stereotyp −−<br />
11 −− b e i dem Page angewendet i s t −−<br />
12 kind = ’page’ ,<br />
13 ownedAttribute = presProp : SimpleUWEold : : PresentationProperty {}<br />
14 } ;<br />
15 enforce domain t r g trgPg : SimpleUWEnew : : PresentationPage<br />
16 {<br />
17 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />
18 name = pageName ,<br />
19 kind = ’presentationPage’ ,<br />
20 −− Neue RIAs−Attribute , von PresentationGroup geerbt −−<br />
21 c o l l a p s e = f a l s e ,<br />
22 dragdrop = f a l s e ,<br />
23 ownedAttribute = presProp2 : SimpleUWEnew : : PresentationProperty {}<br />
24 } ;<br />
25 when<br />
26 {<br />
27 mapPackage ( srcPckg , tgtPckg ) ;<br />
49
4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />
28 }<br />
29 where<br />
30 {<br />
31 −− B e s i t z t e i n e Page e i n e P r e s e n t a t i o n Property , −−<br />
32 −− so wird d i e R elation mapProperty a u f g e r u f e n −−<br />
33 mapProperty ( presProp , presProp2 ) ;<br />
34 }<br />
35 }<br />
Listing 4.15: Relation mapPage<br />
Mithilfe folgenden Zuweisung ” namespace = srcPckg : SimpleUWEold::Package“ in der Zeile<br />
7 des Listings 4.15 und ” namespace = trgPckg : SimpleUWEnew::Package“ in der Zeile 15<br />
werden alle namespace selektiert, für die gilt, dass die Page in ihnen liegt. Bei diesen Zuweisungen<br />
handelt es sich um object template expressions, die im Kapitel 4.2.5 erläutert<br />
wurden. Laut unserem vereinfachten Metamodell existiert nur ein Package-Element: das<br />
Präsentations-Paket. Soll das komplette UWE-Metamodell transformiert werden, so müssen<br />
die unterschiedlichen Pakete des UWE-Metamodells auseinander gehalten werden.<br />
Damit diese Relation im Falle, wenn für die Elemente srcPckg und trgPckg noch keine gültige<br />
Werte vorliegen, funktioniert, muss eine Vorbedingung für die Pakete definiert werden. Dies<br />
erfolgt innerhalb der when-Klausel. Somit wird bei jeder Ausführung der mapPage-Relation<br />
die mapPackage-Relation aufgerufen, um für jedes PresentationPage-Element einen korrekten<br />
Bezug zu entsprechendem Präsentations-Package herzustellen.<br />
Ähnlich verhält es sich mit den Konstruktionen ” ownedAttribute = presProp : SimpleU-<br />
WEold::PresentationProperty“ in der Zeile 9 des Listings 4.15 und ” ownedAttribute = presProp2<br />
: SimpleUWEnew::PresentationProperty“ in der Zeile 17. Der Unterschied liegt darin,<br />
dass die Elemente PresentationProperty erzwungen werden sollen, sobald ein Page aus<br />
dem Quellmodell PresentationProperties besitzt. Dafür sorgt die Bedingung in der where-<br />
Klausel, wo die Abarbeitung der non-top-level-Relation mapProperty durch den expliziten<br />
Aufruf erfolgt. Dieses Verfahren entspricht dem Prinzip des rekursiven Abstiegs.<br />
Das Attribut kind hält das Stereotyp des <strong>Modell</strong>elements fest. In der Zeile 10 des Listings<br />
4.15 wird sichergestellt, dass kind den Wert page besitz. In der Zeile 17 des Listing 4.15<br />
wird kind auf PresentationPage gesetzt. In dem neuen UWE-Metamodell sind in der Klasse<br />
PresentationGroup neue Attribute für RIAs Features eingeführt: collapse und dragdrop vom<br />
Typ boolean. Diese Attribute besitzen einen Default-Wert false, womit die Automatisierung<br />
der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> in diesem Fall ermöglicht wird.<br />
Die Relation mapPresGroup für die Transformation der Elemente PresentationGroup ist<br />
analog zu der Relation mapPage aufgebaut. Die einzige Abweichung besteht darin, dass in<br />
der checkonly-Domäne die Quellmodellelemente vom Typ PresentationGroup stehen und<br />
in der enforce-Domäne die Elemente des Zielmodells PresentationGroup stehen, die dem<br />
ursprünglichen PresentationClass entsprechen. Interessanter wird es bei dem Presentation-<br />
Class-Element des Quellmodells. Die Relation für die PresentationClass wird im nächsten<br />
Abschnitt betrachtet.<br />
50
4.3. Transformationen zur automatisierten <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> basierend auf UWE-Metamodellen<br />
Die Unterscheidung zwischen den Unterklassen Page bzw. PresentationGroup und<br />
deren Oberklasse PresentationClass<br />
Wenn die Relation mapPresClass analog zu der mapPage-Relation und der mapPresGroup-<br />
Relation definiert wird, so werden die Subklassen von der PresentationClass doppelt erzwungen.<br />
Dies liegt daran, dass die Elemente Page und PresentationGroup die Erben des PresentationClass<br />
sind. Bei der checkonly-Domäne der Relation mapPresentationClass werden die<br />
beiden Subklassen als PresentationClasses erkannt und in der enforce-Domäne als PresentationGroups<br />
mit allen Attributen und den PresentationProperties erneut erzwungen. Dieses<br />
Problem kann dadurch behoben werden, dass in der when-Klausel außer der Vorbedingung<br />
für die Pakete (siehe unter dem Kapitel 4.3.4) weitere Vorbedingungen definiert werden. Diese<br />
Vorbedingungen stehen in den Zeilen 16 und 17 des Listings 4.16. Die Elemente vom Typ<br />
PresentationClass sollen nur dann transformiert werden, wenn sie an keiner anderen Stelle<br />
der Transformation als Argumente der mapPage bzw. der mapPresGroup Relation stehen.<br />
Dies wird durch die Vorbedingungen ” not mapPage(pc, pg); “ und ” not mapPresGroup(pc,<br />
pg); “ erreicht.<br />
1 −− Relation mapPresClass mappt P r e s e n t a t i o n C l a s s auf P r e s e n t a t i o n −−<br />
2 −− Group −−<br />
3 top relation mapPresClass<br />
4 {<br />
5 className : String ;<br />
6 checkonly domain s r c pc : SimpleUWEold : : P r e s e n t a t i o n C l a s s<br />
7 {<br />
8 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />
9 name = className ,<br />
10 −− Es wird geprüft , ob p r e s e n t a t i o n C l a s s Stereotyp −−<br />
11 −− b e i dem P r e s e n t a t i o n C l a s s angewendet i s t −−<br />
12 kind = ’presentationClass’ ,<br />
13 ownedAttribute = pp : SimpleUWEold : : PresentationProperty {}<br />
14 } ;<br />
15 enforce domain t r g pg : SimpleUWEnew : : PresentationGroup<br />
16 {<br />
17 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />
18 name = className ,<br />
19 −− Hier wird das Stereotyp presentationGroup −−<br />
20 −− dem Z i e l e l e m e n t zugewiesen −−<br />
21 kind = ’presentationGroup’ ,<br />
22 −− neue RIA−A t t r i b u t s −−<br />
23 c o l l a p s e = f a l s e ,<br />
24 dragdrop = f a l s e ,<br />
25 ownedAttribute = pp2 : SimpleUWEnew : : PresentationProperty {}<br />
26 } ;<br />
27 when<br />
28 {<br />
29 mapPackage ( srcPckg , tgtPckg ) ;<br />
30 not mapPage ( pc , pg ) ;<br />
31 not mapPresGroup ( pc , pg ) ;<br />
32 }<br />
33 where<br />
51
4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />
34 {<br />
35 −− B e s i t z t e i n P r e s e n t a t i o n Class e i n e P r e s e n t a t i o n Property , −−<br />
36 −− so wird d i e R elation mapProperty a u f g e r u f e n −−<br />
37 mapProperty ( pp , pp2 ) ;<br />
38 }<br />
39 }<br />
Listing 4.16: Relation mapPresClass<br />
Das ist die allgemeine Vorgehensweise in der relationalen QVT-Sprache, um die Subklassen<br />
von deren Oberklassen zu unterscheiden. Im Folgenden betrachten wir die Relationen für die<br />
einfachen UI-Elemente.<br />
4.3.5. Die Relationen für einfache UI-Elemente<br />
In der Tabelle 4.1 in den Zeilen 2-6 sind folgende Elemente zusammengefasst Text, Image,<br />
Button, Anchor und TextInput. Die Elemente dieser Gruppe besitzen eine Gemeinsamkeit:<br />
sie wurden bei der Metamodell-<strong>Evolution</strong> nicht verändert und sollen einfach kopiert werden.<br />
mapText<br />
Im nächsten Listing ist eine Relation zum Kopieren von dem Text-Element vorgestellt. Die<br />
restlichen Elemente werden analog kopiert.<br />
1 −− Die Relation mapText e r s t e l l t e i n e Kopie des Text−Elements −−<br />
2 −− im Z i e l m o d e l l −−<br />
3 top relation mapText<br />
4 {<br />
5 textName : String ;<br />
6 checkonly domain s r c te : SimpleUWEold : : Text<br />
7 {<br />
8 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />
9 name = textName ,<br />
10 −− Es wird geprüft , ob t e x t Stereotyp −−<br />
11 −− b e i dem Text angewendet i s t −−<br />
12 kind = ’text’<br />
13 } ;<br />
14 enforce domain t r g te2 : SimpleUWEnew : : Text<br />
15 {<br />
16 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />
17 name = textName ,<br />
18 −− Hier wird das Stereotyp t e x t −−<br />
19 −− dem Z i e l e l e m e n t zugewiesen −−<br />
20 kind = ’text’ ,<br />
21 p e r i o d i c R e f r e s h = f a l s e ,<br />
22 l i v e R e p o r t = f a l s e<br />
23 } ;<br />
24 when<br />
25 {<br />
26 mapPackage ( srcPckg , tgtPckg ) ;<br />
52
4.3. Transformationen zur automatisierten <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> basierend auf UWE-Metamodellen<br />
27 }<br />
28 }<br />
Listing 4.17: Relation mapText<br />
Wie bei allen Elementen des Präsentationspakets wird mithilfe des object template expressions<br />
für das namespace und der Vorbedingung in der when-Klausel sichergestellt, dass<br />
für die Elemente srcPckg und trgPckg gültige Werte vorliegen. Nach der Abarbeitung der<br />
mapText-Relation wird im Zielmodell ein text-Element mit dem Namen des Quelltextelements<br />
erzwungen. Im Weiteren werden die Relationen der UI-Elemente betrachtet, die im<br />
Rahmen der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> angepasst werden müssen.<br />
4.3.6. Die Relation mapForm<br />
Das Element Form wurde im Laufe der Metamodell-<strong>Evolution</strong> umbenannt und soll in der<br />
neuen Version des UWE-Präsentationsmodells InputForm heißen. Darüber hinaus hat sich<br />
ebenso die Position des Elements in der Hierarchie der PresentationElements verändert. Im<br />
neuen Metamodell gehört inputForm zu der Gruppe der Elemente, die PresentationProperties<br />
besitzen dürfen. Das Element InputForm ist eine Subklasse der PresentationGroup neben<br />
den Elementen PresentationPage und einem neuen Element IteratedPresentationGroup.<br />
1 −− Relation mapForm mappt das Element Form −−<br />
2 −− auf das Element InputForm des Z i e l m o d e l l s −−<br />
3 −− und f ü g t a l l e elements des u r s p r ü n g l i c h e n −−<br />
4 −− FormElements a l s P r e s e n t a t i o n P r o p e r t i e s hinzu −−<br />
5 top relation mapForm<br />
6 {<br />
7 formName : String ;<br />
8 formElemName : String ;<br />
9 checkonly domain s r c form : SimpleUWEold : : Form<br />
10 {<br />
11 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />
12 name = formName ,<br />
13 −− Es wird geprüft , ob form Stereotyp −−<br />
14 −− b e i der Form angewendet i s t −−<br />
15 kind = ’form’ ,<br />
16 elements = e l s : SimpleUWEold : : UIElement<br />
17 {<br />
18 name = formElemName<br />
19 }<br />
20 } ;<br />
21 enforce domain t r g iform : SimpleUWEnew : : inputForm<br />
22 {<br />
23 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />
24 name = formName ,<br />
25 −− Hier wird das Stereotyp inputForm −−<br />
26 −− dem Z i e l e l e m e n t zugewiesen −−<br />
27 kind = ’inputForm’ ,<br />
28 −− Neue RIAs−Attribute , von PresentationGroup geerbt −−<br />
29 c o l l a p s e = f a l s e ,<br />
30 dragdrop = f a l s e ,<br />
53
4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />
31 −−i n l i n e Erzeugung von FormElementen −−<br />
32 ownedAttribute = presProp : SimpleUWEnew : : PresentationProperty<br />
33 {<br />
34 name = formElemName ,<br />
35 presentationElement = pe : SimpleUWEnew : : PresentationElement {}<br />
36 }<br />
37 } ;<br />
38 when<br />
39 {<br />
40 mapPackage ( srcPckg , tgtPckg ) ;<br />
41 mapText ( e l s , pe ) or mapImage ( e l s , pe ) or mapAnchor ( e l s , pe ) or<br />
mapTextInput ( e l s , pe ) or mapButton ( e l s , pe ) or mapChoice ( e l s ,<br />
pe ) ;<br />
42 }<br />
43 }<br />
Listing 4.18: Relation mapForm<br />
Zum einem gehört die Umbenennung eines Elements zu ganz einfachen <strong>Co</strong>-<strong>Evolution</strong> Änderungen.<br />
Zum anderen liegt hier eine Änderung des Metamodells vor, welche die semantischen<br />
Änderungen an dem Metamodell mit sich bringt. Um die <strong>Co</strong>-<strong>Evolution</strong> dieser Elemente zu<br />
verwirklichen, muss man über vertieftes Wissen über die Semantik und die Beschaffenheit<br />
der Metamodelle verfügen.<br />
In diesem Fall ist die Relation so definiert worden, dass die Elemente, die der Form als<br />
Attribute elements zugeordnet waren, in die neue inputForm als PresentationProperties hinzugefügt<br />
werden (siehe Zeilen 9-13 und 19-24 des Listings 4.18). In Form von elements dürfen<br />
zu einer Form verschiedene UIElements hinzugefügt werden, solche wie Text, Image, Button,<br />
Anchor und TextInput (siehe UWE-Metamodell 1.8 in der Abbildung 3.5 im Kapitel 3.4.1).<br />
In der Relation mapForm wird ein Domänenmuster für elements ähnlich wie bei namespace<br />
mit einer object template expression umgesetzt. Damit sichergestellt werden kann, dass<br />
ein entsprechender gültiger nicht-abstrakter UI-Element existiert. Es wird mithilfe einer Vorbedingung<br />
in der when-Klausel geprüft, ob so ein Element bereits erzwungen wurde. Wenn<br />
das nicht der Fall ist, wird abhängig vom UI-Element eine entsprechende Relation aufgerufen<br />
(siehe Zeile 28 in dem Listing 4.18). Es wird entweder mapText oder mapButton oder<br />
mapTextInput usw. aufgerufen.<br />
Als Argumente bekommen die Relationsaufrufe in der Zeile 28 die abstrakten Oberklassen<br />
der Elemente vom Typ PresentationElement. Dies ist kein Problem, da eine Form als elements-Attribute<br />
konkrete nicht-abstrakte UI-Elemente besitzt. Alle einfachen UI-Elemente<br />
sollen bereits existieren, da alle Relationen außer mapProperty die top-level-Relationen<br />
sind. Die Bedingung in der when-Klausel erzwingt diese Relationen, wenn sie noch nicht<br />
ausgeführt worden sind und sorgt damit für die Korrektheit der Attribute und der Beziehungen<br />
zwischen den Elementen. Die PresentationProperties in dem enforce domain-Teil<br />
werden mit der inline object - Erzeugung erzwungen. Dieses Konstrukt wurde im Kapitel<br />
4.2.5 näher erläutert.<br />
54
4.3. Transformationen zur automatisierten <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> basierend auf UWE-Metamodellen<br />
4.3.7. Die Relation mapAnchored<strong>Co</strong>l<br />
Die Elemente der Anchored<strong>Co</strong>llection werden in dem neuen UWE-Präsentationsmodell nicht<br />
mehr unterstützt. Wäre dies eine einfache Löschaktion, so müsste bei der Transformation für<br />
diese Elemente keine Relation angegeben werden und somit würden keine Elemente im neuen<br />
<strong>Modell</strong> erzwungen. In diesem Fall ist die Metamodelländerung, ähnlich wie bei der Form von<br />
der Semantik des Metamodells abhängig. Die Elemente der Anchored<strong>Co</strong>llection werden nicht<br />
mehr unterstützt. Stattdessen sollen neue Elemente der IteratedPresentationGroup verwendet<br />
werden, wobei die Attribute anchors des Anchored<strong>Co</strong>llection als PresentationProperties<br />
des IteratedPresentationGroup definiert werden sollen.<br />
1 −− Relation mapAnchored<strong>Co</strong>l mappt Element Anchored<strong>Co</strong>llection −−<br />
2 −− auf d i e Elemente IteratedPresentationGroup des Z i e l m o d e l l s −−<br />
3 −− und f ü g t a l l e Anchors des u r s p r ü n g l i c h e n Elements a l s −−<br />
4 −− P r e s e n t a t i o n P r o p e r t i e s hinzu −−<br />
5 top relation mapAnchored<strong>Co</strong>l<br />
6 {<br />
7 acName : String ;<br />
8 anchorName : String ;<br />
9 checkonly domain s r c ac : SimpleUWEold : : Anchored<strong>Co</strong>llection<br />
10 {<br />
11 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />
12 name = acName ,<br />
13 −− Es wird geprüft , ob a n c h o r e d C o l l e c t i o n Stereotyp −−<br />
14 −− b e i dem Anchored<strong>Co</strong>llection angewendet i s t −−<br />
15 kind = ’anchored<strong>Co</strong>llection’ ,<br />
16 anchors = ancs : SimpleUWEold : : Anchor<br />
17 {<br />
18 name = anchorName<br />
19 }<br />
20 } ;<br />
21 enforce domain t r g t i 2 : SimpleUWEnew : : IteratedPresentationGroup<br />
22 {<br />
23 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />
24 name = acName ,<br />
25 −− Hier wird das Stereotyp i t e r a t e d P r e s e n t a t i o n G r o u p −−<br />
26 −− dem Z i e l e l e m e n t zugewiesen −−<br />
27 kind = ’iteratedPresentationGroup’ ,<br />
28 −− Neue RIAs−Attribute , von PresentationGroup geerbt −−<br />
29 c o l l a p s e = f a l s e ,<br />
30 dragdrop = f a l s e ,<br />
31 −−i n l i n e Erzeugung von Anchors −−<br />
32 ownedAttribute = presProp : SimpleUWEnew : : PresentationProperty<br />
33 {<br />
34 name = anchorName ,<br />
35 presentationElement = pe : SimpleUWEnew : : PresentationElement {}<br />
36 }<br />
37 } ;<br />
38 when<br />
39 {<br />
40 mapPackage ( srcPckg , tgtPckg ) ;<br />
41 mapAnchor ( ancs , pe ) ;<br />
55
4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />
42 }<br />
43 }<br />
Listing 4.19: Relation mapAnchored<strong>Co</strong>l<br />
Im Listing 4.19 wird das Domänenmuster für Anchors genau wie bei der Form mit einer<br />
object template expression umgesetzt. Somit kann sichergestellt werden, dass ein entsprechender<br />
gültiger Anchor-Element existiert, wird mithilfe einer Vorbedingung in der when-<br />
Klausel geprüft, ob so ein Element bereits erzwungen wurde. Mit enforce domain werden<br />
PresentationProperties, die die Anchors beinhalten, mithilfe der inline object-Erzeugung<br />
erzwungen (siehe Zeile 19 des Listings 4.19). Dabei wird das Attribute presentationElement<br />
der PresentationProperty in der Zeile 22 als ein abstraktes PresentationElement deklariert<br />
und in der Zeile 28 als Argument für den Aufruf des mapAnchor in der when-Klausel verwendet.<br />
Bei der Abarbeitung dieser Relation handelt es sich dann ausschließlich um die<br />
nicht-abstrakte Anchors, somit werden keine Fehler bei der Transformation entstehen.<br />
4.3.8. Die Relation mapProperty<br />
Zuletzt wird eine einzige non-top-level-Relation mapProperty betrachtet. Von Metamodell<br />
her wurden bei der Metamodellevolution keine Änderungen an diesem Metamodellelement<br />
vorgenommen. So wird nachstehend für PresentationProperty eine Kopier-Relation definiert:<br />
1 relation mapProperty<br />
2 {<br />
3 propName : String ;<br />
4 checkonly domain s r c pp : SimpleUWEold : : PresentationProperty<br />
5 {<br />
6 name = propName ,<br />
7 presentationElement = pe : SimpleUWEold : : PresentationElement<br />
8 {<br />
9 }<br />
10 } ;<br />
11 enforce domain t r g pp2 : SimpleUWEnew : : PresentationProperty<br />
12 {<br />
13 name = propName ,<br />
14 presentationElement = pe2 : SimpleUWEnew : : PresentationElement<br />
15 {<br />
16 }<br />
17 } ;<br />
18 when<br />
19 {<br />
20 −− Sobald e i n e PresentationProperty einen Presentation − −−<br />
21 −− Element b e s i t z t , s o l l d i e entsprechende Relation a u f g e r u f e n −−<br />
22 −− werden −−<br />
23 mapText ( pe , pe2 ) or mapAnchor ( pe , pe2 ) or mapImage ( pe , pe2 ) or<br />
mapButton ( pe , pe2 ) or mapTextInput ( pe , pe2 ) or mapAnchored<strong>Co</strong>l (<br />
pe , pe2 ) or mapPresClass ( pe , pe2 ) or mapPresGroup ( pe , pe2 ) or<br />
mapForm( pe , pe2 ) ;<br />
24 }<br />
25 }<br />
56
4.4. Die Durchführung der Transformationen mit dem mediniQVT-Tool<br />
Listing 4.20: Die Relation mapProperty<br />
Im Listing 4.20 wird der Name der PresentationProperty unter dem Einsatz von der Variable<br />
propName in die Ziel-Property übernommen. Außerdem wird die Assoziation presentation-<br />
Element mit object template expression umgesetzt. Hierbei sind die Attribute presentationElement<br />
in den Zeilen 7 und 14 des Listings 4.20 als abstrakte Elemente des Typs<br />
PresentationElement deklariert. In der when-Klausel stehen Aufrufe der möglichen Relationen,<br />
die mit der ODER-Verknüpfung verbunden sind. Dabei sind hier alle Relationen außer<br />
der mapPage vorhanden. Die Page steht stets als Strukturelement eines Pakets und darf<br />
daher nicht in der PresentationProperties eines PresentationClass oder deren Subklassen<br />
vorkommen.<br />
4.4. Die Durchführung der Transformationen mit dem<br />
mediniQVT-Tool<br />
In den vorausgehenden Kapiteln wurde die Transformation vorgestellt, welche die automatisierte<br />
<strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> der vereinfachten UWE-Präsentationsmodelle veranschaulicht.<br />
Für die Durchführung dieser Transformation sollten einige Aktionen vorab erledigt werden.<br />
Der ganze Prozess ist manuell vorbereitet und durchgeführt worden. Eine Transformation<br />
Abbildung 4.2.: Die Durchführung der Transformation.[19]<br />
überführt <strong>Modell</strong>e ineinander, die auf der Basis von spezifizierten Metamodellen definiert<br />
sind. Dabei besteht die Transformation aus einer Anzahl von Relationen, die auf der Basis<br />
57
4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />
von Metamodellen gültige Beziehungen zwischen den Elementen der <strong>Modell</strong>e beschreibt. Außer<br />
einem Transformationsskript in der relationalen QVT-Sprache und einem Quellmodell<br />
sollen das Quell-Metamodell, sowie das Ziel-Metamodell in speziellen formalen Formen mit<br />
eingebunden werden. Das Zielmodell einer Transformation resultiert aus deren Ausführung.<br />
Die Durchführung einer Transformation mit mediniQVT setzt voraus, dass die für die Transformation<br />
benötigten Metamodelle sowie deren Instanzen mithilfe Eclipse Modeling Framework,<br />
das im Kapitel 2.5 bereits beschrieben wurde, erstellt sind. Der Prozess der Erstellung<br />
und Durchführung einer Transformation wird in der Abbildung 4.6 veranschaulicht.<br />
Im Kapitel 3.4 wurden die beiden Versionen der Präsentations-Metamodell vorgestellt und<br />
die Differenzen zwischen diesen Metamodellversionen in der Tabelle 3.3 zusammengefasst.<br />
Für die Transformation werden Metamodelle nach dem Verständnis der MOF in Form von<br />
UML2-Klassendiagrammen in Ecore-Format definiert, das im Kapitel 2.5.1 vorgestellt wurde.<br />
Im Anhang A ist detailliert beschrieben wie diese Metamodelle in einer serialisierten Form<br />
(Eclipse Ecore Format) erstellt werden. Wobei die Metamodelle im Eclipse Ecore Format<br />
dem generellen EMOF-Format (Essential Meta Object Facility) weitgehend äquivalent sind.<br />
Aus den Metamodellen in Ecore Format werden automatisch EMF-<strong>Modell</strong>e (siehe Eclipse<br />
Modeling Framework im Kapitel 2.5) vom Typ ” genmodel“ erstellt, die als eine Basis für<br />
die Generierung der Editor-Eclipse-Plug-ins dienen können. (Genaue Vorgehensweise hierzu<br />
ist im Anhang A.2 erläutert) Die aus Generator-<strong>Modell</strong> generierte Eclipse-Plug-ins stellen<br />
Editoren bereit, die es erlauben die formalen <strong>Modell</strong>e im Sinne der vordefinierten Metamodelle<br />
zu erstellen. (Siehe Anhang A.3)<br />
Die OMG hat für den Austausch von formalen <strong>Modell</strong>en das XML Metadata Interchange<br />
(XMI)-Format definiert, um speziell formale <strong>Modell</strong>e in ihrer flachen, textuell repräsentierten<br />
Struktur als Grundlage der Transformation bereitstellen zu können.<br />
58
4.5. Ein Beispiel für metamodellbasierte <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />
4.5. Ein Beispiel für metamodellbasierte <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />
In diesem Abschnitt wird ein Beispiel vorgeführt, welches die metamodellbasierte <strong>Modell</strong>-<br />
<strong>Co</strong>-<strong>Evolution</strong> für das <strong>Modell</strong> Adressbuch präsentiert. Da die <strong>Modell</strong>e in der Form in der sie<br />
in die Transformation eingehen ziemlich unübersichtlich sind, wird nur ein Ausschnitt aus<br />
den <strong>Modell</strong>en vorgeführt.<br />
4.5.1. Die Durchführung der Transformation an dem Adressbuch-<strong>Modell</strong><br />
Das Präsentationsmodell des Adressbuches in der Version 1.7 wird als Quellmodell genommen.<br />
In der Abbildung 4.3 ist das <strong>Modell</strong> zu sehen. Das Quellmodell wird in einem ge-<br />
Abbildung 4.3.: Das Präsentationsmodell für das Adressbuch in der Version 1.7.<br />
nerierten SimpleUWEold-Editor in der speziellen textuellen Form erstellt. Die Informationen<br />
über das erstellte <strong>Modell</strong> sind in der AddressBook.simpleuweold Datei gespeichert. Das<br />
<strong>Modell</strong> soll in dem XMI-Format in die Transformation eingehen. Deswegen soll die Datei<br />
AddressBook.simpleuweold in die Datei AddressBook.xmi umbenannt werden. Somit kann<br />
diese Datei in der Transformationskonfiguration angegeben werden.<br />
Während der Ausführung der Transformation wird das Zielmodell für das Adressbuch generiert,<br />
das zu dem SimpleUWEnew Metamodell konform ist. In der Abbildung 4.4 sind die<br />
beiden <strong>Modell</strong>e nebeneinander abgebildet.<br />
Das Präsentationsmodell des Adressbuches in der Version 1.7 ist in einem SimpleUWEold-<br />
Editor angezeigt. Das Präsentationsmodell des Adressbuches in der Version 1.8 ist dagegen<br />
in einem SimpleUWEnew-Editor angezeigt. Die Elemente sind in ihrer baumartigen Struktur<br />
abgebildet. In der ” Properties“-Ansicht werden die Detailinformationen über ein ausgewähltes<br />
Element angezeigt. In der Abbildung ist sowohl in der alten, als auch in der neuen<br />
Version das Form-Element, namens ” SearchForm“ ausgewählt. In der alten Version besitzt<br />
59
4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />
Abbildung 4.4.: Das AddressBook vor und nach der Ausführung der Transformation in der<br />
textuellen Präsentation.<br />
die Form folgende elements-Attribute: den TextInput namens ” SearchCriterion“ und den<br />
Button namens ” Search“. Die Transformation hat diese Attribute in die gleichnamige PresentationProperties<br />
überführt, jeweils vom Typ TextInput und Button. Diese sind in der<br />
Abbildung grün gekennzeichnet.<br />
Außerdem ist zu sehen, dass die Page-Elemente AddressBook“ und Message“ in die gleich-<br />
” ”<br />
namige PresentationPage-Elemente transformiert wurden. Das PresentationClass-Element<br />
” <strong>Co</strong>ntact“ ist in ein entsprechendes PresentationGroup-Element mithilfe der Transformation<br />
überführt worden.<br />
60
4.5. Ein Beispiel für metamodellbasierte <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />
4.5.2. Die Konfiguration einer Transformation in mediniQVT<br />
Vor der Ausführung der Transformation sollen die Metamodelle in der QVT-Umgebung deklariert<br />
werden. Diese Einstellung erfolgt über das Menü ” Preferences“. Es kann ein beliebi-<br />
Abbildung 4.5.: Die Deklaration der Metamodelle in der mediniQVT-Umgebung.<br />
ges Instanz des SimpleUWEold-Metamodell mithilfe der Transformation auf die neue Version<br />
des Metamodells migriert werden. Hier wird als Beispiel für das Quellmodell das AdressBuch-<br />
<strong>Modell</strong> von der UWE-Webseite genommen. 1 Neben dem Transformationsskript sollen das<br />
Abbildung 4.6.: Die Run-Konfiguration der Transformation.<br />
Quell- und das Zielmodell angegeben werden. Als Richtung der Transformationsausführung<br />
soll das Ziel, in dem Fall trg ausgewählt werden.<br />
1 http://uwe.pst.ifi.lmu.de/exampleAddressBookWith<strong>Co</strong>ntentUpdates.html<br />
61
4. <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Metamodellbasieter transformativer Ansatz<br />
4.6. Zusammenfassung<br />
In diesem Kapitel wurde demonstriert, wie eine Transformation mithilfe der relationalen<br />
QVT-Sprache für die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> aussehen kann. Hierbei besteht eine solche Transformation<br />
zum Teil aus Kopier-Relationen, welche die Elemente, die infolge der Metamodell-<br />
<strong>Evolution</strong> nicht geändert wurden, kopieren. Zum anderen Teil besteht die Transformation<br />
aus den Relationen, die Elemente, die sich infolge der Metamodell-<strong>Evolution</strong> geändert haben<br />
auf entsprechende Elemente des neuen Metamodells abbilden. Es hat sich bei der Analyse der<br />
Metamodelländerungen zwischen UWE-Präsentationsmetamodell in der Version 1.7 und in<br />
der Version 1.8 ergeben, dass <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> vollkommen automatisiert erfolgen kann.<br />
Dies ist möglich, weil alle Metamodell-Änderungen zu dem Typ ” unbreaking changes“ oder<br />
zu dem Typ ” breaking and resolvable changes“ zugeordnet sind. Außer der vollkommen automatisierten<br />
<strong>Co</strong>-<strong>Evolution</strong> kann man die zu transformierenden <strong>Modell</strong>e zusätzlich während<br />
der Transformationsabarbeitung validieren lassen, indem man mithilfe OCL-Ausdrücken Invarianten<br />
innerhalb der where-Klauseln und Vorbedingungen innerhalb der when-Klauseln<br />
festlegt.<br />
Man kann von den Änderungsarten ausgehend den größten Teil der Relationen über die<br />
vordefinierten Transformationsmuster definieren. In manchen Fällen, wie es z.B. bei der Form<br />
und Anchored<strong>Co</strong>llection vorher der Fall war, gibt es Abweichungen von dem Allgemeinfall.<br />
Man kann nur mithilfe semantischen Wissens über entsprechende Metamodelle und deren<br />
Änderungen mehr Einzelheiten und Informationen auf unterschiedlichen Wegen in die neue<br />
Version übernehmen. Dies sind für jedes Metamodell eine spezifische Besonderheiten, die sich<br />
nicht kategorisieren lassen. Im Großen und Ganzen ist aber die Typologie aus dem Kapitel 3<br />
sehr hilfreich bei der Definition der Transformation, sodass man von Transformationsmustern<br />
sprechen kann.<br />
In diesem Kapitel wurde illustrativ vorgestellt, wie <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> für Metamodellbasierte<br />
UWE-<strong>Modell</strong>e unter dem Einsatz der Transformationen durchgeführt werden kann.<br />
Dadurch wurde zwar bewiesen, dass die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> gemäß der Überlegungen aus<br />
dem Kapitel 3 für UWE-<strong>Modell</strong>e funktioniert, aber es wurde damit keine anwendbare Lösung<br />
für die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> der UWE-<strong>Modell</strong>e angeboten. Bei der <strong>Modell</strong>ierungsumgebung<br />
für UWE-<strong>Modell</strong>e werden diese nicht als Instanzen derer Metamodelle definiert, sondern als<br />
UML-<strong>Modell</strong>e unter einer Anwendung von UWE-Profil. Der in diesem Kapitel beschriebener<br />
Ansatz zur Definition der Ecore-Metamodelle liefert eine schwergewichtige Erweiterung<br />
des UML im Rahmen der UWE-Methodologie. Das UWE setzt auf die UML-Profile als eine<br />
leichtgewichtige Erweiterung der UML. Die oben vorgeführten Transformationen sollen<br />
für eine Integration in die Toolumgebung der UWE-Methodologie im nächsten Abschnitt<br />
angepasst werden.<br />
62
5. Integration des UWE-Profil-basierten<br />
transformativen Ansatzes in die UWE<br />
Toolumgebung<br />
In diesem Kapitel wird eine Basis für die Integration des transformativen Ansatzes in eine<br />
Toolumgebung für UWE-Methodologie vorgestellt. Zuerst wird die UWE-Profil-basierte<br />
Transformation für die UWE-<strong>Modell</strong>e mit dem angewendeten UWE-Profil aus der metamodellbasierten<br />
Transformation siehe Kapitel 4 abgeleitet. Anschließend wird eine Toolumgebung<br />
für die Integration des UWE-Profil-basierten transformativen Ansatzes ausgewählt.<br />
Nach einer Anforderungsanalyse an diese Integration wird diese Integration detailliert beschrieben.<br />
5.1. Anpassung der metamodellbasierten Transformation für<br />
UWE-<strong>Modell</strong>e<br />
In Kapitel 4.3.2 vorgestellte Transformation für die UWE-<strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> basiert auf<br />
den Metamodelländerungen, welche durch die Metamodell-<strong>Evolution</strong> entstanden sind (siehe<br />
Kapitel 4). Die Definition eigener UWE-Metamodelle mithilfe des Eclipse Modeling Frameworks,<br />
die im Kapitel 4 vorgestellt wurde, liefert eine schwergewichtige Erweiterung der<br />
UML. Das UWE-Profil dagegen ermöglicht eine leichtgewichtige Erweiterung der UML. Es<br />
soll an dieser Stelle eine Strategie vorgeschlagen werden, die es erlaubt aus der metamodellbasierten<br />
Transformation eine UWE-Profil-basierte Transformation abzuleiten. Die Grundlage<br />
dafür liefern die Mappings, die bei der UWE-Metamodelldefinition zusätzlich definiert sind.<br />
Jedem nicht-abstrakten Element des UWE-Metamodells wird ein Stereotyp im UWE-Profil<br />
zugeordnet:<br />
UWE-Metamodellklasse UWE-Stereotype<br />
PresentationClass <br />
PresentationGroup <br />
Page <br />
PresentationProperty <br />
Text <br />
TextInput <br />
Anchor <br />
Anchored<strong>Co</strong>llection <br />
Button <br />
Image <br />
Form <br />
63
5. Integration des UWE-Profil-basierten transformativen Ansatzes in die UWE Toolumgebung<br />
Das UWE-Profil der Version 1.7 wird in der Abbildung 5.1 veranschaulicht. Somit lassen<br />
sich neue Relationen für die UWE-Profil-basierte Transformation aus den entsprechenden<br />
Relationen der metamodellbasierten Transformation (aus Kapitel 4.3) für jedes UWE-<br />
Profilelement direkt ableiten.<br />
Jedes UWE-<strong>Modell</strong> wird als UML2 <strong>Modell</strong> definiert, wobei das UWE-Profil auf dieses <strong>Modell</strong><br />
angewendet wird. Auf die Klassen des <strong>Modell</strong>s werden bestimmte UWE-Stereotypen angewendet.<br />
Die Attribute werden als TaggedValues aus dem UWE-Metamodell übernommen.<br />
Abbildung 5.1.: Das UML-Profil in Version 1.7<br />
Als Metamodell wird bei der UWE-Profilbasierten Transformation das Eclipse UML2 Metamodell<br />
in Ecore-Format verwendet, dass im Kapitel 2.5.2 bereits beschrieben wurde. Diese<br />
Umstellung auf das neue Metamodell bringt einige Anpassungen an der Transformation aus<br />
Kapitel 4.3 mit sich, die im Weiteren erläutert werden.<br />
5.1.1. Der Zugriff auf die angewendeten UWE-Stereotypen<br />
Das Quellmodell für die Transformation ist in Form eines UML 2 <strong>Modell</strong>s angegeben, wobei<br />
einige UWE-Stereotypen auf die Klassen dieses <strong>Modell</strong>s angewendet wurden. Im Fall des<br />
Präsentationsmodells sind alle eingesetzten Klassen mit den UWE-Stereotypen markiert. Im<br />
Rahmen der Transformation werden folgende Hilfsfunktionen definiert, die einen Zugriff auf<br />
ein Stereotyp anhand seines Namens ermöglicht: die getStereotype und die getStereotypes.<br />
Hier sind die Hilfsfunktionen bis auf ihren Rückgabenwerttyp identisch. Die zweite Funktion<br />
64
5.1. Anpassung der metamodellbasierten Transformation für UWE-<strong>Modell</strong>e<br />
liefert eine Menge der Stereotypen für einen bestimmten Stereotypnamen. Diese Hilfsfunktionen<br />
können im Weiteren aus anderen Relationen unter den when-Klauseln aufgerufen<br />
werden.<br />
1 query g e t S t e r e o t y p e ( stName : String ) : Stereotype<br />
2 {<br />
3 Stereotype . a l l I n s t a n c e s ( )−><br />
4 s e l e c t ( x : uml : : Stereotype |<br />
5 x . name = stName )−><br />
6 asSequence ( )−> f i r s t ( )<br />
7 }<br />
8<br />
9 query g e t S t e r e o t y p e s ( stName : String ) : Sequence ( Stereotype )<br />
10 {<br />
11 Stereotype . a l l I n s t a n c e s ( )−><br />
12 s e l e c t ( x : uml : : Stereotype |<br />
13 x . name = stName )−><br />
14 asSequence ( )<br />
15 }<br />
Listing 5.1: Die Hilfsfunktionen für das Zugriff auf ein angewendetes Stereotyp<br />
Das UWE-Profil wird in der Transformationskonfiguration neben dem Quellmodell angegeben.<br />
Somit ist während der Abarbeitung der Transformation der Zugriff auf all die verfügbaren<br />
UWE-Stereotypen gewährleistet. Unter einer when-Klausel einer Relation, kann somit<br />
abgefragt werden, ob ein Stereotyp mit vorgegebenen Namen auf eine Klasse angewendet<br />
ist.<br />
1 when<br />
2 {<br />
3 s t = g e t S t e r e o t y p e ( ’text’ ) ;<br />
4 s r c C l s . i s S t e r e o t y p e A p p l i e d ( s t ) ;<br />
5 }<br />
Listing 5.2: Die Anwendung des Stereotyps text wird unter der when-Klausel geprüft<br />
Zuerst wird in einer Variablen st vom Typ uml:Stereotype anhand des Stereotypnamens der<br />
Wert für den Stereotyp mithilfe der oben beschriebenen Hilfsfunktion gespeichert.<br />
Dann kann mit Hilfe der isStereotypeApplied-Funktion geprüft werden, ob dieses Stereotyp<br />
auf der Quellklasse srcCls angewendet ist.<br />
5.1.2. Die neu angepasste Transformation<br />
Die neuen Relationen sind den Relationen aus Kapitel 4.3 sehr ähnlich. Das Schreiben von<br />
einem QVT-Skript in der relationalen QVT-Sprache, das auf dem Eclipse UML2 Metamodell<br />
aufbaut, soll gemäß diesem Metamodell angepasst werden. Dies betrifft die Struktur<br />
der Transformation. Um UML-Klassen transformieren zu können, wird die Transformation<br />
rekursiv aufgebaut.<br />
65
5. Integration des UWE-Profil-basierten transformativen Ansatzes in die UWE Toolumgebung<br />
Die top-level-Relation<br />
Bei einem rekursiven Aufbau gibt es nur eine top level-Relation, alle anderen Relationen<br />
werden in den where-Klauseln aufgerufen. Das Präsentationspaket ist in dem Präsentationsmodell<br />
enthalten. Das Model-Relation ist die einzige top-level-Relation. Die Relation<br />
Packages wird in der where-Klausel der Relation Model aufgerufen.<br />
1 transformation e v o l u t i o n P r o f i l ( source : uml , t a r g e t : uml )<br />
2 {<br />
3 key Class {name , owner } ;<br />
4 key Property {name , owner } ;<br />
5<br />
6 top relation Model<br />
7 {<br />
8 modelName : String ;<br />
9 checkonly domain source s r c : uml : : Model<br />
10 {<br />
11 name = modelName<br />
12 } ;<br />
13 enforce domain t a r g e t dst : uml : : Model<br />
14 {<br />
15 name = modelName<br />
16<br />
17 } ;<br />
18 where<br />
19 {<br />
20 Packages ( src , dst ) ;<br />
21 }<br />
22 }<br />
23 relation Packages<br />
24 {<br />
25 packageName : String ;<br />
26 checkonly domain source srcPkg : uml : : Package<br />
27 {<br />
28 packagedElement = srcP : uml : : Package { name = packageName }<br />
29 } ;<br />
30 enforce domain t a r g e t dstPkg : uml : : Package<br />
31 {<br />
32 packagedElement = dstP : uml : : Package { name = packageName }<br />
33 } ;<br />
34 where<br />
35 {<br />
36 Packages ( srcP , dstP ) ;<br />
37 Datatypes ( srcP , dstP ) ;<br />
38 pageClasses ( srcP , dstP ) ;<br />
39 P r e s C l a s s C l a s s e s ( srcP , dstP ) ;<br />
40 t e x t C l a s s e s ( srcP , dstP ) ;<br />
41 anchorClasses ( srcP , dstP ) ;<br />
42 −− d i e r e s t l i c h e n Aufrufe werden wegen der Ü b e r s i c h t l i c h k e i t<br />
n i c h t angegeben −−<br />
43 }<br />
44 }<br />
66
5.1. Anpassung der metamodellbasierten Transformation für UWE-<strong>Modell</strong>e<br />
Listing 5.3: Die Relationen für das <strong>Modell</strong> und das Paket<br />
Unter der Verwendung des Eclipse UML 2 kann ein Objektausdruck in Form namespace =<br />
trgPackage nicht angegeben werden, da namespace keine Informationen über die Pakete, in<br />
denen eine Klasse enthalten ist, bereitstellt. Dies wird mithilfe von einem key umgegangen.<br />
Eine Angabe von key erlaubt bei der Generierung von Zielelementen die Duplikate zu unterbinden.<br />
Die in den Zeilen 3 und 5 des Listings 5.3 definierte keys für die Klassen und die<br />
Properties lösen das Problem mit dem fehlenden Bezug der Klassen auf deren Paket. Sobald<br />
eine Klasse mit einem eindeutigen Namen erzeugt wird, wird bei jedem Versuch diese Klasse<br />
erneut zu erzeugen diese bereits existierende Klasse genommen. Dies entspricht der Tatsache,<br />
dass innerhalb eines Pakets keine Klassen mit denselben Namen existieren dürfen.<br />
Die Relation für den Text<br />
Im Weiteren wird eine Relation für Textelemente betrachtet. Diese Relation ist nahezu identisch<br />
zu der Relation mapText aus dem Kapitel 4. Unter der when-Klausel wird geprüft,<br />
ob die Klasse mit dem -Stereotyp markiert ist. Bei dieser Relation werden ausschließlich<br />
solche Klassen berücksichtigt.<br />
1 −− Relation b e t r a c h t e t nur Klassen mit dem Stereotyp t e x t −−<br />
2 relation t e x t C l a s s e s<br />
3 {<br />
4 s t : uml : : Stereotype ;<br />
5 className : String ;<br />
6 checkonly domain source s r c : uml : : Package<br />
7 {<br />
8 packagedElement = s r c C l s : uml : : Class<br />
9 {<br />
10 name = className<br />
11 }<br />
12 } ;<br />
13 enforce domain t a r g e t dst : uml : : Package<br />
14 {<br />
15 packagedElement = dstCls : uml : : Class<br />
16 {<br />
17 name = className<br />
18 }<br />
19 } ;<br />
20 when<br />
21 {<br />
22 s t = g e t S t e r e o t y p e ( ’text’ ) ;<br />
23 s r c C l s . i s S t e r e o t y p e A p p l i e d ( s t ) ;<br />
24 }<br />
25 where<br />
26 {<br />
27 −− Klasse Text erbt von OutputElement das A ttribute<br />
p e r i o d i c R e f r e s h −−<br />
28 p e r i o d i c R e f r e s h A t t r i b u t e ( dstCls ) ;<br />
29 −− Erbt von der S u p e r k l a s s e ValuedElement das Attribute<br />
l i v e R e p o r t −−<br />
67
5. Integration des UWE-Profil-basierten transformativen Ansatzes in die UWE Toolumgebung<br />
30 l i v e R e p o r t A t t r i b u t e ( dstCls ) ;<br />
31 }<br />
32 }<br />
1<br />
Listing 5.4: Die Relation für die Textelemente<br />
In Version 1.7 des UWE-Profils besitzt das Stereotyp keine Attribute in Form<br />
einer TaggedValue. In Version 1.8 sind zwei neue Attribute dazugekommen: das periodicRefresh<br />
und das liveReport. Das Text-Element erbt im UWE-Metamodell diese Attribute von<br />
den abstrakten Klassen OutputElement und ValuedElement. Die Erzeugung dieser Attribute<br />
wird in einer speziellen Relation erzwungen.<br />
Im nächsten Listing ist die Relation für das liveReport-Attribut vorgestellt:<br />
2 relation l i v e R e p o r t A t t r i b u t e<br />
3 {<br />
4 enforce domain t a r g e t oc : uml : : Class<br />
5 {<br />
6 ownedAttribute = op : uml : : Property<br />
7 {<br />
8 name = ’liveReport’ ,<br />
9 v i s i b i l i t y = uml : : V i s i b i l i t y K i n d : : private ,<br />
10 type = getDataTypeBoolean ( )<br />
11 }<br />
12 } ;<br />
13 }<br />
Listing 5.5: Die Relation für die Erzeugung eines liveReport-Attributs<br />
Diese Relation verfügt ausschließlich über die enforce-Domäne. In der Zielklasse wird das<br />
Attribute liveReport erzwungen.<br />
Wie im Kapitel 4.3.2 bereits beschrieben, gehört der Text zu den einfachen UIElements.<br />
Somit sind die Relationen für die Transformation der restlichen Subklassen des Elements<br />
UIElement, solchen wie das Image, der Button und das Anchor der Relation textClasses<br />
sehr ähnlich und werden im Weiterem nicht näher behandelt.<br />
5.1.3. Die Relation für die PresentationClass<br />
Die Relation für die Klassen, die mit dem -Stereotyp markiert sind,<br />
sieht folgendermaßen aus:<br />
1 −− Relation b e t r a c h t e t nur Klassen mit dem Stereotyp<br />
p r e s e n t a t i o n C l a s s −−<br />
2 relation P r e s C l a s s e s<br />
3 {<br />
4 s t : uml : : Stereotype ;<br />
5 className : String ;<br />
6 checkonly domain source s r c : uml : : Package<br />
7 {<br />
68
5.1. Anpassung der metamodellbasierten Transformation für UWE-<strong>Modell</strong>e<br />
8 packagedElement = s r c C l s : uml : : Class<br />
9 {<br />
10 name = className<br />
11 }<br />
12 } ;<br />
13 enforce domain t a r g e t dst : uml : : Package<br />
14 {<br />
15 packagedElement = dstCls : uml : : Class<br />
16 {<br />
17 name = className<br />
18 }<br />
19 } ;<br />
20 when<br />
21 {<br />
22 s t = g e t S t e r e o t y p e ( ’presentationClass’) ;<br />
23 s r c C l s . i s S t e r e o t y p e A p p l i e d ( s t ) ;<br />
24 }<br />
25 where<br />
26 {<br />
27 −− Kopiere bestehende P r o p e r t i e s −−<br />
28 A t t r i b u t e s ( srcCls , dstCls ) ;<br />
29 −− A l l e PresentationGroup und deren Subklassen b e s i t z e n −−<br />
30 −− im neuen Metamodell A ttribute c o l l a p s e und dragdrop −−<br />
31 c o l l a p s e A t t r i b u t e ( dstCls ) ;<br />
32 dragdropAttribute ( dstCls ) ;<br />
33 }<br />
34 }<br />
Listing 5.6: Die Relation für die PresentationClass<br />
Wird bei der Abarbeitung der Transformation eine Klasse mit dem Stereotyp gefunden, so wird eine Klasse mit denselben Namen im Zielmodell erzeugt. Die<br />
Properties der PresentationClass werden in der Attributes-Relation erzwungen. Im UWE-<br />
Metamodell wurden zwei neuen Attribute der Klasse PresentationGroup hinzugefügt: collapse<br />
und dragdrop. Diese Attribute werden analog wie das Attribute liveReport von Text in<br />
einer ausgelagerten Relation der Zielklasse hinzugefügt.<br />
Die presentationClass gehört zu der Gruppe der Elementen, die PresentationProperties besitzen<br />
dürfen, genau so wie die PresentationGroup und die Page. Aus diesem Grund werden<br />
die Relationen für die PresentationGroup und die Page nicht näher erläutert. Die Klassen<br />
werden nach dem angewendeten Stereotyp unterschieden, somit wird auch strikt zwischen<br />
der PresentationClass und deren Subklassen unterschieden.<br />
Im Weiteren wird die Relation Attributes für die Erzeugung der Properties einer PresentationClass<br />
beschrieben.<br />
Die Relation für die PresentationProperty<br />
In der UML 2 wird zwischen einfachen und komplexen Attributen unterschieden. In der<br />
Relation Attributes werden in der where-Klausel dafür weitere Relationen aufgerufen: pri-<br />
69
5. Integration des UWE-Profil-basierten transformativen Ansatzes in die UWE Toolumgebung<br />
mitiveAttribute und complexAttribute. In der Relation primitiveAttribute werden die einfachen<br />
UML-Datatypen als Attribute behandelt. Zum Beispiel kann eine Klasse aus dem<br />
Quellmodell einen Attribute von Typ boolean oder String besitzen.<br />
1 relation A t t r i b u t e s<br />
2 {<br />
3 checkonly domain source i c : uml : : Class<br />
4 {<br />
5 ownedAttribute = ip : uml : : Property {}<br />
6 } ;<br />
7 enforce domain t a r g e t oc : uml : : Class<br />
8 {<br />
9 ownedAttribute = op : uml : : Property {}<br />
10 } ;<br />
11 where<br />
12 {<br />
13 p r i m i t i v e A t t r i b u t e ( ip , op ) ;<br />
14 complexAttribute ( ip , op ) ;<br />
15 }<br />
16 }<br />
17<br />
18 relation p r i m i t i v e A t t r i b u t e<br />
19 {<br />
20 propName : String ;<br />
21 propType : uml : : DataType ;<br />
22 p r o p V i s i b i l i t y : uml : : V i s i b i l i t y K i n d ;<br />
23 checkonly domain source scrPr : uml : : Property<br />
24 {<br />
25 name = propName ,<br />
26 v i s i b i l i t y = p r o p V i s i b i l i t y ,<br />
27 type = propType<br />
28 } ;<br />
29 enforce domain t a r g e t trgPr : uml : : Property<br />
30 {<br />
31 name = propName ,<br />
32 v i s i b i l i t y = p r o p V i s i b i l i t y ,<br />
33 type = propType<br />
34 } ;<br />
35 when<br />
36 {<br />
37 not propType . oclIsTypeOf ( uml : : Class ) ;<br />
38 }<br />
39 }<br />
40<br />
41 relation complexAttribute<br />
42 {<br />
43 propName : String ;<br />
44 className : String ;<br />
45 p r o p V i s i b i l i t y : uml : : V i s i b i l i t y K i n d ;<br />
46 checkonly domain source scrPr : uml : : Property<br />
47 {<br />
48 name = propName ,<br />
49 v i s i b i l i t y = p r o p V i s i b i l i t y ,<br />
70
50 type = c l s : uml : : Class<br />
51 {<br />
52 name = className<br />
53 }<br />
54 } ;<br />
55 enforce domain t a r g e t trgPr : uml : : Property<br />
56 {<br />
57 name = propName ,<br />
58 v i s i b i l i t y = p r o p V i s i b i l i t y ,<br />
59 type = c l s 2 : uml : : Class<br />
60 {<br />
61 name = className<br />
62 }<br />
63 } ;<br />
64 when<br />
65 {<br />
66 s t = g e t S t e r e o t y p e ( ’presentationProperty’) ;<br />
67 scrPr . i s S t e r e o t y p e A p p l i e d ( s t ) ;<br />
68 }<br />
69 }<br />
Listing 5.7: Die Relation für die PresentationProperties<br />
5.2. Wahl der Toolumgebung<br />
Die Relation primitiveAttribute erzwingt ein Attribut mit seinem Namen, der Sichtbarkeit<br />
und dem Typ. Unter der when-Klausel wird folgende Bedingung aufgestellt:<br />
not propType.oclIsTypeOf(uml::Class);<br />
Diese sorgt dafür, dass in der Relation nur die Attribute mit einem einfachen Datentyp<br />
berücksichtigt werden.<br />
Die Relation complexAttribute ermöglicht die Erzeugung von PresentationProperties. Deren<br />
Typ uml:Class ist. Der Name, die Sichtbarkeit und der Klassentyp der Property werden<br />
im Zielmodell übernommen. Unter der when-Klausel wird zusätzlich geprüft, dass -Stereotyp auf die Quellproperty angewendet ist.<br />
Inzwischen wurden alle drei Typen der Elementen des UWE-Präsentationsmodell betrachtet:<br />
die einfachen UIElements, die Elemente, welche Properties besitzen dürfen und die Properties<br />
selbst.<br />
Wie aus den vorgestellten Relationsskripten entnommen werden kann, erfolgt keine Anwendung<br />
der Stereotypen aus dem Profilversion 1.8 auf die Klassen des Zielmodells. Dieses<br />
Problem sowie die Lösungsvorschläge für das Problem werden im Kapitel 5.5 näher angegangen.<br />
5.2. Wahl der Toolumgebung<br />
Die Transformation in der relationalen QVT-Sprache aus Kapitel 4.3 ist für die <strong>Modell</strong>e mit<br />
angewendetem UWE-Profil angepasst worden und mit dem QVT-Werkzeug mediniQVT der<br />
Version 1.7.0 erarbeitet und getestet worden, siehe Kapitel 5.1.2. Das Tool mediniQVT ist<br />
71
5. Integration des UWE-Profil-basierten transformativen Ansatzes in die UWE Toolumgebung<br />
ein Open Source Produkt, das die von der OMG veröffentlichte Spezifikation der relationalen<br />
QVT-Sprache zur Zeit am vollständigsten abbildet[19] Das mediniQVT ist als Plug-in für<br />
die Eclipse-Entwicklungsplattform implementiert.<br />
Das Tool MagicDraw 1 verfügt über keine Implementierungen für die <strong>Modell</strong>transformationen<br />
in der relationalen QVT-Sprache. Die Transformationen können ausschließlich hart kodiert<br />
in Java eingebettet werden. Dadurch gehen alle Vorteile der formalen Transformationen und<br />
die Möglichkeit zur Validierung der <strong>Modell</strong>e während der Ausführung der Transformationen<br />
verloren. Dies widerspricht den Grundideen des MDA. Hinzu kommt, dass es allgemein nicht<br />
einfach ist, mit dem schlecht dokumentierten OpenAPI für MagicDraw zu operieren, wie Petar<br />
Blagoev in seiner Arbeit [3] berichtete. Ebenso erläuterte Marianne Busch in [5], dass die<br />
Verwendung des OpenAPIs nicht einfach ist. Aufgrund der Tatsache, dass der Quellcode von<br />
MagicDraw nicht zur Verfügung steht, schließt dies die Verbesserung sowie die Erweiterung<br />
der OpenAPI Funktionen aus. Diese Tatsache erschwert ebenfalls die Verwendung von bestimmten<br />
APIs, wie z.B. MDT OCL Eclipse Bibliotheken 2 . Es ist nicht möglich herauszufinden<br />
welche Version von MDT OCL Bibliotheken innerhalb der MagicDraw-Implementierung<br />
verwendet wird. Dadurch ist die Implementierung wegen Versionskonflikt zwischen OCL-<br />
Bibliotheken unmöglich. In einer Implementierung einer MagicUWE-Erweiterung für die<br />
Validierung der UWE-<strong>Modell</strong>e wurde dafür ein interner Server implementiert, in den die<br />
OCL-<strong>Co</strong>nstraints-Bearbeitung ausgelagert werden musste, um der Bibliothekinkompatibilität<br />
auszuweichen. Zu guter Letzt fehlt es dem OpenAPI an der Flexibilität, was besonders<br />
bei GUI-Entwicklung zur Last fällt.<br />
Würde es keine anderen Möglichkeiten für die Integration des Transformationsansatzes in<br />
die UWE-Methodologie geben, so müsste man sich mit der einzigen Integrationsmöglichkeit<br />
zufriedengeben: die Transformationen hart codiert in Java für das Tool MagicUWE zu implementieren.<br />
Letztens wurde ein zu MagicDraw alternatives Tool implementiert, mit dem UWE-<strong>Modell</strong>e<br />
erstellt werden können. Dieses Tool soll an dieser Stelle in Betracht gezogen werden. Das<br />
UWEclipse ist im Rahmen der Diplomarbeit ” Erweiterung eines Open Source-Werkzeugs<br />
für die UML-basierte <strong>Modell</strong>ierung von Webanwendungen“ von Dariya Sharonova entstanden.<br />
Das UWEclipse ist die Nachbildung bzw. die Migration der MagicUWE-Funktionalität<br />
in ein Open Source-Werkzeug vergleichbar mit MagicDraw <strong>Modell</strong>ierungsmöglichkeiten[22].<br />
Die im Rahmen der oben genannten Diplomarbeit entwickelte Software-Lösung für die Unterstützung<br />
der UWE-Methodologie (UWEclipse) ist in den TOPCASED UML Editor integriert.<br />
TOPCASED ist ein grafisches UML-<strong>Modell</strong>ierungswerkzeug (Eclipse-basierte RCP),<br />
das in Version 5.0.0 erweitert wurde. UWEclipse ist in Form eines Eclipse-Plug-ins entwickelt<br />
worden. Auf diese Weise kann es problemlos in jede mit TOPCASED ausgestattete Eclipse-<br />
Distribution integriert werden und auf der Funktionalität von TOPCASED aufbauen.[22]<br />
In der Eclipse-Umgebung im Gegensatz zu MagicDraw steht eine Anzahl der QVT-Implementierungen<br />
zur Verfügung. Unter anderem das Tool, namens mediniQVT 3 für die Durch-<br />
1 http://uwe.pst.ifi.lmu.de/toolMagicUWE.html<br />
2 http://www.eclipse.org/modeling/mdt/?project=ocl<br />
3 http://projects.ikv.de/qvt<br />
72
5.3. Die Anforderungsanalyse für die Integration des transformativen Ansatzes<br />
führung der Transformationen in der relationalen QVT-Sprache, das im Kapitel 4.3 ausführlich<br />
besprochen worden war. Sobald eine Transformation in der relationalen QVT-Sprache<br />
für einen gegebenen Versionsübergang zur automatisierten <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> von existierenden<br />
UWE-<strong>Modell</strong>en vorliegt, können beliebige <strong>Modell</strong>e dem <strong>Co</strong>-<strong>Evolution</strong>-Prozess<br />
unterzogen werden. Das Tool TOPCASED mit mediniQVT und einer Kombination aus<br />
ausgewählten Eclipse-Plug-ins erweitert, die im Weiteren beschrieben werden, soll dem <strong>Modell</strong>ierer<br />
eine Basis für die Durchführung der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> schaffen.<br />
Im nächsten Kapitel wird eine Anforderungsanalyse für die Integration des transformativen<br />
Ansatzes in eine Eclipse-basierte <strong>Modell</strong>ierungsumgebung beschrieben. Nachfolgend werden<br />
ausgewählte Eclipse-basierte Tools näher vorgestellt, welche den <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>sprozess<br />
unterstützen sollen. Die Resultate und Probleme bei der Durchführung der <strong>Modell</strong>-<strong>Co</strong>-<br />
<strong>Evolution</strong> für UWE-<strong>Modell</strong>e werden anschließend vorgestellt und Alternativen zur Lösung<br />
der Probleme aufgezeigt.<br />
5.3. Die Anforderungsanalyse für die Integration des<br />
transformativen Ansatzes<br />
Zuerst werden die funktionalen Anforderungen für die Durchführung des <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>-<br />
Prozesses unter die Lupe genommen. Anschließend werden einige nicht-funktionale Anforderungen<br />
gestellt und bestimmte Aspekte wie z.B. deren Bedienbarkeit diskutiert.<br />
5.3.1. Die funktionalen Anforderungen<br />
Dem <strong>Modell</strong>ierer soll die automatisierte <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> im Rahmen einer <strong>Modell</strong>ierungsumgebung<br />
ermöglicht werden. Es wird vorausgesetzt, dass das neue und das alte UWE-<br />
Profile vorliegen, ebenso wie das entsprechende Transformationsskript. Im Folgenden werden<br />
die Anwendungsfälle für die Durchführung der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> beschrieben.<br />
Die Grundidee besteht darin, dass die Toolumgebung dem <strong>Modell</strong>ierer zusätzliche Funktionalität<br />
zur automatisierten <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> anbietet. Es soll möglich sein, dass für<br />
ein beliebiges <strong>Modell</strong>, das unter Anwendung der alten Version des UWE-Profils erstellt wurde,<br />
ein neues <strong>Modell</strong> generiert wird, das weitgehend all die Informationen des alten <strong>Modell</strong>s<br />
beinhaltet. Das neue generierte <strong>Modell</strong> geht mit der neuen Version des UWE-Metamodells<br />
konform.<br />
Die Anpassungen, die im Laufe der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> vorgenommen wurden, sollen im<br />
generierten <strong>Modell</strong> nach Bedarf gekennzeichnet werden, damit der <strong>Modell</strong>ierer genau weiß,<br />
auf welchem Weg das <strong>Modell</strong> transformiert wurde. Das heißt, dass die Elemente des <strong>Modell</strong>s,<br />
die aufgrund der Metamodell-<strong>Evolution</strong> geändert worden sind, hervorgehoben werden<br />
sollen. Sollten im alten Metamodell Elemente vorhanden sein, deren Änderungstyp wegen<br />
Metamodell-<strong>Evolution</strong> zu der Kategorie ” breaking and unresolvable changes“ zählen, so ist<br />
eine automatisierte Transformation der Instanzen solcher Elemente nicht möglich. Diese Anpassungen<br />
sind ohne menschliches Eingreifen nicht möglich. Sie werden bei der Transforma-<br />
73
5. Integration des UWE-Profil-basierten transformativen Ansatzes in die UWE Toolumgebung<br />
tion übersprungen. Diese Elemente sollten im ursprünglichen <strong>Modell</strong> nach Wunsch angezeigt<br />
werden können. Dem <strong>Modell</strong>ierer soll außerdem die Dokumentation für die Strategie der Anpassung<br />
dieser Elemente zur Verfügung gestellt werden. Wie in der Zusammenfassung des<br />
Kapitels 3 bereits beschrieben, kann die Eindeutigkeit des <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>sprozesses<br />
nur durch die genaue Spezifikation aller Anpassungsmöglichkeiten gewährleistet werden.<br />
Insbesondere soll genau spezifiziert werden wie die Anpassungen der <strong>Modell</strong>elementen erfolgen<br />
sollen, die durch ” breaking and unresolvable changes“ bedingt sind. Die Strategie für<br />
die manuellen Anpassungsschritte solcher Elementen soll bei der Erarbeitung der <strong>Modell</strong>-<br />
<strong>Co</strong>-<strong>Evolution</strong> aus der Metamodell-<strong>Evolution</strong> abgeleitet, dokumentiert und in Form einer<br />
Spezifikation dem <strong>Modell</strong>ierer zur Verfügung gestellt werden.<br />
Die Instanzen der Metamodellelemente deren Änderungstyp wegen Metamodell-<strong>Evolution</strong><br />
zu der Kategorie ” breaking and resolvable changes“ zählen, werden mithilfe der Transformation<br />
in die neuen geänderte <strong>Modell</strong>elemente überführt. Im Zielmodell soll die Hervorhebung<br />
dieser Elemente möglich sein, um die Änderungen während der Transformation zu veranschaulichen.<br />
Die Hervorhebung der Elemente soll sich in Abhängigkeit von der Metamodellmodifikation<br />
an diesem Element unterscheiden. Entweder wurde das Element geändert oder<br />
neu hinzugefügt. Gelöschte Elemente sind nicht mehr vorhanden und sollten im Quellmodell<br />
hervorgehoben werden.<br />
Im Weiteren werden unterschiedliche Möglichkeiten zur Hervorhebung dieser Elemente im<br />
Bezug auf die Bedienbarkeit diskutiert.<br />
5.3.2. Die nicht-funktionalen Anforderungen<br />
Bei den nicht-funktionalen Anforderungen steht die Bedienbarkeit bzw. die Benutzerfreundlichkeit<br />
im Vordergrund. Die genauen Beschreibungen für jedes konkretes <strong>Modell</strong>element<br />
für seine <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> sollen dem <strong>Modell</strong>ierer zugänglich sein. Die Beschreibungen<br />
der <strong>Co</strong>-<strong>Evolution</strong>sstrategie könnten in Form von Zusatzinformationen zu jedem Element<br />
im <strong>Modell</strong> hinzugefügt und mit angezeigt werden. Sind die <strong>Modell</strong>e komplex, an denen <strong>Co</strong>-<br />
<strong>Evolution</strong> stattfinden soll, und wird bei jedem Element im Diagramm eine Zusatzinformation<br />
diesbezüglich angezeigt, so werden die neu angepassten <strong>Modell</strong>e bald unübersichtlich und mit<br />
Zusatzinformationen überladen. Dies sollte vermieden werden.<br />
Es soll dem <strong>Modell</strong>ierer auf jeden Fall ermöglicht werden die Anzahl und die Form der anzuzeigenden<br />
Informationen zu konfigurieren. Außerdem soll die Kalkulation des neuen <strong>Modell</strong>s,<br />
also die tatsächliche Transformation, effizient verlaufen. Die Korrektheit der Ausführung des<br />
<strong>Co</strong>-<strong>Evolution</strong>-Prozesses ist auch eine der wichtigsten Anforderungen. Im Folgenden sind die<br />
nicht-funktionalen Anforderungen zusammengefasst:<br />
74<br />
• Die Bedienbarkeit<br />
• Die Benutzerfreundlichkeit<br />
• Die Konfigurierbarkeit<br />
• Die Korrektheit<br />
• Die Performanz
5.3. Die Anforderungsanalyse für die Integration des transformativen Ansatzes<br />
Die Korrektheit ist dadurch gewährleistet, dass bei der Definition der Transformationen<br />
vollständige Informationen über die Metamodelländerungen vorliegen. Die Transformation<br />
selbst enthält die Vorbedingungen und Invarianten in der OCL-Sprache, die während der<br />
Ausführung der Transformation geprüft werden. Somit wird stets ein korrektes <strong>Modell</strong> als<br />
Ergebnis der Transformation geliefert. Die restlichen nicht-funktionalen Anforderungen werden<br />
genauer angegangen.<br />
Es ist notwendig, nach jeder Transformation deren Ergebnisse auch entsprechend zu visualisieren.<br />
Da das UWE selbst eine Methodologie für die grafische <strong>Modell</strong>ierung ist, hängt<br />
die Benutzer-Akzeptanz sicherlich maßgeblich von der grafischen Darstellung der <strong>Modell</strong>differenzen<br />
und Änderungen des <strong>Modell</strong>s ab. Wünschenswert wäre natürlich eine Markierung<br />
des geprüften <strong>Modell</strong>s selbst, um so die <strong>Modell</strong>differenzen direkt im <strong>Modell</strong>ierungswerkzeug<br />
visualisieren und auch entsprechend bearbeiten zu können.<br />
In den Kapiteln 3.2.2 bis 3.2.4 wurde zwischen additiven Änderungen, subtraktiven Änderungen<br />
und Updates an einem Metamodell unterschieden. Dementsprechend werden diese<br />
Aktionen an den existierenden <strong>Modell</strong>en während der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> nachvollzogen.<br />
Nach der Ausführung der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> wird erwartet, dass die Unterschiede zwischen<br />
dem Ursprungs- und dem Zielmodell hervorgehoben werden. Im Zielmodell soll die Hervorhebung<br />
der Elemente möglich sein, um zu visualisieren welche Änderungen sie während der<br />
Transformation erfahren haben. Die Hervorhebung der Elemente soll sich in Abhängigkeit<br />
von der Metamodellmodifikation, die dieses Element betrifft, unterscheiden. Entweder wurde<br />
das Element geändert oder neu hinzugefügt, die gelöschten Elemente sind nicht mehr vorhanden.<br />
Die Umrandung der Elemente mit unterschiedlichen Farben würde diese kennzeichnen,<br />
ohne das <strong>Modell</strong> mit Informationen zu überladen. Zum Beispiel könnten neu hinzugefügte<br />
Elemente mit Grün umrandet sein und die geänderten Elemente mit Gelb.<br />
Sind im alten Metamodell Elemente vorhanden, deren Änderungstyp wegen Metamodell-<br />
<strong>Evolution</strong> zu der Kategorie ” breaking and unresolvable changes“ gehört, so ist eine automatisierte<br />
Transformation solcher Elemente nicht möglich, somit werden diese bei der Transformation<br />
übersprungen. Diese Elemente sollten im ursprünglichen <strong>Modell</strong> nach Wunsch<br />
angezeigt werden können, z.B. mit einer roten Umrandung. Damit der Entwickler anhand<br />
dieser Elemente entscheiden kann, ob und in welcher Form diese im neuen <strong>Modell</strong> übernommen<br />
werden sollen. So kann vermieden werden, dass für das <strong>Modell</strong> relevante Informationen<br />
aus Versehen verloren gehen. Sind in beiden <strong>Modell</strong>en farbige Umrandungen an den entsprechenden<br />
Elementen vorhanden, so kann man die Unterschiede zwischen diesen auf einen<br />
Blick sehen. Es sollte möglich sein die farbige Darstellung oder die Darstellung bestimmter<br />
Änderungsgruppen auszublenden. Somit könnte man die Anzeige nach dem eigenen Bedarf<br />
konfigurieren.<br />
75
5. Integration des UWE-Profil-basierten transformativen Ansatzes in die UWE Toolumgebung<br />
5.4. Die Anwendungsfälle<br />
Für ein UWE-<strong>Modell</strong>, das in einer früheren UWE-Profil-Version entwickelt worden ist, soll<br />
eine Transformation zur <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> gestartet werden können. Somit soll dieses<br />
<strong>Modell</strong> in ein neues <strong>Modell</strong> automatisiert überführt werden, das mit der aktuellen Version<br />
des UWE-Profils konform geht. Da die Überführung mithilfe einer Transformation atomar<br />
abgearbeitet wird, ergeben sich folgende wenige Anwendungsfälle:<br />
Abbildung 5.2.: Die Anwendungsfälle für den UWE-<strong>Co</strong>-<strong>Evolution</strong>sprozess<br />
In den nächsten Abschnitten folgt eine detaillierte Beschreibung der Anwendungsfälle.<br />
5.4.1. Das UseCase ” Die Transformation für ein <strong>Modell</strong> durchführen“<br />
Die Kurzbeschreibung<br />
In der Entwicklungsumgebung soll in einer Run-Konfiguration der Speicherort des Quellund<br />
des Ziel-<strong>Modell</strong>s angegeben werden. Das Transformationsskript soll ebenfalls angegeben<br />
werden, sowie die Richtung der Transformationsausführung.<br />
Die Vorbedingung<br />
Das Transformationsskript für den ausgewählten Versionsübergang liegt vor. Das Quell-<br />
<strong>Modell</strong> ist konform zu dem entsprechenden Metamodell.<br />
76
Die Nachbedingung<br />
5.4. Die Anwendungsfälle<br />
Das Zielmodell wird generiert, das zu dem neuen UWE-Metamodell konform ist.<br />
5.4.2. Das UseCase ” Die <strong>Modell</strong>differenzen anzeigen lassen“<br />
Die Kurzbeschreibung<br />
Nachdem das Zielmodell unter Einsatz einer Transformation generiert wurde, soll die Berechnung<br />
der <strong>Modell</strong>differenzen, sowie die farbige Darstellung dieser Differenzen ermöglicht<br />
werden. An der ersten Stelle soll eine Berechnung der <strong>Modell</strong>differenzen für <strong>Modell</strong>e, die<br />
in einer textuellen baumartigen Form repräsentiert sind, möglich sein. Eine graphische Repräsentation<br />
der <strong>Modell</strong>differenzen soll ebenfalls möglich sein.<br />
Die Vorbedingung<br />
Das Quell-<strong>Modell</strong> und das generierte UWE-<strong>Modell</strong> liegen vor. Beide <strong>Modell</strong>e sind zu ihren<br />
Metamodellen konform.<br />
Die Nachbedingung<br />
Die <strong>Modell</strong>differenzen sind aufgelistet. Diese Differenzen sind in der Baumstruktur der <strong>Modell</strong>e<br />
bzw. der grafischen Repräsentation der <strong>Modell</strong>e entsprechend farblich hervorgehoben.<br />
5.4.3. Das UseCase ” Die Konformität eines <strong>Modell</strong>s zu seinem Metamodell<br />
prüfen“<br />
Die Kurzbeschreibung<br />
Es soll dem <strong>Modell</strong>ierer ermöglicht werden, die Konformität der <strong>Modell</strong>e prüfen zu lassen.<br />
Anders ausgedrückt die <strong>Modell</strong>e zu validieren.<br />
Die Vorbedingung<br />
Die Beschränkungen (<strong>Co</strong>nstraints in der OCL-Sprache) für die <strong>Modell</strong>validierung liegen vor.<br />
Die Nachbedingung<br />
Das Ergebnis der Validierung wird angezeigt.<br />
77
5. Integration des UWE-Profil-basierten transformativen Ansatzes in die UWE Toolumgebung<br />
5.5. Die zusammengesetzte Toolumgebung<br />
Das mediniQVT Tool basiert auf der Eclipse Plattform, genau wie das TOPCASED-Tool,<br />
das in unserem Fall für die Definition der UWE-<strong>Modell</strong>e verwendet wurde.<br />
Das Eclipse-Plug-in mediniQVT in der Version 1.7.0 lässt sich problemlos in das Tool TOP-<br />
CASED in der Version 4.3.0 mit einbinden. Somit kann man ohne export/import Aktionen<br />
zwischen den Tools, die <strong>Modell</strong>e den Transformationen unterziehen. Unsere erste Anforderung<br />
war, dass der <strong>Modell</strong>ierer mit wenigen Klicks die Transformation zur <strong>Modell</strong>-<strong>Co</strong>-<br />
<strong>Evolution</strong> starten kann. Diese Anforderung ist bei der oben genannten Tool-Konstellation<br />
bereits erfüllt. Für den Start der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> Transformation soll lediglich eine<br />
mediniQVT-Konfiguration für diese angegeben werden. Das zu transformierende <strong>Modell</strong> wird<br />
als Input-<strong>Modell</strong> bei der Konfiguration angegeben. Es wird davon ausgegangen, dass für die<br />
Konfiguration benötigte Metamodelle und das Transformationsskript bereits vorliegen. Mehr<br />
wird nicht gebraucht. Die Transformation kann somit gestartet werden.<br />
Der Anforderung für die farbige Darstellung der <strong>Modell</strong>differenzen zwischen dem Ursprungsund<br />
dem Zielmodell wird nachgekommen, indem man das Eclipse-basierte EMF-<strong>Co</strong>mpare-<br />
Tool einsetzt. Das EMF-<strong>Co</strong>mpare-Tool in der Version 1.2.2, berücksichtigt beim Vergleich<br />
die Elemente und die Strukturen der <strong>Modell</strong>e. Die Ergebnisse des Vergleichs werden mithilfe<br />
von Bäumen dargestellt, in denen geänderte, hinzugefügte oder gelöschte <strong>Modell</strong>elemente<br />
visualisiert werden. Durch die Integration in das Eclipse kann das EMF-<strong>Co</strong>mpare-Tool beim<br />
Vergleich unterschiedlicher Versionen eines <strong>Modell</strong>s verwendet werden, wobei der Vergleich<br />
grafisch dargestellter <strong>Modell</strong>e ab der Version 1.3 unterstützt werden soll. Auf der Herstellerseite<br />
ist die neue Version für Ende Juni 2012 angekündigt. 4<br />
Die letzte wichtige Anforderung betrifft die Validierung der <strong>Modell</strong>e innerhalb der TOP-<br />
CASED-Umgebung. Im TOPCASED ist neben der Prüfung, ob <strong>Modell</strong>e zu der UML2 Spezifikation<br />
konform sind, eine Definition der eigenen OCL-Regeln ermöglicht. Hierfür kann<br />
ein im Rahmen des TOPCASED angebotenes OCL-Tooling verwendet werden. Es können<br />
spezielle Bedingungen in Form der OCL-<strong>Co</strong>nstraints definiert werden, welche die Konformität<br />
eines UWE-<strong>Modell</strong>s zu seinem Metamodell prüfen. Somit ist die dritte Anforderung<br />
ebenfalls erfüllt.<br />
5.5.1. Das mediniQVT-Tool<br />
Das mediniQVT der ikv++ technologies AG ein Eclipse-basiertes Tool zur <strong>Modell</strong>transformation<br />
mit der relationalen QVT-Sprache. Das mediniQVT kann sowohl als Eclipse-Plugin<br />
in eine bestehende Eclipse-basierte Toolumgebung integriert werden, als auch schlanke<br />
und vollständige Eclipse Rich Client Platform genutzt werden. Das mediniQVT ist ein freies<br />
Produkt, das die von OMG spezifizierte relationale QVT-Sprache sehr konsequent unterstützt.[19]<br />
Alle in dieser Arbeit vorgestellte Transformationen sind mit dem OpenSource-Werkzeug me-<br />
4 http://wiki.eclipse.org/EMF_<strong>Co</strong>mpare<br />
78
5.5. Die zusammengesetzte Toolumgebung<br />
diniQVT getestet worden. Vor der Ausführung der Transformation sollen die Metamodelle<br />
in der QVT-Umgebung deklariert werden. Diese Einstellung erfolgt über das Menü ” Preferences“.<br />
Den UWE-<strong>Modell</strong>en liegt die Eclipse UML 2 zugrunde. So soll diese in der QVT-<br />
Umgebung als ” http://www.eclipse.org/uml2/3.0.0/UML“ mit angegeben werden. In der<br />
Transformationskonfiguration soll neben dem Transformationsskript, dem Quell- und dem<br />
Zielmodell das UWE-Profil mit angegeben werden. (Siehe Abb. 5.3) Als Richtung der Transformationsausführung<br />
soll das Ziel gewählt werden. Somit kann auf die Stereotypen in den<br />
Abbildung 5.3.: Die Konfiguration der Transformation in der mediniQVT-Umgebung.<br />
Relationen von Transformation zugegriffen werden.<br />
Innerhalb der zusammengesetzten Tool-Umgebung können sich die Quell- und die Zielmodelle<br />
sogar in den Unterschiedlichen Projekten befinden. Es muss keine export/import<br />
Aktion durchgeführt werden.<br />
Das mediniQVT-Problem bei der Anwendung von Stereotypen im Zielmodell<br />
Unter Einsatz des mediniQVT-Werkzeugs lassen sich momentan die Stereotypen auf die<br />
Zielklassen nicht anwenden. Dies liegt daran, dass die Methoden unter einer where- oder<br />
einer when-Klauseln ausschließlich boolean-Werte als Rückgabewerte liefern dürfen. Die<br />
Anwendung eines Stereotyps liefert einen void-Wert als Rückgabewert. Die Anwendung des<br />
Stereotyps kann nur innerhalb der where- und when-Klauseln erfolgen. Somit liefert die<br />
oben angepasste Transformation ein UML-Klassenmodell, auf dem kein UWE-Profil angewendet<br />
ist.<br />
79
5. Integration des UWE-Profil-basierten transformativen Ansatzes in die UWE Toolumgebung<br />
In den Foren der mediniQVT-Webseite steht, dass an einer Implementierungslösung gearbeitet<br />
wird, welche die Methoden mit void-Rückgabewerten zulassen würde. 5<br />
Ein anderer Lösungsansatz dieses Problems ist die Angabe eines UML-Profils unter den<br />
Metamodellen in der QVT-Umgebung. Hierfür soll das UML-Profil als statisches Profil in<br />
Eclipse UML2 definiert werden. Als Resultat können Profilelemente in einer Domäne direkt<br />
erzwungen und angewendet werden.<br />
1 enforce domain t e x t S t e r e o t y p e : u w e p r o f i l e : : Text{<br />
2 b a s e c l a s s = someClass<br />
3 }<br />
Listing 5.8: Das Erzwingen eines UML-Profil-Elements in einer Relationsdomäne.<br />
Eine Recherche ergab, dass die Anwendung eines Profils auf das Zielmodell einer Transformation<br />
problemlos unter Einsatz der operationalen QVT-Sprache funktioniert. Ausführliche<br />
Beispiele von Sigfried Nolte sind in dem Tutorium: ” <strong>Modell</strong>getriebene Anwendungsentwicklung<br />
Jahrestagung der Gesellschaft für Informatik 2010“ vorgestellt worden. 6 Die dritte<br />
Lösung für das oben geschilderte Problem würde die Definition der Transformation in der<br />
operationalen QVT-Sprache liefern.<br />
5.5.2. Das EMF-<strong>Co</strong>mpare<br />
Das EMF-<strong>Co</strong>mpare ist ein Teil des EMF, das einen metamodellunabhängigen <strong>Modell</strong>vergleich<br />
ermöglicht. Dies wird unter der Verwendung eines generischen Vergleichsalgorithmus<br />
erreicht, das von Cédric Brun and Alfonso Pierantonio entwickelt ist[4].<br />
Als Ergebnis eines Vergleichs zweier <strong>Modell</strong>e erzeugt das EMF <strong>Co</strong>mpare ein Übereinstimmungsund<br />
ein Differenzmodell. Ein rekursiver Vergleich entlang der hierarchischen Struktur eines<br />
<strong>Modell</strong>s wird durchgeführt, um ein Übereinstimmungsmodell mit dem anderen <strong>Modell</strong> erstellen<br />
zu können. Auf jeder Hierarchieebene werden ähnliche Elemente identifiziert. Im<br />
Übereinstimmungsmodell wird jedes Element aus dem ersten <strong>Modell</strong> dem ähnlichsten Element<br />
des zweiten <strong>Modell</strong>s zugeordnet. Die Ähnlichkeit der <strong>Modell</strong>elemente wird anhand von<br />
vier Metriken gemessen:<br />
• <strong>Modell</strong>elementnamen (engl. name similarity)<br />
• Referenzenvergleich(engl. relations similarity)<br />
• Attributenvergleich (engl. value similarity)<br />
• Metamodellelementenvergleich(engl. type similarity)<br />
Alle Metriken werden gewichtet und zu einer Gesamtmetrik zusammengerechnet. Zwei Elemente<br />
sind ähnlich, im Fall wenn ihre Namen identisch sind oder die Gesamtmetrik über<br />
einem bestimmten Schwellwert liegt. Dieser Algorithmus zeichnet sich durch die hohe Korrektheit<br />
und die Effizienz aus. Aus dem Übereinstimmungsmodell wird ein Differenzmodell<br />
5 http://projects.ikv.de/qvt/discussion/<br />
6 http://www.siegfried-nolte.de/GI2010/GI2010.html<br />
80
5.5. Die zusammengesetzte Toolumgebung<br />
Abbildung 5.4.: Der Vergleich zweier UWE-<strong>Modell</strong>e. Die Differenzen der zwei <strong>Modell</strong>e.<br />
abgeleitet. Das Differenzmodell enthält alle additiven, subtraktiven Änderungen und die Updates<br />
an den <strong>Modell</strong>elementen. Das Übereinstimmungs- und das Differenzmodell sind zur<br />
automatisierten Weiterverarbeitung gut geeignet, da sie selbst EMF-<strong>Modell</strong>e sind.<br />
Die GUI des EMF-<strong>Co</strong>mpare Tools besteht aus zwei Ansichten: der Ansicht der strukturellen<br />
<strong>Modell</strong>differenzen und der Visualisierung dieser Differenzen. Die Abbildung 5.4 zeigt die<br />
strukturelle Differenz zwischen einem UWE-<strong>Modell</strong> mit angewendetem UWE-Profil und dem<br />
mithilfe der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>-Transformation generiertem UWE-<strong>Modell</strong>. Für die Page<br />
sind folgende Differenzen zu sehen: im Vergleich zu dem Zielmodell ist im Quellmodell bei<br />
der Klasse Homepage das Stereotype angewendet. Bei dem Zielmodell wurden<br />
im Laufe der Transformation die neuen Attribute collapse und dragdrop hinzugefügt. Die<br />
Visualisierung der strukturellen Ansicht zeigt die <strong>Modell</strong>e nebeneinander. Die Differenzen<br />
werden farblich gekennzeichnet. (Abb. 5.4)<br />
81
5. Integration des UWE-Profil-basierten transformativen Ansatzes in die UWE Toolumgebung<br />
Der Algorithmus wird absichtlich generisch gehalten. Es besteht die Möglichkeit an diesem<br />
Algorithmus eigene Anpassungen durchzuführen. Dafür stehen APIs zur Verfügung.<br />
82
5.6. Beispiel der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> für UWE-<strong>Modell</strong>e mit angewendetem UWE-Profil<br />
5.6. Beispiel der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> für UWE-<strong>Modell</strong>e mit<br />
angewendetem UWE-Profil<br />
In diesem Abschnitt wird ein Beispiel der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> an einem UWE-<strong>Modell</strong> mit<br />
dem angewendeten UWE-Stereotyp vorgestellt. Hierfür wird das Präsentationsmodell der<br />
einfachen Webseite (engl. Simple Website) von der UWE-Seite verwendet. 7 . In der Abbildung<br />
5.5 ist das Präsenationsmodell der einfachen Webseite zu sehen. In der TOPCASED-<br />
Abbildung 5.5.: Das Präsentationsmodell der einfachen Webseite in der Version 1.7 des<br />
UWE-Profils.<br />
<strong>Modell</strong>ierungsumgebung werden <strong>Modell</strong>e durch eine spezielle textuelle und eine grafische<br />
Komponente dargestellt, wobei diese in zwei getrennten Dateien gespeichert werden. Diese<br />
sind die *.uml-Datei und der *.umldi-Datei. In der Transformationskonfiguration wird<br />
das SimpleWebSite.uml-Datei als Quelldatei angegeben. Als Zielmodell wird wiederum eine<br />
*.uml-Datei generiert.<br />
Die Klassen, auf die Stereotyp angewendet ist, werden kopiert. In dem Zielmodell<br />
wird auf diese Kopien das Stereotyp angewendet. Dies Betrifft<br />
die Klassen ” ProjectHomepage“, ” Acknowledgement“ und ” Article“. Der Presentation-<br />
Group wurden in der neuen Version die Attribute collapse und dragdrop hinzugefügt. Somit<br />
werden diese Attribute in den oben genannten Klassen im Zeilmodell definiert.<br />
Die Klasse ” SectionRequirements“ wird im Zielmodell mit dem Stereotype<br />
markiert. Dies wird aus der Anwendung des -Stereotyps<br />
7 http://uwe.pst.ifi.lmu.de/examples.html<br />
83
5. Integration des UWE-Profil-basierten transformativen Ansatzes in die UWE Toolumgebung<br />
im Quellmodell abgeleitet. Die Attribute collapse und dragdrop werden der ” SectionRequirements“<br />
neu hinzugefügt.<br />
Abbildung 5.6.: Der Vergleich der Versionen 1.7 und 1.8 der SimpleWebSite.<br />
Alle <strong>Modell</strong>elemente, die mit im Quellmodell markiert sind, werden<br />
in dem Zielmodell mit markiert. Da IteratedPresentationGroup<br />
eine Subklasse der PresentationGroup ist, werden bei den betroffenen Klassen<br />
entsprechend die neuen collapse- und dragdrop-Attribute definiert. In diesen Klassen werden<br />
die anchors-Attribute der Quellklasse als PresentationProperties definiert. In dem <strong>Modell</strong><br />
der einfachen Webseite sind drei Anchored<strong>Co</strong>llection-Elemente vorhanden: ” ArticleIndex“,<br />
” SectionMenu“ und ” ExternalAnchor“.<br />
Alle Klassen, auf die ein -Stereotyp angewendet ist, werden mit denselben Stereotyp<br />
in dem Zielmodell markiert. Einzige Anpassung, die im Rahmen der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />
an diesen Elementen stattfindet ist die Hinzunahme der Attribute periodicRefresh und li-<br />
84
5.6. Beispiel der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> für UWE-<strong>Modell</strong>e mit angewendetem UWE-Profil<br />
veReport.<br />
Sehr ähnlich werden die Klassen mit dem angewendeten Stereotyp behandelt.<br />
Diese Klassen werden im Zielmodell mit demselben Stereotyp markiert und um einen neuen<br />
Attribut liveReport erweitert.<br />
In der Abbildung 5.6 ist der Vergleich des <strong>Modell</strong>s der einfachen Webseite in der Version<br />
1.7 und der Version 1.8 unter dem Einsatz des EMF-<strong>Co</strong>mpare-Tools dargestellt. Für die<br />
Erkennung der Profil-Differenzen muss das EMF-<strong>Co</strong>mpare-Vergleichsalgorithmus erweitert<br />
werden.<br />
Das Tool EMF-<strong>Co</strong>mpare stellt alle strukturellen Differenzen, wie die neu hinzugefügte Klassen<br />
oder Attibute sehr übersichtlich dar. Diese Differenzen sind in der strukturellen Ansicht<br />
in Form einer Liste beschrieben. Die Vizualisierung der Differenzen veraunschaulicht diese<br />
sehr gut. Beide <strong>Modell</strong>e sind in ihren textuellen baumartigen Struktur nebeneinander dargestellt,<br />
wobei die <strong>Modell</strong>elemente, die sich unterscheiden, farblich hervorgehoben werden.<br />
Abbildung 5.7.: Das Präsentationsmodell der einfachen Webseite in der Version 1.8 des<br />
UWE-Profils.<br />
In der Abbildung 5.7 ist die grafische Repräsentation des generierten <strong>Modell</strong>s dargestellt.<br />
Dieses Diagramm wurde manuell erstellt, da leider noch kein angemessener automatisierter<br />
Ansatz zur Generierung der grafischen Komponente zur Verfügung steht. Auf der nächsten<br />
Seite in der Abb. 5.8 werden die beiden Versionen des <strong>Modell</strong>s der einfachen Webseite in<br />
vollem Umfang nebeneinander in der Topcased-UML-Ansicht dargestellt.<br />
85
5. Integration des UWE-Profil-basierten transformativen Ansatzes in die UWE Toolumgebung<br />
Abbildung 5.8.: Die Präsentationsmodelle der einfachen Webseite in der Version 1.7 un der<br />
Version 1.8.<br />
86
6. Die Zusammenfassung und der Ausblick<br />
6.1. Die Zusammenfassung<br />
Das UWE-Metamodell erfährt einige Änderungen an bestimmten Teilmodellen bzw. an allen<br />
Teilmodellen mehrmals im Jahr. An dem UWE-Metamodell wird aktiv gearbeitet, so dass<br />
ständig neue RIA-Features, Design Pattern, Verbesserungen in Form der ” best practices“-<br />
Lösungen dem Metamodell hinzugefügt werden. Dieser <strong>Evolution</strong>sprozess bringt einen hohen<br />
Bedarf an einer Anpassung der existierenden <strong>Modell</strong>e auf jeweils neue UWE-Metamodell-<br />
Version, solcher wie die Beispielsmodelle, die auf der UWE-Webseite 1 zu finden sind. Diese<br />
Anpassung soll am besten automatisiert durchgeführt werden.<br />
Laut den neuesten Erkenntnisse auf dem Gebiet der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>, ist diese auf der<br />
Basis der Metamodelländerungen durchzuführen. Diese Arbeit beschreibt genau vor wie die<br />
<strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>sstrategie aus den Metamodelländerungen abzuleiten ist. Eine illustrative<br />
Transformation wurde definiert, um die metamodellbasierte <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> der<br />
UWE-Präsentationsmodelle zu veranschaulichen.<br />
Da die UWE-Methodologie eine leichtgewichtige Erweiterung der UML mithilfe eines UWE-<br />
Profils vorschlägt, wurde die Strategie entwickelt, welche die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> der <strong>Modell</strong>e<br />
mit dem angewendeten UWE-Profil ermöglicht. Dies wurde durch die Tatsache gewährt,<br />
dass die UWE-Metamodellspezifikation die Mappings zwischen dem Metamodel und dem<br />
Profil konkret spezifiziert. Anhand dieser Mappings wurde aus der metamodellbasierten<br />
Transformation durch geringfügige Anpassungen eine UWE-Profil-basierte Transformation<br />
abgeleitet.<br />
Die in dieser Arbeit geschaffene Basis für die Integration des transformativen Ansatzes im<br />
Rahmen der UWE-Methodologie erlaubt die weitgehende Automatisierung des <strong>Modell</strong>-<strong>Co</strong>-<br />
<strong>Evolution</strong>s-Prozesses und bietet somit eine wohlgeformte, einheitliche und konsistenzerhaltende<br />
Lösung.<br />
Für die Integration des transformativen Ansatzes in die UWE-Methodologie wurde eine Auswahl<br />
von Werkzeugen ausgesucht, welche die automatisierte <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> ermöglichen.<br />
Das <strong>Modell</strong>ierungswerkzeug TOPCASED mit einem UWEclipse-Plug-in wurde als<br />
Grundlage für die Toolumgebung in dieser Arbeit verwendet. In UWEclipse sind Funktionalitäten<br />
enthalten, welche die UWE-basierte <strong>Modell</strong>ierung von RIAs ermöglichen. Weitere<br />
Tools wurden ausgewählt und getestet, um den <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>sprozess zu unterstützen.<br />
Das TOPCASED mit UWEClipse Plug-in wurde mit weiteren benötigten Werkezeugen<br />
erweitert: dem mediniQVT-Tool für die Durchführung der Transformationen in der<br />
1 http://uwe.pst.ifi.lmu.de<br />
87
6. Die Zusammenfassung und der Ausblick<br />
relationalen QVT-Sprache und dem EMF-<strong>Co</strong>mpare-Tool für die Repräsentation der <strong>Modell</strong>differenzen.<br />
Für die Validierung der <strong>Modell</strong>e werden interne TOPCASED-Tools eingesetzt.<br />
Somit ist die <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> für UWE-<strong>Modell</strong>e als toolbasierter MDA-Entwicklungsprozess<br />
erarbeitet worden. Alle erforderlichen Konzepte, welche diesen Prozess unterstützen,<br />
sind durch die OMG spezifiziert und standardisiert. Die Zusammensetzung der ausgewählten<br />
Tools erfüllt alle an diese Integration im Rahmen dieser Arbeit gestellten Anforderungen.<br />
Die Transformationen in der relationalen QVT-Sprache, welche automatisierte UWE-<strong>Modell</strong>-<br />
<strong>Co</strong>-<strong>Evolution</strong> ermöglichen, sind erarbeitet und mit dem Werkzeug mediniQVT getestet worden.<br />
Das mediniQVT-Tool verfügt über keine grafische <strong>Modell</strong>ierungskomponente. Das Tool<br />
lässt sich in anderen Eclipse-basierten <strong>Modell</strong>ierungstools wie TOPCASED integrieren. Im<br />
Rahmen dieser Arbeit wurde eine solche Integration durchgeführt und eine Basis für die<br />
<strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> an den mit UWE-Profil erweiterten TOPCASED-UML-<strong>Modell</strong>en geschaffen.<br />
Die <strong>Modell</strong>e und Metamodelle, die zu einer Transformation herangezogen werden, müssen für<br />
die Transformation in einer serialiesierten textbasierten Form vorliegen. Dies ist im TOPCA-<br />
SED dadurch gegeben, dass ein UML-<strong>Modell</strong> aus einer textbasierten und einer graphischen<br />
Konponenten besteht, welche in getrennten Dateien gespeichert sind. Die <strong>Modell</strong>e müssen<br />
nicht exportiert werden, um für die Transformation in das mediniQVT-Tool importiert zu<br />
werden. Das Tool ist als ein Teil der <strong>Modell</strong>ierungsumgebung integriert. Diese Tatsache<br />
bringt einen großen Vorteil mit sich: die graphische Repräsentation der exisierenden <strong>Modell</strong>e<br />
geht nicht verloren.<br />
Die Zusammensetzung der graphischen <strong>Modell</strong>ierung und der textbasierten Transformation<br />
hat ihre Nachteile: das generierte Zielmodell ist nur in textueller Form vorhanden. Dies<br />
ist eine im Rahmen der MDA sehr verbreitete Problematik. Die graphische Komponente<br />
kann aus dem Quellmodell nicht abgeleitet werden und muss somit manuell erstellt werden.<br />
Im TOPCASED lässt sich ein Diagramm aus einem textbasierten <strong>Modell</strong> mit wenigen Klicks<br />
erstellen. Dieses Diagramm wird als leeres Diagramm erstellt. Alle Elemente können per<br />
drag&drop in das Diagramm aus dem textuell repräsentierten Teil des <strong>Modell</strong>s übertragen<br />
werden. Leider muss man sich mit dieser Möglichkeit zufrieden geben. Die UWE-<strong>Modell</strong>e<br />
sind gemäß dem Prinzip des ” Separation of <strong>Co</strong>ncerns “ in Teilmodelle unterteilt, die keine<br />
allzugroße Anzahl von Elementen aufweisen und ziemlich überschaubar sind. Somit ist<br />
der Zeitaufwand für den Wiederaufbau der graphischen Repräsentation im Fall der UWE-<br />
<strong>Modell</strong>e relativ gering.<br />
6.2. Der Ausblick<br />
Die Transformationen wurden mit dem Open Source-Werkzeug mediniQVT entwickelt und<br />
ausgeführt. Im Rahmen dieser Arbeit wurde festgestellt, dass sich dieses Werkzeug wunderbar<br />
für die <strong>Modell</strong>transformationen eignet. Bei der Transformation der <strong>Modell</strong>e mit einer<br />
UML-Profil-Anwendung, kann auf die angewendeten Stereotypen zugegriffen und anhand<br />
88
6.2. Der Ausblick<br />
diesen Stereotypen die Transfromation gesteuert werden. Es tritt ein Problem bei der Generierung<br />
eines <strong>Modell</strong>s auf, auf dem eine Profil-Anwendung erforderlich ist. Das Ziel-Profil<br />
kann auf das Zielmodell in der vorliegenden Implementierung des mediniQVT-Tools nicht<br />
angewendet werden. Leider eignet sich die relationale QVT-Sprache in der mediniQVT Implementierung<br />
nicht für die UWE-<strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong>. Es hat sich ergeben, dass die Anwendung<br />
des UWE-Profils und der UWE-Stereotypen an den Elementen des generierten <strong>Modell</strong>s<br />
mit mediniQVT nicht umsetzbar ist. Aufgrund der Tatsache, dass das mediniQVT die Spezifikation<br />
der relationalen QVT-Sprache von OMG zur Zeit am vollständigsten abbildet,<br />
dürfte der Einsatz der operationalen QVT-Sprache in diesem Fall eine bessere Alternative<br />
darstellen.<br />
Ein weiteres Tool, namens EMF-<strong>Co</strong>mpare dient zur Unterstützung der <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />
und wird für die Darstellung von <strong>Modell</strong>differenzen zwischen dem Quellmodell und dem<br />
generierten Zielmodell eingesetzt. Dieses Tool erlaubt den Vergleich der UML-<strong>Modell</strong>e mit<br />
dem angewendeten UML-Profil unter Einsatz eines generischen Vergleichsalgorithmus.<br />
Dieser Algorithmus bedarf einiger Verbesserungen. Im Falle eines Vergleichs der <strong>Modell</strong>e<br />
mit angewendeten Stereotypen werden leider die Stereotypen, welche sich in der neuen<br />
Version nicht geändert haben, trotzem als neuhinzugefügte Stereotypen erkannt. Das EMF-<br />
<strong>Co</strong>mpare bietet eine Erweiterungsmöglichkeit zur Verwendung eigener Vergleichsalgorithmen<br />
an. Dafür stellt EMF-<strong>Co</strong>mpare umfangreiche Schnittstellen zur Implementierung eigener<br />
Vergleichsalgorithmen zur Verfügung. Also wäre es möglich, den Vergleichsalgorithmus<br />
so anzupassen, dass die gleichnahmigen Stereotypen als nicht verändert angezeigt werden.<br />
Die EMF-<strong>Co</strong>mpare-Implementierung in Java lässt sich in ein beliebiges <strong>Modell</strong>ierungstool<br />
integrieren, wie z.B. das MagicDraw.<br />
Für den Einsatz von der operationalen QVT spricht auch folgender Umstand. Ein QVT-Plugin<br />
für die Transformationen in der operationalen QVT-Sprache ist bereitgestellt worden, das<br />
in das MagicDraw integriert werden kann. 2 Dabei handelt es sich um eine Implementierung<br />
des ” Operational QVT“, die im Rahmen der M2M-Projektes von Eclipse 3 entstanden ist<br />
(Ein Teil des Eclipse Modeling Frameworks). Somit könnte die Durchführung der Transformationen<br />
in der operationalen QVT-Sprache innerhalb des Tools MagicUWE mit diesem<br />
Plug-in ermöglicht werden. Durch eine Integration der EMF-<strong>Co</strong>mpare-Implementierung zur<br />
Visualisierung der <strong>Modell</strong>differenzen könnte somit das MagicUWE-Tool um eine umfassende<br />
Erweiterung für die automatisierte <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> ergänzt werden.<br />
2 http://www.nomagic.com/products/magicdraw-addons/qvt-plugin.html<br />
3 http://www.eclipse.org/m2m/<br />
89
6. Die Zusammenfassung und der Ausblick<br />
90
A. Darstellung der Metamodelle<br />
Im Folgenden wird die Vorgehensweise der Erstellung der vereinfachten SimpleUWEold und<br />
SimpleUWEnew der MOF-Metamodelle erläutert. Die Voraussetzung für die Verwendung<br />
von Metamodellen im Rahmen einer QVT-Transformation ist, dass diese Metamodelle eine<br />
Serialisierung der Metamodelle im Eclipse-Ecore-Format unterstützen. Die Metamodelle<br />
werden mithilfe des <strong>Modell</strong>ierungstools ” Eclipse Galileo - Eclipse Modeling Tools“ [1] erstellt.<br />
Das <strong>Modell</strong>ierungspaket enthält eine Sammlung von Eclipse Modeling Project Komponenten<br />
1 , einschließlich EMF, GMF, MDT XSD/OCL/UML2, M2M, M2T, und EMFT Elemente.<br />
Zur Bearbeitung von Ecore-<strong>Modell</strong>en stellt das Eclipse Modeling Tool die ” Ecore Tools“ zur<br />
Verfügung, die einen graphischen Editor für die Erstellung der Ecore-<strong>Modell</strong>e bereitstellt.<br />
Abbildung A.1 zeigt SimpleUWEold-Metamodell in grafischen Ecore Editor von Eclipse.<br />
Abbildung A.1.: Grafischer Ecore Editor in Eclipse-Umgebung<br />
1 http://www.eclipse.org/downloads/packages/eclipse-modeling-tools-includes-incubating-components/<br />
galileor<br />
91
A. Darstellung der Metamodelle<br />
A.1. Erstellung von Metamodellen in Ecore-Format<br />
Bevor Metamodelle modelliert werden können, muss ein ” Ecore Tools Project“ erstellt werden:<br />
• File ->New ->Other ->Ecore Tools ->Ecore Tools Project<br />
Abbildung A.2.: Einen neuen ” Ecore Tools Project“ erstellen<br />
Ein Ecore Diagramm wird wie folgt erstellt:<br />
• File ->New ->Other ->Ecore Tools ->Ecore Diagram<br />
Abbildung A.3.: Eine neue Ecore Diagramm erstellen<br />
Nach der Erstellung erscheinen zwei Dateien: SimpleUWEold.ecore und SimpleUWEold.ecorediag.<br />
Die erste Datei enthält das erstellte <strong>Modell</strong> in Ecore Format. Die zweite Datei enthält die<br />
Diagramminformationen der grafischen Repräsentation des <strong>Modell</strong>s und kann in einem ” Ecore<br />
Diagramm Editor“ geöffnet und bearbeitet werden:<br />
• open with ->Ecore Diagram Editor<br />
Die Ecore Datei kann mit dem speziellen ” Sample Ecore Model Editor“ angezeigt und bearbeitet<br />
werden:<br />
92<br />
• open with -> ” Sample Ecore Model Editor“
A.1. Erstellung von Metamodellen in Ecore-Format<br />
Abbildung A.4.: Ecorediag - Datei mit dem ” Ecore Diagramm Editor“ öffnen<br />
Abbildung A.5.: Ecore - Datei mit ” Sample Ecore Model Editor“ öffnen<br />
Im ” Sample Ecore Model Editor“ können <strong>Modell</strong>e in spezieller textbasierter Form angezeigt<br />
und bearbeitet werden. Graphischer Editor bietet eine bessere Alternative hierzu. Bearbeitet<br />
man ein Model im graphischen ” Ecore Diagram Editor“, so werden alle Änderungen sofort<br />
in Ecore <strong>Modell</strong> übernommen. ” Sample Ecore Model Editor“ sieht folgendermaßen aus:<br />
Abbildung A.6.: Das erstellte <strong>Modell</strong> im ” Sample Ecore Model Editor“<br />
Der grafische Editor wurde bereits in der Abbildung A.1 veranschaulicht. Im Outline-Bereich<br />
auf der linken Seite ist das erstellte <strong>Modell</strong> in Ecore-Repräsentation, siehe in der Abbildung<br />
A.6, dargestellt. Auf folgenden zwei Seiten sind die Ecore-Darstellungen der SimpleUWEnew<br />
und der SimpleUWEold Metamodelle dargeboten.<br />
93
A. Darstellung der Metamodelle<br />
94<br />
Abbildung A.7.: UWE-Präsentations-Metamodell. Version 1.7 in der Ecore Darstellung
A.1. Erstellung von Metamodellen in Ecore-Format<br />
Abbildung A.8.: UWE-Präsentations-Metamodell. Version 1.8 in der Ecore Darstellung<br />
95
A. Darstellung der Metamodelle<br />
A.2. Ein Generator-<strong>Modell</strong> aus Ecore-<strong>Modell</strong>en erstellen<br />
Die Metamodelle werden in Form von Eclipse-Plug-ins, die in die Entwicklungsumgebung<br />
mit eingebunden werden können, gebraucht. Dies ermöglicht die Erstellung <strong>Modell</strong>e in entsprechender<br />
Form basierend auf diesen Metamodellen. Das Werkzeug ” Eclipse Modeling Framework“[2]<br />
ermöglicht die Erstellung der Metamodelle als Eclipse-Plug-ins aus den Ecore-<br />
Metamodellen. Zuerst soll das EMF-<strong>Modell</strong>, die auf dem Ecore-<strong>Modell</strong> basiert, erstellt werden.<br />
Diese EMF-<strong>Modell</strong> soll vom Typ ” EMF Generator Model“ sein:<br />
• File ->Other ->Eclipse Modeling Framework ->EMF Generator Model<br />
Abbildung A.9.: Ein Generator <strong>Modell</strong> aus einem Ecore-<strong>Modell</strong> erstellen<br />
Das Generator-Model soll SimpleUWEold.genmodel bzw. SimpleUWEnew.genmodel heißen:<br />
Abbildung A.10.: Namen für das Generator-<strong>Modell</strong> wählen<br />
Als ” Model Importeur“ soll SimpleUWEold.ecore bzw. SimpleUWEnew.ecore gewählt werden:<br />
Als nächstes soll das Ecore-<strong>Modell</strong> geladen werden. Hierfür soll man den Button Load<br />
96
A.2. Ein Generator-<strong>Modell</strong> aus Ecore-<strong>Modell</strong>en erstellen<br />
Abbildung A.11.: Als ” Model Importer“ das Ecore-<strong>Modell</strong> wählen<br />
betätigen. Ist das Ecore-<strong>Modell</strong> korrekt, so wird es ohne weitere Meldungen geladen und<br />
” Next“-Button wird aktiviert. Ansonsten erscheint eine Fehlermeldung, dass das Ecore-<br />
<strong>Modell</strong> korrigiert werden soll. Die Erstellung von Generator-<strong>Modell</strong> muss nach der Korrektur<br />
des Ecore-<strong>Modell</strong>s von vorne angestoßen werden. Wir gehen davon aus, dass das Ecore-<strong>Modell</strong><br />
korrekt war und Next“-Button betätigt wurde. Als letzter Schritt kann man referenzierte<br />
”<br />
Genmodelle hinzufügen, was in unserem Fall entfällt, und den Button Finish“ betätigen.<br />
”<br />
97
A. Darstellung der Metamodelle<br />
A.3. Erstellung der Metamodelle in Form von Eclipse-Plug-ins<br />
Das Generator-<strong>Modell</strong> SimpleUWEold.genmodel bzw. SimpleUWEnew.genmodel ist jetzt<br />
die Quelle für den EMF-Generator. Das Generator-<strong>Modell</strong> kann man in EMF Generator<br />
öffnen:<br />
• Open with ->EMF Generator<br />
Abbildung A.12.: Generator <strong>Modell</strong> mit EMF Generator öffnen<br />
Letztendlich mit der Auswahl der folgenden Menü-Option ” Generate“ -> ” Generate all“ werden<br />
für das SimpleUWEold-Metamodell bzw. SimpleUWEnew-Metamodell die Eclipse-Plugin-Projekte<br />
erstellt:<br />
• Generate ->Generate all<br />
Abbildung A.13.: Eclipse Plug-in-Projekte erstellen<br />
In unserem Fall heißen die generierten Plug-in-Projekte SimpleUWEold, SimpleUWEold.edit,<br />
SimpleUWEold.editor, SimpleUWEold.test bzw. SimpleUWEnew, SimpleUWEnew.edit, SimpleUWEnew.editor,<br />
SimpleUWEnew.test:<br />
98<br />
Abbildung A.14.: Eclipse Plug-in-Projekte
A.4. Das Deployment der Metamodell-Eclipse-Plug-ins<br />
A.4. Das Deployment der Metamodell-Eclipse-Plug-ins<br />
Die Projekte, die deployable sind, sollen ausgewählt und nach der Angabe eines Speicherortes<br />
als JAR-Dateien dort gespeichert werden.<br />
• File ->Export<br />
Abbildung A.15.: Das Export der Metamodell-Eclipse-Plug-ins<br />
Im nächsten Schritt soll der Speicherort für die zu generierenden Plug-ins angegeben werden:<br />
Abbildung A.16.: Speicherortangabe beim Export der Metamodell-Eclipse-Plug-ins<br />
99
A. Darstellung der Metamodelle<br />
Unter dem angegebenen Speicherort befinden sich nach dem Betätigen des ” Finish“-Buttons<br />
die generierten JAR-Dateien. Das Deployment von den generierten Metamodell-Eclipse-<br />
Plug-ins erfolgt dadurch, dass die generierten Jar-Dateien in das Plug-ins-Verzeichnis der<br />
aktuellen Eclipse-Plattform hineinkopiert werden. Nach dem Neustart von Eclipse, kann<br />
Abbildung A.17.: Das Deployment der Plug-ins<br />
man <strong>Modell</strong>e, denen die SimpleUWEold und die SimpleUWEnew Metamodelle zugrunde<br />
liegen, in einem speziellen Editor in ihrer flachen, textuell repräsentierten Struktur erstellen.<br />
Im Weiteren wird die Erstellung dieser <strong>Modell</strong>e beschrieben<br />
Abbildung A.18.: Ein Beispiel eines SimpleWebSite-<strong>Modell</strong>s, dem SimpleUWEold-<br />
Metamodell zugrunde liegt<br />
100
A.5. <strong>Modell</strong>e basierend auf Metamodellen erstellen<br />
A.5. <strong>Modell</strong>e basierend auf Metamodellen erstellen<br />
Nachdem die Metamodell-Plug-ins in die Eclipse-Umgebung eingebunden sind und die Eclipse-<br />
Umgebung neu gestartet wurde, können Instanzen der Metamodelle erstellt werden. Um ein<br />
Model, das zu SimpleUWEold-Präsentationsmodell konform ist, zu erstellen, soll man folgendes<br />
ausführen:<br />
• New ->Other ->Example EMF Model Creation Wizard ->SimpleUWEold Model<br />
Abbildung A.19.: Ein SimpleUWEold <strong>Modell</strong> erstellen<br />
Metamodell-Plug-ins beinhalten unter anderem einen speziellen Model Editor, mit dessen<br />
Hilfe die <strong>Modell</strong>e in ihrer flacher, textuell repräsentierter Struktur, modelliert werden können.<br />
Dieser Editor verfügt über das Menü ” SimpleUWEold Editor“, dass oben an der Menüleiste<br />
des Eclipse angezeigt wird. Man kann mit ” New Sibling“ neue Elemente dem SimpleUWE-<br />
Abbildung A.20.: SimpleUWEold <strong>Modell</strong> Editor Menü<br />
101
A. Darstellung der Metamodelle<br />
<strong>Modell</strong> hinzufügen. Die Liste der möglichen Elemente, siehe Bild A.20, wird angezeigt, wenn<br />
man mit der Maus über den Menüeintrag ” New Sibling“ fährt. Attribute, in unserem Fall<br />
PresentationProperties, werden mit ” New Child“ angelegt. ” Properties View“ ermöglicht die<br />
Modifikation der Detail-Informationen jedes Elements. Um die ” Properties View“ in Eclipse<br />
anzeigen zu lassen, wählt man den ” Show Properties View“-Menüeintrag des SimpleUWE-<br />
<strong>Modell</strong>-Editors-Menü. Mit ” Refresh“ wird das <strong>Modell</strong> aktualisiert. Außerdem gibt es eine<br />
Möglichkeit die Konformität des <strong>Modell</strong>s gegenüber dem Metamodell mit ” Validate“ überprüfen<br />
zu lassen. Alternativ lassen sich die neuen Elemente und PresentationProperties direkt<br />
Abbildung A.21.: SimpleUWEold <strong>Modell</strong> Editor - Kontext-Menü<br />
im <strong>Modell</strong> über ein Kontext-Menü anlegen. In dem <strong>Modell</strong> in der Abbildung A.21 ist das<br />
Element Page ProjectHome ausgewählt. Mit dem Kontext-Menü über ” New Child“ -> ” PresentationProperty“<br />
kann dem Page ProjectHome neue PresentationProperty hinzugefügt<br />
werden.<br />
102<br />
Abbildung A.22.: SimpleUWEold <strong>Modell</strong> Editor Überblick
1<br />
B. Transformationsskript mapUWEversion<br />
2 transformation mapUWEversion ( s r c : SimpleUWEold , t r g : SimpleUWEnew )<br />
3 {<br />
4<br />
5 −− E r s t e l l t das PresentationPackage im Z i e l m o d e l l −−<br />
6 −− mit dem Namen aus Quellmodell −−<br />
7 top relation mapPackage<br />
8 {<br />
9 pckgName : String ;<br />
10 checkonly domain s r c srcPckg : SimpleUWEold : : Package<br />
11 {<br />
12 name = pckgName<br />
13 } ;<br />
14 enforce domain t r g tgtPckg : SimpleUWEnew : : Package<br />
15 {<br />
16 name = pckgName<br />
17 } ;<br />
18 −− Hier e i n e Bedingung : der Name s o l l P r e s e n t a t i o n s e i n −−<br />
19 where<br />
20 {<br />
21 name = ’Presentation’ ;<br />
22 }<br />
23 }<br />
24 −− Relation mapPage mappt Page auf PresentationPage . −−<br />
25 −− P r e s e n t a t i o n P r o p e r t i e s werden übernommen −−<br />
26 top relation mapPage<br />
27 {<br />
28 pageName : String ;<br />
29 checkonly domain s r c srcPg : SimpleUWEold : : Page<br />
30 {<br />
31 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />
32 name = pageName ,<br />
33 −− Es wird geprüft , ob page Stereotype −−<br />
34 −− b e i dem Page angewendet i s t −−<br />
35 kind = ’page’ ,<br />
36 ownedAttribute = presProp : SimpleUWEold : : PresentationProperty<br />
{}<br />
37 } ;<br />
38 enforce domain t r g trgPg : SimpleUWEnew : : PresentationPage<br />
39 {<br />
40 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />
41 name = pageName ,<br />
42 kind = ’presentationPage’ ,<br />
43 c o l l a p s e = f a l s e ,<br />
103
B. Transformationsskript mapUWEversion<br />
44 dragdrop = f a l s e ,<br />
45 ownedAttribute = presProp2 : SimpleUWEnew : : PresentationProperty<br />
{}<br />
46 } ;<br />
47 when<br />
48 {<br />
49 mapPackage ( srcPckg , tgtPckg ) ;<br />
50 }<br />
51 where<br />
52 {<br />
53 −− B e s i t z t e i n e Page e i n e PresentationProperty , −−<br />
54 −− so wird d i e R elation mapProperty a u f g e r u f e n −−<br />
55 mapProperty ( presProp , presProp2 ) ;<br />
56 }<br />
57 }<br />
58 −− Relation mapProperty wird j e d e s Mal in der where−Klausel −−<br />
59 −− der Elementen , d i e e i n e PresentationProperty b e s i t z e n können , −−<br />
60 −− a u f g e r u f e n sobald e i n e Property vorhanden i s t −−<br />
61 relation mapProperty<br />
62 {<br />
63 propName : String ;<br />
64 checkonly domain s r c pp : SimpleUWEold : : PresentationProperty<br />
65 {<br />
66 name = propName ,<br />
67 presentationElement = pe : SimpleUWEold : : PresentationElement {}<br />
68 } ;<br />
69 enforce domain t r g pp2 : SimpleUWEnew : : PresentationProperty<br />
70 {<br />
71 name = propName ,<br />
72 presentationElement = pe2 : SimpleUWEnew : : PresentationElement {}<br />
73 } ;<br />
74 when<br />
75 {<br />
76 −− Sobald e i n e P r e s e n t a t i o n Property einen P r e s e n t a t i o n −−<br />
77 −− Element b e s i t z t , s o l l entsprechende Relation a u f g e r u f e n −−<br />
78 −− werden −−<br />
79 mapText ( pe , pe2 ) or mapAnchor ( pe , pe2 ) or mapImage ( pe , pe2 ) or<br />
mapButton ( pe , pe2 ) or mapTextInput ( pe , pe2 ) or<br />
mapAnchored<strong>Co</strong>l ( pe , pe2 ) or mapForm( pe , pe2 ) or mapPresClass (<br />
pe , pe2 ) or mapPresGroup ( pe , pe2 ) ;<br />
80 }<br />
81 }<br />
82 −− Relation mapPresClass mappt P r e s e n t a t i o n C l a s s auf P r e s e n t a t i o n −−<br />
83 −− Group −−<br />
84 top relation mapPresClass<br />
85 {<br />
86 className : String ;<br />
87 checkonly domain s r c pc : SimpleUWEold : : P r e s e n t a t i o n C l a s s<br />
88 {<br />
89 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />
90 name = className ,<br />
91 −− Es wird geprüft , ob P r e s e n t a t i o n C l a s s Stereotype −−<br />
92 −− b e i dem P r e s e n t a t i o n C l a s s angewendet i s t −−<br />
104
93 kind = ’presentationClass’ ,<br />
94 ownedAttribute = pp : SimpleUWEold : : PresentationProperty {}<br />
95 } ;<br />
96 enforce domain t r g pg : SimpleUWEnew : : PresentationGroup<br />
97 {<br />
98 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />
99 name = className ,<br />
100 kind = ’presentationGroup’ ,<br />
101 c o l l a p s e = f a l s e ,<br />
102 dragdrop = f a l s e ,<br />
103 ownedAttribute = pp2 : SimpleUWEnew : : PresentationProperty {}<br />
104 } ;<br />
105 when<br />
106 {<br />
107 mapPackage ( srcPckg , tgtPckg ) ;<br />
108 not mapPage ( pc , pg ) ;<br />
109 not mapPresGroup ( pc , pg ) ;<br />
110 }<br />
111 where<br />
112 {<br />
113 −− B e s i t z t e i n P r e s e n t a t i o n Class e i n e P r e s e n t a t i o n Property ,<br />
−−<br />
114 −− so wird d i e Relation mapProperty a u f g e r u f e n −−<br />
115 mapProperty ( pp , pp2 ) ;<br />
116 }<br />
117 }<br />
118 −− Relation mapPresGroup mappt PresentationGroup auf P r e s e n t a t i o n −−<br />
119 −− Group −−<br />
120 top relation mapPresGroup<br />
121 {<br />
122 pageName : String ;<br />
123 checkonly domain s r c srcPg : SimpleUWEold : : PresentationGroup<br />
124 {<br />
125 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />
126 name = pageName ,<br />
127 kind = ’presentationGroup’ ,<br />
128 ownedAttribute = presProp : SimpleUWEold : : PresentationProperty<br />
{}<br />
129 } ;<br />
130 enforce domain t r g trgPg : SimpleUWEnew : : PresentationGroup<br />
131 {<br />
132 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />
133 name = pageName ,<br />
134 kind = ’presentationGroup’ ,<br />
135 c o l l a p s e = f a l s e ,<br />
136 dragdrop = f a l s e ,<br />
137 ownedAttribute = presProp2 : SimpleUWEnew : : PresentationProperty<br />
{}<br />
138 } ;<br />
139 when<br />
140 {<br />
141 mapPackage ( srcPckg , tgtPckg ) ;<br />
142 }<br />
105
B. Transformationsskript mapUWEversion<br />
143 where<br />
144 {<br />
145 −− B e s i t z t e i n P r e s e n t a t i o n Group e i n e P r e s e n t a t i o n −−<br />
146 −− Property , so wird d i e Relation mapProperty a u f g e r u f e n −−<br />
147 mapProperty ( presProp , presProp2 ) ;<br />
148 }<br />
149 }<br />
150 −− Relation mapText e r s t e l l t e i n e Kopie des Text−Elements −−<br />
151 −− im Z i e l m o d e l l −−<br />
152 top relation mapText<br />
153 {<br />
154 textName : String ;<br />
155 checkonly domain s r c te : SimpleUWEold : : Text<br />
156 {<br />
157 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />
158 name = textName ,<br />
159 kind = ’text’<br />
160 } ;<br />
161 enforce domain t r g te2 : SimpleUWEnew : : Text<br />
162 {<br />
163 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />
164 name = textName ,<br />
165 kind = ’text’ ,<br />
166 p e r i o d i c R e f r e s h = f a l s e ,<br />
167 l i v e R e p o r t = f a l s e<br />
168 } ;<br />
169 when<br />
170 {<br />
171 mapPackage ( srcPckg , tgtPckg ) ;<br />
172 }<br />
173 }<br />
174 −− Relation mapAnchor e r s t e l l t e i n e Kopie des Anchor−Elements −−<br />
175 −− im Z i e l m o d e l l −−<br />
176 top relation mapAnchor<br />
177 {<br />
178 anchorName : String ;<br />
179 checkonly domain s r c an : SimpleUWEold : : Anchor<br />
180 {<br />
181 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />
182 name = anchorName ,<br />
183 kind = ’anchor’<br />
184 } ;<br />
185 enforce domain t r g an2 : SimpleUWEnew : : Anchor<br />
186 {<br />
187 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />
188 name = anchorName ,<br />
189 kind = ’anchor’ ,<br />
190 l i v e R e p o r t = f a l s e<br />
191 } ;<br />
192 when<br />
193 {<br />
194 mapPackage ( srcPckg , tgtPckg ) ;<br />
195 }<br />
106
196 }<br />
197 −− Relation mapImage e r s t e l l t e i n e Kopie des Image−Elements −−<br />
198 −− im Z i e l m o d e l l −−<br />
199 top relation mapImage<br />
200 {<br />
201 imageName : String ;<br />
202 checkonly domain s r c im : SimpleUWEold : : Image<br />
203 {<br />
204 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />
205 name = imageName ,<br />
206 kind = ’image’<br />
207 } ;<br />
208 enforce domain t r g im2 : SimpleUWEnew : : Image<br />
209 {<br />
210 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />
211 name = imageName ,<br />
212 kind = ’image’ ,<br />
213 p e r i o d i c R e f r e s h = f a l s e ,<br />
214 l i v e R e p o r t = f a l s e<br />
215 } ;<br />
216 when<br />
217 {<br />
218 mapPackage ( srcPckg , tgtPckg ) ;<br />
219 }<br />
220 }<br />
221 −− Relation mapButton e r s t e l l t e i n e Kopie des Button−Elements −−<br />
222 −− im Z i e l m o d e l l −−<br />
223 top relation mapButton<br />
224 {<br />
225 buttonName : String ;<br />
226 checkonly domain s r c bu : SimpleUWEold : : Button<br />
227 {<br />
228 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />
229 name = buttonName ,<br />
230 kind = ’button’<br />
231 } ;<br />
232 enforce domain t r g bu2 : SimpleUWEnew : : Button<br />
233 {<br />
234 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />
235 name = buttonName ,<br />
236 kind = ’button’ ,<br />
237 l i v e R e p o r t = f a l s e<br />
238 } ;<br />
239 when<br />
240 {<br />
241 mapPackage ( srcPckg , tgtPckg ) ;<br />
242 }<br />
243 }<br />
244 −− Relation mapTextInput e r s t e l l t e i n e Kopie des TextInput−Elements<br />
−−<br />
245 −− im Z i e l m o d e l l−−<br />
246 top relation mapTextInput<br />
247 {<br />
107
B. Transformationsskript mapUWEversion<br />
248 tiName : String ;<br />
249 checkonly domain s r c t i : SimpleUWEold : : TextInput<br />
250 {<br />
251 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />
252 name = tiName ,<br />
253 kind = ’textInput’<br />
254 } ;<br />
255 enforce domain t r g t i 2 : SimpleUWEnew : : TextInput<br />
256 {<br />
257 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />
258 name = tiName ,<br />
259 kind = ’textInput’ ,<br />
260 l i v e R e p o r t = f a l s e ,<br />
261 auto<strong>Co</strong>mpletion = f a l s e ,<br />
262 l i v e V a l i d a t i o n = f a l s e<br />
263 } ;<br />
264 when<br />
265 {<br />
266 mapPackage ( srcPckg , tgtPckg ) ;<br />
267 }<br />
268 }<br />
269 −− Relation mapChoice mappt Element Choice −−<br />
270 −− auf das Element S e l e c t i o n im Z i e l m o d e l l −−<br />
271 top relation mapChoice<br />
272 {<br />
273 choiceName : String ;<br />
274 mult : Boolean ;<br />
275 checkonly domain s r c c h o i c e : SimpleUWEold : : Choice<br />
276 {<br />
277 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />
278 name = choiceName ,<br />
279 kind = ’choice’ ,<br />
280 m u l t i p l e = mult<br />
281 } ;<br />
282 enforce domain t r g s e l e c t i o n : SimpleUWEnew : : S e l e c t i o n<br />
283 {<br />
284 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />
285 name = choiceName ,<br />
286 kind = ’selection’ ,<br />
287 m u l t i p l e = mult ,<br />
288 l i v e R e p o r t = f a l s e ,<br />
289 auto<strong>Co</strong>mpletion = f a l s e ,<br />
290 l i v e V a l i d a t i o n = f a l s e<br />
291 } ;<br />
292 when<br />
293 {<br />
294 mapPackage ( srcPckg , tgtPckg ) ;<br />
295 }<br />
296 }<br />
297 −− Relation mapAnchored<strong>Co</strong>l mappt Element Anchored<strong>Co</strong>llection −−<br />
298 −− auf d i e Elemente IteratedPresentationGroup des Z i e l m o d e l l s −−<br />
299 −− und f ü g t a l l e Anchors des u r s p r ü n g l i c h e n Elements a l s −−<br />
300 −− P r e s e n t a t i o n P r o p e r t i e s hinzu −−<br />
108
301 top relation mapAnchored<strong>Co</strong>l<br />
302 {<br />
303 acName : String ;<br />
304 anchorName : String ;<br />
305 checkonly domain s r c ac : SimpleUWEold : : Anchored<strong>Co</strong>llection<br />
306 {<br />
307 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />
308 name = acName ,<br />
309 kind = ’anchored<strong>Co</strong>llection’ ,<br />
310 anchors = ancs : SimpleUWEold : : Anchor<br />
311 {<br />
312 name = anchorName<br />
313 }<br />
314 } ;<br />
315 enforce domain t r g t i 2 : SimpleUWEnew : : IteratedPresentationGroup<br />
316 {<br />
317 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />
318 name = acName ,<br />
319 kind = ’iteratedPresentationGroup’ ,<br />
320 c o l l a p s e = f a l s e ,<br />
321 dragdrop = f a l s e ,<br />
322 −−i n l i n e Erzeugung von Anchorn −−<br />
323 ownedAttribute = presProp : SimpleUWEnew : : PresentationProperty<br />
324 {<br />
325 name = anchorName ,<br />
326 presentationElement = pe : SimpleUWEnew : : PresentationElement<br />
{}<br />
327 }<br />
328 } ;<br />
329 when<br />
330 {<br />
331 mapPackage ( srcPckg , tgtPckg ) ;<br />
332 mapAnchor ( ancs , pe ) ;<br />
333<br />
334 }<br />
335 }<br />
336 −− Relation mapForm mappt das Element Form −−<br />
337 −− auf das Element InputForm des Z i e l m o d e l l s −−<br />
338 −− und f ü g t a l l e elements des u r s p r ü n g l i c h e n −−<br />
339 −− FormElements a l s P r e s e n t a t i o n P r o p e r t i e s hinzu −−<br />
340 top relation mapForm<br />
341 {<br />
342 formName : String ;<br />
343 formElemName : String ;<br />
344 checkonly domain s r c form : SimpleUWEold : : Form<br />
345 {<br />
346 namespace = srcPckg : SimpleUWEold : : Package {} ,<br />
347 name = formName ,<br />
348 kind = ’form’ ,<br />
349 elements = e l s : SimpleUWEold : : UIElement<br />
350 {<br />
351 name = formElemName<br />
352 }<br />
109
B. Transformationsskript mapUWEversion<br />
353 } ;<br />
354 enforce domain t r g iform : SimpleUWEnew : : inputForm<br />
355 {<br />
356 namespace = tgtPckg : SimpleUWEnew : : Package {} ,<br />
357 name = formName ,<br />
358 kind = ’inputForm’ ,<br />
359 c o l l a p s e = f a l s e ,<br />
360 dragdrop = f a l s e ,<br />
361 −−i n l i n e Erzeugung von FormElementen −−<br />
362 ownedAttribute = presProp : SimpleUWEnew : : PresentationProperty<br />
363 {<br />
364 name = formElemName ,<br />
365 presentationElement = pe : SimpleUWEnew : : PresentationElement<br />
{}<br />
366 }<br />
367 } ;<br />
368 when<br />
369 {<br />
370 mapPackage ( srcPckg , tgtPckg ) ;<br />
371 mapText ( e l s , pe ) or mapImage ( e l s , pe ) or mapAnchor ( e l s , pe ) or<br />
mapTextInput ( e l s , pe ) or mapButton ( e l s , pe ) or mapChoice ( e l s<br />
, pe ) ;<br />
372 }<br />
373 }<br />
374 }<br />
Listing B.1: Kompletter Transformationsskript, der eine automatisierte<br />
UWE-Präsentationsmodell-<strong>Co</strong>-<strong>Evolution</strong> ermöglicht.<br />
110
Abbildungsverzeichnis<br />
2.1 Metamodell der Grunddefinitionen der MDA [10] . . . . . . . . . . . . . . . . 8<br />
3.1 Eine Übersicht der Beziehungen zwischen einem Metamodell und den Softwareartefakten<br />
[8] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19<br />
3.2 Das Petri-Netze-Metamodell MM0 [7] . . . . . . . . . . . . . . . . . . . . . . 21<br />
3.3 Das Petri-Netze-Metamodell MM1 [7] . . . . . . . . . . . . . . . . . . . . . . 21<br />
3.4 Das Petri-Netze-Metamodell MM2 [7] . . . . . . . . . . . . . . . . . . . . . . 22<br />
3.5 Das UWE-Präsentations-Metamodell. Version 1.7 . . . . . . . . . . . . . . . . 28<br />
3.6 UWE-Präsentations-Metamodell. Version 1.8 . . . . . . . . . . . . . . . . . . 29<br />
4.1 Der Aufbau einer Transformation in der relationalen QVT-Sprache [19] . . . 35<br />
4.2 Die Durchführung der Transformation.[19] . . . . . . . . . . . . . . . . . . . . 57<br />
4.3 Das Präsentationsmodell für das Adressbuch in der Version 1.7. . . . . . . . . 59<br />
4.4 Das AddressBook vor und nach der Ausführung der Transformation in der<br />
textuellen Präsentation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60<br />
4.5 Die Deklaration der Metamodelle in der mediniQVT-Umgebung. . . . . . . . 61<br />
4.6 Die Run-Konfiguration der Transformation. . . . . . . . . . . . . . . . . . . . 61<br />
5.1 Das UML-Profil in Version 1.7 . . . . . . . . . . . . . . . . . . . . . . . . . . 64<br />
5.2 Die Anwendungsfälle für den UWE-<strong>Co</strong>-<strong>Evolution</strong>sprozess . . . . . . . . . . . 76<br />
5.3 Die Konfiguration der Transformation in der mediniQVT-Umgebung. . . . . . 79<br />
5.4 Der Vergleich zweier UWE-<strong>Modell</strong>e. Die Differenzen der zwei <strong>Modell</strong>e. . . . . 81<br />
5.5 Das Präsentationsmodell der einfachen Webseite in der Version 1.7 des UWE-<br />
Profils. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83<br />
5.6 Der Vergleich der Versionen 1.7 und 1.8 der SimpleWebSite. . . . . . . . . . . 84<br />
5.7 Das Präsentationsmodell der einfachen Webseite in der Version 1.8 des UWE-<br />
Profils. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85<br />
5.8 Die Präsentationsmodelle der einfachen Webseite in der Version 1.7 un der<br />
Version 1.8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86<br />
A.1 Grafischer Ecore Editor in Eclipse-Umgebung . . . . . . . . . . . . . . . . . . 91<br />
A.2 Einen neuen ” Ecore Tools Project“ erstellen . . . . . . . . . . . . . . . . . . . 92<br />
A.3 Eine neue Ecore Diagramm erstellen . . . . . . . . . . . . . . . . . . . . . . . 92<br />
A.4 Ecorediag - Datei mit dem ” Ecore Diagramm Editor“ öffnen . . . . . . . . . . 93<br />
A.5 Ecore - Datei mit ” Sample Ecore Model Editor“ öffnen . . . . . . . . . . . . . 93<br />
A.6 Das erstellte <strong>Modell</strong> im ” Sample Ecore Model Editor“ . . . . . . . . . . . . . 93<br />
A.7 UWE-Präsentations-Metamodell. Version 1.7 in der Ecore Darstellung . . . . 94<br />
A.8 UWE-Präsentations-Metamodell. Version 1.8 in der Ecore Darstellung . . . . 95<br />
A.9 Ein Generator <strong>Modell</strong> aus einem Ecore-<strong>Modell</strong> erstellen . . . . . . . . . . . . 96<br />
111
Abbildungsverzeichnis<br />
112<br />
A.10 Namen für das Generator-<strong>Modell</strong> wählen . . . . . . . . . . . . . . . . . . . . . 96<br />
A.11 Als ” Model Importer“ das Ecore-<strong>Modell</strong> wählen . . . . . . . . . . . . . . . . . 97<br />
A.12 Generator <strong>Modell</strong> mit EMF Generator öffnen . . . . . . . . . . . . . . . . . . 98<br />
A.13 Eclipse Plug-in-Projekte erstellen . . . . . . . . . . . . . . . . . . . . . . . . . 98<br />
A.14 Eclipse Plug-in-Projekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98<br />
A.15 Das Export der Metamodell-Eclipse-Plug-ins . . . . . . . . . . . . . . . . . . 99<br />
A.16 Speicherortangabe beim Export der Metamodell-Eclipse-Plug-ins . . . . . . . 99<br />
A.17 Das Deployment der Plug-ins . . . . . . . . . . . . . . . . . . . . . . . . . . . 100<br />
A.18 Ein Beispiel eines SimpleWebSite-<strong>Modell</strong>s, dem SimpleUWEold-Metamodell<br />
zugrunde liegt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100<br />
A.19 Ein SimpleUWEold <strong>Modell</strong> erstellen . . . . . . . . . . . . . . . . . . . . . . . 101<br />
A.20 SimpleUWEold <strong>Modell</strong> Editor Menü . . . . . . . . . . . . . . . . . . . . . . . 101<br />
A.21 SimpleUWEold <strong>Modell</strong> Editor - Kontext-Menü . . . . . . . . . . . . . . . . . 102<br />
A.22 SimpleUWEold <strong>Modell</strong> Editor Überblick . . . . . . . . . . . . . . . . . . . . . 102
Tabellenverzeichnis<br />
2.1 Tabelle. Die Metalevels nach der MOF [10] . . . . . . . . . . . . . . . . . . . 12<br />
3.1 Tabelle. Die Abhängigkeit zwischen dem Metamodell und den Softwareartefakten.<br />
[8] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />
3.2 Klassifizierung der Änderungen eines Metamodells im Überblick.[7][24] . . . . 26<br />
3.3 Überblick der Metamodell-Änderungen im Bezug auf Änderungstypen . . . . 30<br />
4.1 Alle Klassen des SimpleUWEold-Metamodells mit den entsprechenden Transformationsaktionen<br />
und den Relationen. . . . . . . . . . . . . . . . . . . . . . 46<br />
4.2 Attribute aus den Abstrakten Klassen. . . . . . . . . . . . . . . . . . . . . . . 47<br />
113
Tabellenverzeichnis<br />
114
Listings<br />
4.1 Der Syntaktischer Aufbau eines Transformationsskriptes[19] . . . . . . . . . . 36<br />
4.2 Der Syntaktischer Aufbau einer Transformation[19] . . . . . . . . . . . . . . . 37<br />
4.3 Das Beispiel einer Transformation[19] . . . . . . . . . . . . . . . . . . . . . . 37<br />
4.4 Das Beispiel einer Relation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38<br />
4.5 Das Beispiel einer Relation unter dem Einsatz der when- und where-Klauseln 39<br />
4.6 Die Syntax einer Domäne[19] . . . . . . . . . . . . . . . . . . . . . . . . . . . 40<br />
4.7 Das Beispiel eines prozeduralen Teil(pattern expression) einer Domäne . . . . 40<br />
4.8 Beispiel einer where-Klausel . . . . . . . . . . . . . . . . . . . . . . . . . . . 42<br />
4.9 Das Beispiel einer object template expression . . . . . . . . . . . . . . . . 42<br />
4.10 Das Beispiel einer object template expression. Alternative . . . . . . . . . 43<br />
4.11 Das Beispiel einer Inline-Objekterzeugung. . . . . . . . . . . . . . . . . . . . 44<br />
4.12 Transformationssignatur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45<br />
4.13 Identifizierte Relationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47<br />
4.14 Relation mapPackage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48<br />
4.15 Relation mapPage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49<br />
4.16 Relation mapPresClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51<br />
4.17 Relation mapText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />
4.18 Relation mapForm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />
4.19 Relation mapAnchored<strong>Co</strong>l . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55<br />
4.20 Die Relation mapProperty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56<br />
5.1 Die Hilfsfunktionen für das Zugriff auf ein angewendetes Stereotyp . . . . . . 65<br />
5.2 Die Anwendung des Stereotyps text wird unter der when-Klausel geprüft . . 65<br />
5.3 Die Relationen für das <strong>Modell</strong> und das Paket . . . . . . . . . . . . . . . . . . 66<br />
5.4 Die Relation für die Textelemente . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />
5.5 Die Relation für die Erzeugung eines liveReport-Attributs . . . . . . . . . . . 68<br />
5.6 Die Relation für die PresentationClass . . . . . . . . . . . . . . . . . . . . . . 68<br />
5.7 Die Relation für die PresentationProperties . . . . . . . . . . . . . . . . . . . 70<br />
5.8 Das Erzwingen eines UML-Profil-Elements in einer Relationsdomäne. . . . . . 80<br />
B.1 Kompletter Transformationsskript, der eine automatisierte UWE-Präsentationsmodell-<br />
<strong>Co</strong>-<strong>Evolution</strong> ermöglicht. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103<br />
115
Liste der Definitionen<br />
1.1 <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong><br />
Unter <strong>Modell</strong>-<strong>Co</strong>-<strong>Evolution</strong> wird eine Anpassung der existierenden <strong>Modell</strong>e verstanden,<br />
die wegen der <strong>Evolution</strong> des zugrundeliegenden Metamodells durchgeführt<br />
werden muss. Die Anpassung bewirkt, dass diese <strong>Modell</strong>e mit dem neuen geänderten<br />
Metamodell konform gehen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2<br />
2.2 Rich Internet Applications<br />
” Rich Internet Applications (RIAs) are web applications, which use data that can be<br />
processed both by the server and the client. Furthermore, the data exchange takes<br />
place in an asynchronous way so that the client stays responsive while continuously<br />
recalculating or updating parts of the user interface. On the client, RIAs provide a<br />
similar look-and-feel as desktop applications and the word rich“ means particularly<br />
”<br />
the difference to the earlier generation of web applications. RIAs are basically<br />
characterized by a variety of interactive operating controls, the possibility of on-<br />
/offline use of the application, and the transparent usage of the client and server<br />
computing power and of the network connection..“[13] . . . . . . . . . . . . . . . . 5<br />
2.3 System<br />
” Ein System ist ein aus Teilen zusammengesetztes und strukturiertes Ganzes. Es<br />
hat eine Funktion, erfüllt einen Zweck und verfügt über eine Architektur.“[10] . . . 7<br />
2.4 Model<br />
” Ein <strong>Modell</strong> beschreibt oder spezifiziert ein System zu einem bestimmten Zweck.<br />
Dazu erfasst es alle hierfür relevanten Aspekte, etwa Struktur, Verhalten, Funktion<br />
und die Umwelt des Systems.“[10] . . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />
2.5 Metamodell<br />
” Ein Metamodell ist die Menge von Elementen mit denen <strong>Modell</strong>e, die Instanzen<br />
dieses Metamodells sind, erstellt werden können. Es enthält die Regeln, die bei<br />
der Erstellung des <strong>Modell</strong>s beachtet werden müssen (abstrakte Syntax) sowie die<br />
Bedeutung der Elemente und Elementkonstellationen (Semantik).“[10] . . . . . . . 8<br />
2.6 Profile<br />
” Ein Profil ist eine leichtgewichtige Erweiterung eines Metamodells. Dazu stellt es<br />
neue <strong>Modell</strong>elemente zur Verfügung oder redefiniert bzw. erweitert die Semantik<br />
oder Syntax bereits bestehender Elemente. Im Gegensatz zur Definition völlig neuer<br />
Metamodelle (schwergewichtiger Ansatz) können sie die Bedingungen, die an<br />
Elemente der <strong>Modell</strong>e gestellt werden, nur verschärfen.“[10] . . . . . . . . . . . . . 8<br />
116
Liste der Definitionen<br />
2.7 Domain<br />
” Unter dem Begriff Domäne versteht man ein abgrenzbares, kohärentes Wissensgebiet.<br />
In einem Metamodell (respektive in einem Profil) werden die Konzepte einer<br />
Domäne in Bezug gesetzt und beschrieben. Zusammen mit ihrem sprachdefinierenden<br />
Charakter bezeichnet man Metamodell und Profil daher als Domänenspezifische<br />
Sprache (engl. Domain-Specific Language, DSL).“[10] . . . . . . . . . . . . . .<br />
2.8 Application<br />
”<br />
9<br />
Eine Anwendung oder Applikation (engl. Application) ist ein zu erstellendes Stück<br />
Software, welches die zu entwickelnde Funktionalität umfasst. Ein System kann<br />
sich aus einer oder mehreren Anwendung(en) zusammensetzen, die auf einer oder<br />
mehreren Plattform(en) ausgeführt werden.“[10]<br />
2.9 Plattform<br />
. . . . . . . . . . . . . . . . . . . 9<br />
” Eine Plattform ist eine Ausführungsumgebung für eine Anwendung. Ihre Funktionalität<br />
stellt sie durch zweckmäßige Schnittstellen bereit, auf die die Anwendung<br />
ohne Kenntnis der eigentlichen Implementierung zugreifen kann. Typische Beispiele<br />
für Plattformen sind im Bereich Betriebssysteme (Unix, Windows), Programmiersprachen<br />
(C++, Java) und Middleware (CORBA, Java EE, .NET) zu finden. Typisch<br />
für Plattformen ist auch, dass sie oft in der Art eines Plattform-Stacks (dt. in<br />
etwa Plattform Stapel) aufeinander aufsetzen. So bildet die Hardware eines <strong>Co</strong>mputers<br />
die unterliegende Plattform für das Betriebssystem, das seinerseits wieder<br />
Plattform für die einzelnen Anwendungen bietet usw.“[10] . . . . . . . . . . . . . .<br />
2.10Transformation<br />
”<br />
9<br />
Eine Transformation (oder genauer <strong>Modell</strong>-Transformation) ist der Prozess der<br />
Umwandlung eines <strong>Modell</strong>s in ein anderes <strong>Modell</strong> des gleichen Systems. Die Spezifikation<br />
für eine solche Transformation ist in Abbildungsregeln (engl. Mapping<br />
Rules) festgehalten, die in einer Abbildung (engl. Mapping) gebündelt sind.“[10] . 9<br />
117
Liste der Definitionen<br />
118
Literaturverzeichnis<br />
[1] Eclipse Galileo. Eclipse Modeling Tools; online accessed 31-May-2012 . http://www.<br />
eclipse.org/galileo/.<br />
[2] Eclipse Modeling Framework, Online accessed 31-May-2012 . http://www.eclipse.<br />
org/modeling/emf/?project=emf.<br />
[3] Blagoev, P.: MagicDraw-Plugin zur <strong>Modell</strong>ierung und Generierung von Web-<br />
Anwendungen. Diplomarbeit, Ludwig-Maximilians-Universität, 2007.<br />
[4] Brun, C. und A. Pierantonio: Model Differences in the Eclipse Modeling Framework.<br />
UPGRADE The European J for the Informatics Professional, IX(2):29–34, 2008.<br />
[5] Busch, M.: Migration und Erweiterung des MagicDraw-Plugins MagicUWE zur Entwicklung<br />
von Web-Anwendungen. Ludwigs-Maximilians-Universität. 2009.<br />
[6] Christian Kroiß, N. K. und S. Kozuruba: UWE Metamodel and Profile User Guide<br />
and Reference. Version 1.7 . 2011.<br />
[7] Cicchetti, A., D. D. Ruscio, R. Eramo und A. Pierantonio: Automating <strong>Co</strong>evolution<br />
in Model-Driven Engineering. In: Proceedings of the 2008 12th International<br />
IEEE Enterprise Distributed Object <strong>Co</strong>mputing <strong>Co</strong>nference, S. 222–231, Washington,<br />
DC, USA, 2008. IEEE <strong>Co</strong>mputer Society.<br />
[8] Di Ruscio, D., L. Iovino und A. Pierantonio: What is needed for managing coevolution<br />
in MDE?. In: Proceedings of the 2nd International Workshop on Model <strong>Co</strong>mparison<br />
in Practice, IWMCP ’11, S. 30–38, New York, NY, USA, 2011. ACM.<br />
[9] Fowler, M.: UML konzentriert. Addison-Wesley, München [u.a.], 2004.<br />
[10] Gruhn, V., D. Pieper und C. Röttgers: MDA: Effektives Software-Engineering mit<br />
UML 2 und Eclipse. Springer, Berlin, 2006.<br />
[11] Hitz, M., G. Kappel, E. Kapsammer und W. Retschitzegger: UML@Work, Objektorientierte<br />
<strong>Modell</strong>ierung mit UML 2 . dpunkt.verlag, Heidelberg, 2005.<br />
[12] Knapp, A., N. Koch, M. Wirsing und G. Zhang: UWE - Ein Ansatz zur modellgetriebenen<br />
Entwicklung von Webanwendungen (UWE - An Approach for the Model-<br />
Driven Development of Web Applications). i-com, 6(3):5–12, 2007.<br />
[13] Koch, N. und M. Busch: Rich Internet Application. State-of-the-Art. 2009.<br />
[14] Koch, N., A. Knapp, G. Zhang und H. Baumeister: Uml-Based Web Engineering<br />
- An Approach Based on Standards.. In: Rossi, G., O. Pastor, D. Schwabe und<br />
L. Olsina (Hrsg.): Web Engineering, Human-<strong>Co</strong>mputer Interaction Series, S. 157–191.<br />
Springer, 2008.<br />
119
Literaturverzeichnis<br />
[15] Kroiß, C. und N. Koch: UWE Metamodel and Profile User Guide and Reference.<br />
Version 1.7 . 2008.<br />
[16] Levendovszky, T., D. Balasubramanian, A. Narayanan und G. Karsai: A Novel<br />
Approach to Semi-Automated <strong>Evolution</strong> of DSML Model Transformation. In: Second<br />
International <strong>Co</strong>nference on Software Language Engineering, SLE 2009, LNCS,<br />
Bd. 5969, S. 23–41, Denver, CO, 05/2010 2010. Springer, Springer.<br />
[17] MOF, O. M. G.: Object Management Group Terms And Acronyms; Online accessed 31-<br />
May-2012 . http://www.omg.org/gettingstarted/save_terms_and_acronyms.htm.<br />
[18] MOF, O. M. G.: OMG’s MetaObject Facility; Online accessed 31-May-2012 . http:<br />
//www.omg.org/mof/.<br />
[19] Nolte, S.: QVT - Relations Language. Springer, 2009.<br />
[20] Pietrek, G. und J. Trompeter (Hrsg.): <strong>Modell</strong>getriebene Softwareentwicklung: MDA<br />
und MDSD in der Praxis. Entwickler.Press, Frankfurt am Main, 2007.<br />
[21] Ruscio, D. D., R. Laemmel und A. Pierantonio: Automated co-evolution of GMF<br />
editor models. In: Malloy, B., S. Staab und M. van den Brand (Hrsg.): 3rd<br />
International <strong>Co</strong>nference on Software Language Engineering (SLE 2010), S. 143–162.<br />
Springer, Heidelberg, 2010.<br />
[22] Sharonova, D.: Erweiterung eines Open Source-Werkzeugs für die UML-basierte <strong>Modell</strong>ierung<br />
von Webanwendungen. Diplomarbeit, Ludwig-Maximilians-Universität, 2011.<br />
[23] Stahl, T. und M. Völter: <strong>Modell</strong>getriebene Softwareentwicklung - Techniken, Engineering,<br />
Management. dpunkt.verlag, 2007.<br />
[24] Wachsmuth, G.: Metamodel Adaptation and Model <strong>Co</strong>-adaptation. In: ECOOP, S.<br />
600–624, 2007.<br />
120