Software Engineering 2 – Konstruktion interaktiver (CASE) Tools SS 2007 Albert Zündorf, Software Engineering
Administratives Vorlesung: Montags 15-18 Uhr Raum 1342 (4SWS) Prüfung: Projektarbeit (wir basteln uns ein (Petri-Netz) Tool) SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Überblick Referenzarchitektur Meta-Modell Repository Austauschformate Unparsing 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 out = f (in); [out.x > 10] [out.x < 20] out.x = in.x + 1; SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Beispiel aus http://www.daimi.au.dk/CPnets/intro/ 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 M0: Objekte / Instanzen zur Laufzeit (Jim, GET-Vorlesung) M1: Modell Diagramme die der Benuzter eingibt (Student, Vorlesung, ...) (oft UML) M2: Meta-Modell: Klassendiagramm, dass Benuterzdiagramm beschreibt / Tool Ebene (mit UML oder MOF) M3: Wer beschreibt das Meta-Modell? Meta-Meta Modell (meist MOF, MOF ist selbstbeschreibend Mn+1 = Mn) SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Sicht des Tool-Bauers Meta Modelle sind auch nur Modelle Modellierungsebene beeinflusst Modellierungssprache nur wenig Oft mehrere Ebenen betroffen Meta Meta ist Quatsch nur wenn man einen Knoten im Hirn braucht nur zur Verwirrung der Leute M3 C A S E T O O L . . . M2 UMLClass UMLAssoc M1 Student Course M0 Albert SE II Jim SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
Meta Object Facility – MOF yet another meta model for class diagrams UML notation klare Semantik standard Implementierung (z.B. JMI Repository) standard Austauschformate (XMI) Akademische Initiative Open source oft als Austauschformat zwischen Tools benutzt 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. Hibernate) 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 Coobra: 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
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 Coobra FWT direkter Aufruf von Operationen Operationen beliebig gruppierbar (z.B. in Klasse StatechartEditor) FWT Elemente benutzen direkt die API SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
4. Commands Aufgabe Klasse StatechartEditor bauen main Methode baut eine Instanz initGUI Methode baut Hauptfenster aus FWT Elementen erwartete Operationen / GUI Elemente: Load / Save Undo / Redo Create / Delete State Create / Delete Transition startDobs Unparsing später, wir schauen uns das im Dobs an SS 2007 Software Engineering 2 Albert Zündorf, University of Kassel
5. 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 GEF 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 GEF 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
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
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