Software Engineering 2 – Konstruktion interaktiver (CASE) Tools WS 10 / 11 Vorlesung: Albert Zündorf, Software Engineering Übungen: Nina Geiger, Software Engineering
Administratives Vorlesung: Montags 15-18 Uhr Raum 1340 (4SWS) Prüfung: Projektarbeit (wir basteln uns ein SmartIO Tool) SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Überblick Referenzarchitektur Meta-Modell Unparsing Commands Repository Austauschformate Checking Code Generierung SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Generators / Interpreters 1. Referenzarchitektur QVT Generators / Interpreters GUI (Commands) Meta Model GUI (Unparsing) Import/ Export Repository SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
2. Meta-modell abstrakter Syntaxgraph (ASG) logische Datenstruktur hinter der Darstellung am Bildschirm speichert Editoreingaben beschrieben durch Klassendiagramm File Edit Tools X SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
2. Meta-modell abstrakter Syntaxgraph (ASG) logische Datenstruktur hinter der Darstellung am Bildschirm speichert Editoreingaben beschrieben durch Klassendiagramm File Edit Tools X SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
2. Meta-modell abstrakter Syntaxgraph (ASG) logische Datenstruktur hinter der Darstellung am Bildschirm speichert Editoreingaben beschrieben durch Klassendiagramm File Edit Tools X SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
2. Meta-modell SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Meta Meta Meta SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Time Levels library development time tool development time runtime SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Generators / Interpreters 1. Referenzarchitektur QVT Generators / Interpreters GUI (Commands) Meta Model GUI (Unparsing) Import/ Export Repository SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
3. Unparsing ? Metamodell: interne Speicherung z.B. für Code Generierung GUI: Darstellung am Bildschirm z.B. mit GEF (oder Swing) Unparsing: Erzeugung der Darstellung aus dem Metamodell 2 Teilprobleme: Erzeugung von Darstellungselementen für Modell Synchronisation bei Änderungen SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Bildschirmdarstellung vs. interne Struktur Model Action Update GUI View SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
… The GMF Way (1) Model MVC GUI View 3 Probleme: Initiales Unparsing Update Action MVC Create/Update Paint 3 Probleme: Initiales Unparsing Update des Views bei Änderung am Model Umsetzen von Nutzeraktionen in Modelländerungen GUI View SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
View-Update: Model-View-Controller weiß nichts über View Notification Mechanism View weiß nichts über Model Controller Bringt beides zusammen… setName(„myPlace“) firePropertyChange(…) Interface c1:Controller c2:Controller Controller setGraphicalPropertyX() … Interface setText(„myPlace“) View SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
… The GMF Way (2) Model z.B. EMF Controller GEF Draw2D Figures View Interface Model z.B. EMF 1:1 create() Action Controller GEF „1:1“ create() setGraphicalPropertyX() … Interface Draw2D Figures View SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
EMF + GEF = GMF GEF ist schön und gut, aber … … immer noch viel zu kompliziert und aufwändig … nicht model-driven (Java-Hacken) GMF (Graphical Modeling Framework) Führt EMF und GEF zusammen Spezifizieren statt Programmieren … alles viel schöner, einfacher, schneller, besser !? Sehr spezifische Anforderungen an das Modell (1:1 Umsetzung): Da gibt‘s noch was zu tun… SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
GMF Übersicht SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Graphical Definition Model Definiert die Diagrammelemente Figure-Gallery enthält graphische Primitive Nodes, Connections… binden Figures an logische Diagrammelemente Graphical Definition Model = Visual Language SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Tooling Definition Toolbar Menüs … SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Mapping Model / Notation Model Bildet das Domain Model auf das Graphical Definition Model ab Im Wesentlichen 1:1 Kanten aus Objekten oder Links braucht Komposition im Modell … Etwas komplexere Mappings über OCL-Bedingungen möglich In Zukunft (vielleicht) mal flexibler durch „echtes“ Model-Mapping mit QVT Mapping Model + Graphical Definition Model = Notation Model Ordnet Tools aus Tooling Definition zu SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Eugenia GMF ist immer noch zu kompliziert Eugenia: Annotation des Klassendiagramm Generierung der GMF Konfigurationen Siehe Übung SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Unparsing Summary SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Generators / Interpreters 1. Referenzarchitektur QVT Generators / Interpreters GUI (Commands) Meta Model GUI (Unparsing) Import/ Export Repository SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
4. Commands Aktionen hinter Menüpunkten und Buttons Viele Buttons/Menüpunkte für ein Kommando denkbar Undo/Redo Einheiten API Operationen Macros SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
4. Commands Normalerweise ein Objekt/eine Klasse pro Command Aufwändige Protokolle für's Undo/Redo API getrennt Bei uns Undo/Redo per EMF? SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
4. Commands Aufgabe Klasse SmartIO Editor bauen eclipse GMF plugin erwartete Operationen / GUI Elemente: Load / Save Undo / Redo Create / Delete Component Create / Delete Channel replaceComponentByXY Insert LogComponent into Channel Add LogComponent to all components startDobs SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Generators / Interpreters 1. Referenzarchitektur QVT Generators / Interpreters GUI (Commands) Meta Model GUI (Unparsing) Import/ Export Repository SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
3. Repository Man will ja auch mal abspeichern und wieder laden: Binäre File-Formate / Java Serialisierung class C implements Serializable bestimmen aller Objekte die gespeichert werden sollen ( Composite Struktur) transiente Attribute werden ausgeklammert Anforderungen Serialisierung Speichern und Laden + Einfachheit ++ Tool-Kopplung O Multi-User Support - Versionierung -- Schema-Evolution ? Scaling SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
3. Repository XML-Formate generische Lade-/Speicher Routinen per Java Reflection bestimmen aller Objekte die gespeichert werden sollen ( Composite Struktur) JDom / Xerces Basistechnologie (beherschbar) Anforderungen XML - Formate Speichern und Laden + Einfachheit Tool-Kopplung Multi-User Support - Versionierung -- Schema-Evolution Scaling SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
3. Repository Relationale Datenbanken Objekte und Beziehungen werden als Tupel in Datenbanktabellen gespeichert Zugriff per ODBC Middleware (z.B. JPA) Multi-User Betrieb durch Datenbank Sperrkonzepte und Transaktionen pessimistische Sperren Caching schwierig Anforderungen Datenbanken Speichern und Laden + Einfachheit - Tool-Kopplung Multi-User Support Versionierung Schema-Evolution Scaling ++ SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
3. Repository Coobra2: COmmon Object Replication frAmework Basismechanismus von Fujaba Protokollierung aller Attributzugriffe als Deltas per Listener Undo / Redo Deltas Checkin / Checkout in Repository optimistisches Locking / Merging Integriert in Fujaba Code Generierung manuelle Implementierung möglich Anforderungen Coobra Speichern und Laden + Einfachheit ++ Tool-Kopplung Multi-User Support Versionierung Schema-Evolution Scaling - SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
3. Repository Anforderungen Serialisierung XML - Formate Datenbanken Coobra Speichern und Laden + Einfachheit ++ - Tool-Kopplung O Multi-User Support Versionierung -- Schema-Evolution ? Scaling SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Generators / Interpreters 1. Referenzarchitektur QVT Generators / Interpreters GUI (Commands) Meta Model GUI (Unparsing) Import/ Export Repository SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Simulation SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Simulation SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Simulation SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Generators / Interpreters 1. Referenzarchitektur QVT Generators / Interpreters GUI (Commands) Meta Model GUI (Unparsing) Import/ Export Repository SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Beispiel Petri Net: Uni-Party Idea Orga Team Date Bands start corePlanning go findPeople Room increment teamParty Advertising Equipment DrinkingFood. wrapUP PartyTeam FireDep. celebrate party entry setUp closeIt begin open prepare detailing SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Nebenläufigkeit: corePlanning Orga Team planing DatePlan BandPlan RoomPlan [failure] dateNegos bandNegos roomNegos DateFixed BandFixed RoomFixed Date [success] [success] reviewing Bands [success] Room SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Semantikvorschlag: ordne jeder Transition ein Java-Codefragment zu In und Out Stellen sind Variablen (a bis e) vom Typ Stelle Transitionen werden neu geschedult wenn sich an einer In oder Out Stelle was ändert Transition entscheidet ob und welche Token konsumiert und produziert werden wenn eine Transition etwas tut, wird sie neu geschedult es gibt spezielle Input und Output stellen Input Stellen können von außen befüllt werden Output Stellen können von außen geleert werden Initial Marking ist leer a b c t d e SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Generators / Interpreters 1. Referenzarchitektur QVT Generators / Interpreters GUI (Commands) Meta Model GUI (Unparsing) Import/ Export Repository SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Query – View – Transformation Zentraler Teil der Model Driven Architecture (MDA) Initiative „man will auch mal mit den schönen Modellen rechnen“ Konsistenzanalysen Refactorings, … Modell A in Modell B umbauen Ausführung / Code Generierung SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
elementare Konsistenzanalysen: Stellen und Transitionen eindeutig benannt jede Transition hat mind. eine In und eine Out Stelle jede Stelle hat mindestens eine Transition SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
inhaltliche Konsistenzanalysen: jede Input Stelle trägt zu mind. einer Output stelle bei jede Output Stelle wird von mind. einer Input Stelle versorgt SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Konsistenzanalysen (2cd) Inkonsistenzen fallen meist bei Ausführung / Code-Generierung auf Einfache Strategie: Fehler-Management-Objekt einführen pro Fehler: fehler Markierungsobjekt erzeugen fehlerhafte Stelle markieren an Fehler-Management-Objekt anhängen Fehlerliste anzeigen vor jeder neuen Analyse / Ausführung / Code-Generierung alte Fehler löschen SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Refactorings: merge Transitions fasse zwei Transitionen zu einer zusammen name der ersten Java Code von beiden hintereinander In Stellen von beiden Out Stellen von beiden SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Refactorings: merge Places fasse zwei Stellen zu einer zusammen Name der ersten Transitionen von beiden SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Refactorings: split Place ersetze Stelle durch zwei Stellen mit Transition dazwischen die Transition liest und schreibt auf beiden neuen Stellen Java Code kopiert alle Token vor und zurück SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Generators / Interpreters 1. Referenzarchitektur QVT Generators / Interpreters GUI (Commands) Meta Model GUI (Unparsing) Import/ Export Repository SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Interpreter 1. Stufe: Metamodell um Ausführungsinformation erweitern: Interpreter Objekt Token mit Zeigern auf Dokumente Interpreter: bei Stellen als Listener für Tokenänderungen subscriben bei Tokenchange, benachbarte Transitionen in Todo-Queue Transitionen aus Todo-Queue feuern, d.h. Java Code ausführen SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Action Language Action Language Bean-Shell www.beanshell.org import bsh.Interpreter; Interpreter i = new Interpreter(); // Construct an interpreter i.set("foo", 5); // Set variables i.set("date", new Date() ); Date date = (Date)i.get("date"); // retrieve a value from a variable // Eval a statement and get the result i.eval("bar = foo*10"); System.out.println( i.get("bar") ); // Source an external script file i.source("somefile.bsh"); SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Ampel Beispiel: Token t = red.getFirstFromTokens(); if (t != null) { // fire red.removeFromTokens (t); t.getDocument.setYellow(true); red_yellow.addToTokens (t); } red yr ry yellow red_ yellow gy yg green SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
class Ampel Ampel red : Boolean yellow : Boolean green : Boolean SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Generators / Interpreters 1. Referenzarchitektur QVT Generators / Interpreters GUI (Commands) Meta Model GUI (Unparsing) Import/ Export Repository SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Code Generierung Mehrere Alternativen: Visitor der das Metamodell durchläuft und Strings in eine Datei schreibt. hoher Aufwand Indentieren und so ist doof Pretty Printer nehmen nicht sehr Wartungsfreundlich Template basierte Code Generierung hat sich durchgesetzt SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Template basierte Code Generierung class $owner.name { public void initPetriNet () { #foreach ( $place in $net.places) Place $place = new Place (); $place.setName ("$place"); #end #foreach ( $trans in $net.transitions) Transition $trans = new Transition (); #foreach ( $src in $trans.preplaces ) $trans.addToPreplaces ($src); #end . . . #end } } SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Empfohlene Template Engine google for Velocity SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Generators / Interpreters Zusammenfassung QVT Generators / Interpreters GUI (Commands) Meta Model GUI (Unparsing) Import/ Export Repository SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Diplomarbeiten am Fachgebiet Johannes und Sys: Spieleprogrammierung Ruben: Lego Mindstorms / Chumbee Ubiquitäre Systeme Fujaba – UML Lab Kopplung Nina: GWT GUI Builder Web Apps Jörn: Natural Text To Object / Android Apps Andreas: Model Transformation in konkreter Syntax / Model Refactorings Albert: Fujaba für verteilte Systeme Verifikation & Model Checking SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Tool Demo Anforderungen Graphischer Editor Speichern und Laden Undo / Redo Interpreter Code Generator Sprachfeatures: BlockDecl BlockAppl Comp If / While Gen Rekursion? SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel