Vortrag im Rahmen der Vorlesung Modellgetriebene ...MDSD | SS 2011 | 19.01.2012 28 von 30 Aufgaben...
Transcript of Vortrag im Rahmen der Vorlesung Modellgetriebene ...MDSD | SS 2011 | 19.01.2012 28 von 30 Aufgaben...
Projektpräsentation
Vortrag im Rahmen der Vorlesung
Modellgetriebene Softwareentwicklung
Dozenten: Prof. Dr. Martin Buchheit & Bernhard Merkle
WS 2011/2012
Referent: Florian Kalisch, Denis Radjenovic
2 von 30 MDSD | SS 2011 | 19.01.2012
Projektaufgabe und Zielsetzung
Zielplattformen
Vorgehensweise
Metamodell
Generatoren
Spezialfälle: TableLayout, MouseEvents & Actions
Weitere umgesetzte Punkte (Live)
◦ Code-Formatter, Validatoren
Punkteliste & Zusammenfassung
3 von 30 MDSD | SS 2011 | 19.01.2012
Projektaufgabe: ◦ Mit Hilfe von Xtext (ab Version 2.x) modellgetrieben
Benutzeroberflächen erstellen
Zielsetzung: ◦ Ein Metamodell
◦ Ein Modell
◦ Generierung von Oberflächen für zwei Plattformen, die genau das exakt gleiche Verhalten aufweisen
◦ Herausforderung: Die Generierung der Benutzer-oberflächen darf sich nur in den Generatoren unter-scheiden! Manuell nachgetragener Code ist tabu!
4 von 30 MDSD | SS 2011 | 19.01.2012
Gtk+/gtkmm ◦ Programmiersprache: C (Gtk+) / C++ (gtkmm)
◦ Verwendete Version: gtkmm Version 2.2.4
Java Swing ◦ Programmiersprache: Java
◦ Verwendete Version: JDK 6 (Swing ist fester Bestandteil der Java-Runtime)
5 von 30 MDSD | SS 2011 | 19.01.2012
Schritt 1: Erstellen der Prototypen ◦ dient zum Verständnis für den Aufbau und der
Syntax der Quelltexte beider Plattformen
Schritt 2: Erstellen der Referenzanwendungen ◦ notwendig um Gemeinsamkeiten der Plattformen
und aller zu verwendenden Komponenten festzustellen und daraus eine Domäne zu erstellen
Schritt 1 und 2 sind die Domänenanalyse
6 von 30 MDSD | SS 2011 | 19.01.2012
Schritt 3: Erstellen des Metamodells (DSL)
Schritt 4: Erstellen der Modelle
Schritt 5: Erstellen der Generatoren
Schritt 6: Weitere „Features“ hinzufügen
◦ z.B. Validatoren oder Beautifier
Wichtig: Schritt 3, 4 und 5 sind iterative Prozesse gewesen (vom Prototyp zur Referenzanwendung)!
7 von 30 MDSD | SS 2011 | 19.01.2012
gktmm
Swing
Mock-up
8 von 30 MDSD | SS 2011 | 19.01.2012
Swing
9 von 30 MDSD | SS 2011 | 19.01.2012
gtkmm
10 von 30 MDSD | SS 2011 | 19.01.2012
Mock-up
Swing
gtkmm
11 von 30 MDSD | SS 2011 | 19.01.2012
Mock-up
12 von 30 MDSD | SS 2011 | 19.01.2012
Java Swing gtkmm
Layout
BoxLayout Gtk::HBox, Gtk::VBox
TableLayout (externe Library) Gtk::Table
Komponenten
JPanel -
JTabbedPane Gtk::Notebook
JButton Gtk::Button
JLabel Gtk::Label
JTextField Gtk::Entry
JCheckBox Gtk::CheckButton
JComboBox Gtk::ComboBoxText, Gtk::ComboBoxEntryText
JTextArea Gtk::TextView
JList diverse Komponenten im Zusammenspiel
13 von 30 MDSD | SS 2011 | 19.01.2012
14 von 30 MDSD | SS 2011 | 19.01.2012
15 von 30 MDSD | SS 2011 | 19.01.2012
16 von 30 MDSD | SS 2011 | 19.01.2012
17 von 30 MDSD | SS 2011 | 19.01.2012
Ziel ◦ der generierte Code muss aus Eclipse heraus starten
Feststellung ◦ mit Swing kein Problem da Java (einbinden von
Bibliotheken, z.B. TableLayout ist einfach)
◦ Mit gtkmm ein großes Problem, da die gtkmm Bibliotheken manuell in ein C++ Projekt eingebunden werden müssen -> SEHR AUFWENDIG!
Lösungsmöglichkeiten ◦ Die Projektstruktur wird mitgeneriert -> GESCHEITERT
◦ Manuelles kopieren eines Templateprojekts -> ERFOLG
18 von 30 MDSD | SS 2011 | 19.01.2012
Pro Plattform ein eigener Generator
jeder Generator besteht aus 3 Files:
◦ GuiDslGenerator<Swing/gtkmm>.xtend
dient zur Sourcecode-Generierung
◦ GeneratorExtensions<Swing/gtkmm>.xtend
enthält kleine wiederkehrende Funktionen, z.B. zur Konvertierung von ENUMS in Sourcecode-Text
◦ GuiDslGenerator<Swing/gtkmm>Util.java
ermöglicht das Speichern und Manipulieren von Werten über die ganze Generierungsphase hinweg
19 von 30 MDSD | SS 2011 | 19.01.2012
20 von 30 MDSD | SS 2011 | 19.01.2012
wenn Windowname = „PrototypeGUI“
GeneratorExtensionsGtkmm.xtend
GeneratorExtensionsSwing.xtend
21 von 30 MDSD | SS 2011 | 19.01.2012
22 von 30 MDSD | SS 2011 | 19.01.2012
Schematische Darstellung
0 1 2
0
1
2
top
bottom
left right
y
x
x
y
cellelement
23 von 30 MDSD | SS 2011 | 19.01.2012
Beispiel 1:
0 1 2
0
1
2
X
Y
Edit:
24 von 30 MDSD | SS 2011 | 19.01.2012
Beispiel 2:
0 1 2
0
1
2
X
Y
25 von 30 MDSD | SS 2011 | 19.01.2012
Im Moment wird nur der Button unterstützt
Unterteilung in Mouse Event und ActionType
Vorteil: Ein Button kann mehre Mouse Events unterstützen und ein Mouse Event mehrere ActionTypes
26 von 30 MDSD | SS 2011 | 19.01.2012
Beispiel 1:
◦ ein MouseEvent
◦ zwei ActionTypes
Beispiel 2:
◦ ein MouseEvent
◦ ein ActionType
27 von 30 MDSD | SS 2011 | 19.01.2012
28 von 30 MDSD | SS 2011 | 19.01.2012
Aufgaben Punkte
Erstellen einer DSL zur GUI-Modellierung mit XTEXT 2.x 30
Erstellen eines Prototyps für beide Plattformen 10
Erstellen eines Referenzmodells 10
Erstellen einer Referenzimplementierung für beide Plattformen 10
Erstellen einer Transformation von Modellen der DSL in eine gewählte Plattform auf Basis von Referenzmodell und -implementierung
30
Erweiterte komplexe GUI-Elemente (TableLayout) 20
Einbinden eines entsprechenden Code-Formatter 5
Generierte GUI direkt aus Eclipse startbar 5
Einbinden von Actions zu GUI-Elementen 20
Implementierung von Validatoren zur Prüfung der statischen Semantik 5
SUMME 145
29 von 30 MDSD | SS 2011 | 19.01.2012
Die definierten Praktikumsziele wurden erreicht
Xtext und Xtend 2 bieten viele Möglichkeiten und Flexibilität bei der Generierung ◦ Die Weiterentwicklung von Xtext 1.x auf 2.x ist
deutlich spürbar
Vorteil der modellgetriebenen Softwareentwicklung ist deutlich geworden
Durch das Praktikum wurde gutes Grundlagenwissen in Xtext erworben ◦ Vertiefung z.B. in Form einer Thesis möglich
30 von 30 MDSD | SS 2011 | 19.01.2012
Fragen? Anregungen?