Projektpräsentation Vortrag im Rahmen der Vorlesung Modellgetriebene Softwareentwicklung Dozenten: Prof. Dr. Martin Buchheit & Bernhard Merkle WS 2011/2012 Referent: Florian Kalisch, Denis Radjenovic
Projektaufgabe und Zielsetzung Zielplattformen Vorgehensweise Metamodell Generatoren Spezialfälle: TableLayout, MouseEvents & Actions Weitere umgesetzte Punkte (Live) Code-Formatter, Validatoren Punkteliste & Zusammenfassung 2 von 30
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 Benutzeroberflächen darf sich nur in den Generatoren unterscheiden! Manuell nachgetragener Code ist tabu! 3 von 30
Java Swing Programmiersprache: Java Verwendete Version: JDK 6 (Swing ist fester Bestandteil der Java-Runtime) Gtk+/gtkmm Programmiersprache: C (Gtk+) / C++ (gtkmm) Verwendete Version: gtkmm Version 2.2.4 4 von 30
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 5 von 30
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)! 6 von 30
Swing Mock-up gktmm 7 von 30
Swing 8 von 30
gtkmm 9 von 30
Swing Mock-up gtkmm 10 von 30
Mock-up 11 von 30
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 12 von 30
13 von 30
14 von 30
15 von 30
16 von 30
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 17 von 30
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 18 von 30
19 von 30
wenn Windowname = PrototypeGUI GeneratorExtensionsGtkmm.xtend GeneratorExtensionsSwing.xtend 20 von 30
21 von 30
Schematische Darstellung top bottom left right 0 1 y x 0 1 2 cellelement x y 2 22 von 30
Beispiel 1: X 0 1 2 0 Edit: Y 1 2 23 von 30
Beispiel 2: X 0 1 2 0 Y 1 2 24 von 30
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 25 von 30
Beispiel 1: ein MouseEvent zwei ActionTypes Beispiel 2: ein MouseEvent ein ActionType 26 von 30
27 von 30
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 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 30 28 von 30
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 29 von 30
Fragen? Anregungen? 30 von 30