Graphgrammatiken Story Driven Modelling

Graphgrammatiken
Story Driven Modelling
Storydiagramm
Codegenerierung
im Fujaba
Wenfeng Ruan
1
Graphgrammatiken
• Was ist Graphgrammatik?
• Was können wir mit Graphgrammatik
machen?
• Einfache Beispiele
Graphgrammatiken
SDM
Storydiagramm und Codegenerierung
2
Graph Grammatik Regel
• beschreibt Graph Transformation
:A
:A
:B
:B
::=
:C
Graphgrammatiken
SDM
Storydiagramm und Codegenerierung
3
Anwendung einer Regel
• Hostgraph
:L
:L
:A
:A
:B
:B
:M
:N
:C
:M
Graphgrammatiken
:N
SDM
Storydiagramm und Codegenerierung
4
Graphgrammatik
• Weitere Funktionen von Graphgrammatik
Knoten
Kanten
1. Erzeugen
2. Löschen
3. Negativ
4. Optional
5. Attribute ändern
1. Erzeugen
2. Löschen
3. Negativ
4. Optional
Graphgrammatiken
SDM
Storydiagramm und Codegenerierung
5
Wie programmiert man mit
Graphgrammatiken ?
• Programmzustand als Graph
repräsentieren
• Änderung eines Programmzustand ist eine
Graphtransformation, die durch eine
Graphgrammatik beschrieben wird
Story Driven Modeling
Graphgrammatiken
SDM
Storydiagramm und Codegenerierung
6
Story Driven Modeling
Usecase Diagramm
Story Board
– Ein Überblick
Klassen-Diagramm
classA
+ attr1
classC
+ attr3
classB
- attr2
Weitere SystemAnforderungen:
GUI
Fehlertoleranz
…
public classA{
...
...
}
Code per Hand
Generierte Code
Graphgrammatiken
SDM
Story Diagramm
Storydiagramm und Codegenerierung
7
Example: Elevator simulation
Graphgrammatiken
SDM
Storydiagramm und Codegenerierung
8
A person enters
Graphgrammatiken
SDM
Storydiagramm und Codegenerierung
9
Graphgrammatiken
SDM
Storydiagramm und Codegenerierung
10
Graphgrammatiken
SDM
Storydiagramm und Codegenerierung
11
Storydiagrammsyntax
• Notationen im Fujaba
<<create>>
v:Type
<<destroy>>
v:Type
v:Type
Graphgrammatiken
v:Type
<<create>>
v:Type
<<destroy>>
a = 3;
v:Type
SDM
Storydiagramm und Codegenerierung
12
Generated Javapublic
source
code
void personEnters() {
boolean success = false;
Iterator iter = null;
Object tmp = null;
Person person = null;
Level level = null;
try {
success = false;
// bind level: Level
iter = this.iteratorOfLevels();
while (!(success) && iter.hasNext()) {
try {
tmp = iter.next();
SDM.ensure(tmp instanceof Level);
level = (Level) tmp;
// attribute condition
SDM.ensure ((level.getNo() == 0));
Graphgrammatiken
SDM
Storydiagramm und Codegenerierung
13
Generated Java source code
// create object
person = new Person();
// create link
level.addToPersons(person);
// create link
this.addToPersons(person);
success = true;
}
catch (SDMException exception) {}
}
}
catch (SDMException exception) {
success = false;
}
return;
}
Graphgrammatiken
SDM
Storydiagramm und Codegenerierung
14
Praxis mit Fujaba
Weitere Methoden dieses
Beispiels
Graphgrammatiken
SDM
Storydiagramm und Codegenerierung
15
Zusammenfassung
:A
:A
:B
:B
::=
:C
…
{
...
...
}
16
Vielen Dank.
Wenfeng Ruan
17