Vortrag im Rahmen der Vorlesung Modellgetriebene ...MDSD | SS 2011 | 19.01.2012 28 von 30 Aufgaben...

Post on 17-Mar-2021

0 views 0 download

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?