UML / Fujaba Generierung von Java-Quellcode aus UML-Diagrammen Marcel Friedrich
Agenda Einleitung Struktur Verhalten Klassendiagramme Storydiagramme Statecharts Action methods 2
Thema Codegenerierung mit Fujaba basierend auf Ausführungssemantik Wie werden die unterschiedlichen Arten von UML-Diagrammen kombiniert, um eindeutige Spezifikation zu erhalten? Welche Diagramme sind für die Erstellung welcher Code- Fragmente verantwortlich? 3
Motivation Ausgang: Auftretende Ereignisse Andere Objekte reagieren darauf Zustandsänderung Wie soll dies (visuell) modelliert werden? 4
Übersicht Diagramm Klassendiagramm Storydiagramm Statechart liefert Struktur Methodeninhalt Event-Behandlung 5
Struktur durch Klassendiagramme Klassendiagramme beinhalten: Attribute Assoziationen Methoden 6
Beispiel public class Level extends Place private int number; public void setnumber (int value) this.number = value; public int getnumber () return this.number;... public void pressbutton () //Empty private Elevator elevator2; public boolean setelevator2 (Elevator value) boolean changed = false; if (this.elevator2!= value)... return changed; public Elevator getelevator2 () return this.elevator2; 7
Beispiel public class Level extends Place private int number; public void setnumber (int value) this.number = value; public int getnumber () return this.number;... public void pressbutton () //Empty private Elevator elevator2; public boolean setelevator2 (Elevator value) boolean changed = false; if (this.elevator2!= value)... return changed; public Elevator getelevator2 () return this.elevator2; 8
Beispiel public class Level extends Place private int number; public void setnumber (int value) this.number = value; public int getnumber () return this.number;... public void pressbutton () //Empty private Elevator elevator2; public boolean setelevator2 (Elevator value) boolean changed = false; if (this.elevator2!= value)... return changed; public Elevator getelevator2 () return this.elevator2; 9
Codegenerierung (Klassendiagramme) Klassendiagramm Sourcecode Klasse Klassen Deklaration Attribute Attribut Deklaration Attribut Zugriffsmethoden Methoden Methoden Deklarationen? Assoziationen Referenz Deklaration Referenz Zugriffsmethoden 10
Storydiagramme Geeignet für: Komplexe Objektstrukturen und deren Evolution Basieren auf Klassendiagramm Beschreiben Scenarios 11
Storydiagramm Storydiagramm: Start- / Endknoten Aktivitäten Assoziationen Objektinstanzen Assoziationen Guards 12
Beispiel 13
Beispiel public void enterelevator () // Variablendeklaration try fujaba_success = false; fujaba_tmpobject = this.getlevel (); JavaSDM.ensure ( fujaba_tmpobject instanceof Level ); l = (Level) fujaba_tmpobject; e = l.getelevator2 (); JavaSDM.ensure ( e!= null ); this.setlevel (null); e.addtoperson (this); fujaba_success = true; catch (JavaSDMException fujaba_internalexception ) fujaba_success = false; return ; 14
Beispiel public void enterelevator () // Variablendeklaration try fujaba_success = false; fujaba_tmpobject = this.getlevel (); JavaSDM.ensure ( fujaba_tmpobject instanceof Level ); l = (Level) fujaba_tmpobject; e = l.getelevator2 (); JavaSDM.ensure ( e!= null ); this.setlevel (null); e.addtoperson (this); fujaba_success = true; catch (JavaSDMException fujaba_internalexception ) fujaba_success = false; return ; 15
Beispiel public void enterelevator () // Variablendeklaration try fujaba_success = false; fujaba_tmpobject = this.getlevel (); JavaSDM.ensure ( fujaba_tmpobject instanceof Level ); l = (Level) fujaba_tmpobject; e = l.getelevator2 (); JavaSDM.ensure ( e!= null ); this.setlevel (null); e.addtoperson (this); fujaba_success = true; catch (JavaSDMException fujaba_internalexception ) fujaba_success = false; return ; 16
Beispiel zu Kontrollstruktur 17
Beispiel zu Kontrollstruktur public void move () if (dest.getno() > l.getno()) try // story pattern this.moveup(); catch ( JavaSDMException fujaba_internalexception ) fujaba_success = false; else try // story pattern this.movedown(); catch ( JavaSDMException fujaba_internalexception ) fujaba_success = false;... return ; 18
Codegenerierung (Storydiagramme) Diagramm Sourcecode Storydiagramm Methoden Inhalt Aktivitäten / Try-Catch Block mit Variablen- _Story Pattern deklaration und -initialisierung Assoziationen Setzen von Referenzen auf Instanzen von Objekten Transitionen Übergänge zw. SP -Blöcken Guards Kontrollstrukturen 19
Zustandsdiagramm Geeignet für: Nebenläufigkeit reaktive Objekte Verwendung auf mehreren Ebenen möglich: Klassen Methoden Verwenden Aktivitäten & Storydiagramme 20
Events & Action methods Reaktives Objekt: Events als event methods Einheitlicher Aufruf Lösen action methods aus Action methods behandeln events Sind Private 21
Generische Zustandsdiagramm Klassen 22
Generische Zustandsdiagramm Klassen InitStatechart() erzeugt State-Table 23
Generische Zustandsdiagramm Klassen Zustände Aktivität, komplexer Zustand und And- Zustand erben 24
Generische Zustandsdiagramm Klassen Transitionen 25
Generische Zustandsdiagramm Klassen Action methods Wenn Zustand eintritt oder verlassen wird Wenn Transition ausgelöst wird Wenn Aktivität ausgeführt wird 26
Generische Zustandsdiagramm Klassen Action methods Wenn Zustand eintritt oder verlassen wird Wenn Transition ausgelöst wird Falls Aktivität auch doaction Wie action methods implementieren? Storydiagramme! 27
Codegenerierung (Zustandsdiagramme) Diagramm Sourcecode Statechart State-Table Zustände/ (State-Table) Eintrag, _Aktivitäten Event-queues und Action-Methods Transitionen (State-Table) Transitions und Action-Methods 28
Zusammenfassung Klassendiagramme liefern strukturelle Grundlage Aufruf Action-Method durch Statecharts Methodeninhalte durch Storydiagramme Grenzen der Codegenerierung z.b.: komplexe Algorithmen oder Systemaufrufe 29
Fragen? 30