Date post: | 05-Apr-2015 |
Category: |
Documents |
Upload: | baldewin-ede |
View: | 104 times |
Download: | 0 times |
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 1
4. Design
Gliederung:
1. Einführung
2. Anforderungsdefinition
3. Analyse
4. Design Klassendiagramme Regel-Diagramme <== Zetteltests
5. Validierung
6. Zusammenfassung
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 2
Beispiel: Objektspiel Spielstein raussetzenMain Memory Objects Rule Diagram / Program
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 3
The FAMous Fujaba Abstract Machine (Teil 1)Der Befehlssatz:
in den Objekten werden Kommandos / Nachrichten von vergesslichen „Object Guys“ abgearbeitet
Object Guys schlafen normaler weise
beim Aufwachen wird die Umgebung wird vom „Nebel des Vergessens“ verschleiert
Object Guys sehen nicht was die anderen tun
Jeder Object Guy hat eigenen „Namensraums“
Object Guy hat „Handlungsanweisungen“ für jedes mögliche Komando
Immer ein Object Guy pro Nachricht
Object Guy kann: Kanten lesen und lokale
Namen für Nachbarn vergeben
Attribute lesen und prüfen temporäre Werte notieren Berechnungen durchführen Nachrichten verschicken
(wartet (untätig) auf Antwort) Antworten zurückschicken
(und wieder einschlafen) Attribute schreiben Kanten löschen / erzeugen Objekte löschen / erzeugen
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 4
Rule Diagrams: graphische Notation für Befehle der Fujaba Abstract Machine
Main Memory Objects Rule Diagram / Program
1. benenne this
2. lese gehoert Link; benenne meinSp
3. lese hat; benenne seinWuerfel
4. prüfe augenzahl == 6
5. lese ist_Startfeld_von, benenne seinStart
6. lese steht_in; benenne meinHeim
7. lösche ist_Startfeld_von
8. erzeuge steht_auf
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 5
Fujaba Abstract Machine Teil 2: ZetteltestMain Memory Objects Rule Diagram / Program
meinSp
seinWuerfel
seinStartsteht auf
this meinHeim
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 6
Rule Diagram Syntax:
benennen Objektkasten:
class Spielstein { ...public void raussetzen () {
Heimatfeld meinHeim = null;Spieler meinSp = null;Feld seinStart = null;Wuerfel seinWuerfel = null;
. . .
benennen: Objekttyp mit angebenungebundene Objekte werden zu gebundenen Objekten,unbekannte Objekte werden bekannt
Namen benutzen: ohne Objekttyp
ACHTUNG:
bei [failure] des Vorgängerschritts wurden eventuell nicht alle Variablen gebunden !
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 7
Rule Diagram Syntax:
lese Link Link: bei zu-1 Links von bekanntem Objekt zu
unbekanntem Objekt- get-Methode verwenden- Erfolg prüfen:
meinSp = this.getGehoert (); if (meinSp != null) { .... oder
try { ...meinSp = this.getGehoert (); JavaSDM.ensure ( meinSp != null );...
} catch (SDMException e) { sdmSuccess = false }
... danach ist der Name zugewiesen
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 8
Hilfsmethode JavaSDM.ensure
class JavaSDM
{
public static void ensure (boolean expr)
{
if (expr == false)
{
throw new SDMException ();
}
}
}
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 9
Rule Diagram Syntax:
lese Link Link: bei zu-n Links von bekanntem Objekt zu
unbekanntem Objekt- iteratorOf-Methode verwenden- while Schleife bis zum Erfolg:
sdmSuccess = false;...
Iterator iter = meinSp.iteratorOfSteine (); while ( !(sdmSuccess) && iter.hasNext
() ){
try { stein2 = (Spielstein) iter.next ();JavaSDM.ensure ... // prüfen ob es der richtige istsdmSuccess = true;
}catch (SDMException e) { }
} // while
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 10
Rule Diagram Syntax:
prüfe Attributwert Attributbedingung:
sdmSuccess = false;...try {
...seinWuerfel = meinSp.getHat ();JavaSDM.ensure ( seinWuerfel != null);JavaSDM.ensure (
seinWuerfel.getAugenzahl == 6);...
} catch (SDMException e) { }
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 11
Rule Diagram Syntax:
prüfe Link zwischen gebundenen (schon benannten) Objekten Link:
Link zwischen gebundenen Objekten:
JavaSDM.ensure ( meinSp.getHat () == seinWuerfel);
oder bei zu-n Link:
JavaSDM.ensure ( x.hasInNeighbours (y));
prüfe allgemeinen Constraint: Prüfung
JavaSDM.ensure ( meinSp.noOfSteine() < w.getAugenzahl() );
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 12
Rule Diagram Syntax:
prüfe kein Nachbar da negatives Objekt:
kollege = seinStart.getBewohner();
JavaSDM.ensure (
! (kollege.getGehoert() == meinSp))
prüfe kein Link da negativer Link:
JavaSDM.ensure ( (x.getGehört() != meinSp))
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 13
Rule Diagram Syntax:
benenne wenn möglich optionales Objekt:
lese/prüfe Link wenn möglich optionaler Link:
benenne alle Nachbarn Mengenobjekt :
x :C
x :C1 y :C2next >
others :C3
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 14
Rule Diagram Syntax:
loesche Objekt <<destroy>>:gegener.removeYou()
loesche Link <<destroy>>:this.setStehtIn (null);
erzeuge Objekt <<create>>:neuStein = new SpielStein ();
erzeuge Link <<create>>:this.setStehtAuf (seinStart);
setze Attributwert augenzahl := 0:w.setAugenzahl (0);
nachricht m1() 1: m1()meinSp.naechsterSpieler();
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 15
Rule Syntax: Overview
v : Class
v
v
v : ClassVariables:
v : Class v : Class v : Class«create» «create»
v
v : Class v : Class«create»
v«create»
v : Classv : Class v : Classv : Class v : Classv v : Classv
Attributes: . ..
attr <cmpOp> value
attr := value
Constrains:
{ <boolExpr> }
Links:assoc
ref
...
assoc[<key>]
«create» «create»
«create»
vv : Class
{first} {last}
«destroy»
«destroy»
«destroy» «destroy»
«destroy»
«destroy»
«destroy» 1: m () 2 [x>0]: m () 2.1 [while x>0]: m ()
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 16
Rule Diagrams: Kontrollfluss
Activities
start activity
stop activities
rule acitivities
code activities
branch activities
Transitionen ohne Guard [success] [failure] [boolean condition] [else]
http://www.se.eecs.uni-kassel.de/se/fileadmin/se/courses/MSE/download/fujaba/FujabaTutorialStoryDrivenModeling.ppt
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 17
Rule Diagrams: for-each Activities
thisthis
looser
lostCounter
noPosnoPos noPos
lhome
at
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 18
Rule Diagrams: for-each Activitiesclass Game { public void collectThrownCounters () { . . . Iterator looserIter = this.iteratorOfPlayers();while (!sdmSuccess && looserIter.hasNext()) {
try {sdmSuccess = false;looser = looserIter.next ();lhome = looser.getHome ();JavaSDM.ensure (lhome != null);countersIter = looser.iteratorOfCounters ();while (!sdmSuccess && countersIter.hasNext()) {
try {lostCounter = countersIter.next ();JavaSDM.ensure (lostCounter.getAt() == null);sdmSuccess = true;lostCounter.setAt (lhome);} catch (SDMException e) {}
} // while } catch (SDMException e) {}
} // while
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 19
Rule Diagrams: for-each Activities
doppelte Activity Box
anwenden so oft wie möglich
[each time] transition für zusätzliche Aktionen für jeden Match
[end] transition nach Abbruch
[end]
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 20
Rule Diagrams: for-each Activitiesclass Game { public void collectThrownCounters () { . . . Iterator looserIter = this.iteratorOfPlayers();while (!sdmSuccess && looserIter.hasNext()) {
try {sdmSuccess = false;looser = looserIter.next ();lhome = looser.getHome ();JavaSDM.ensure (lhome != null);countersIter = looser.iteratorOfCounters ();while (!sdmSuccess && countersIter.hasNext()) {
try {lostCounter = countersIter.next ();JavaSDM.ensure (lostCounter.getAt() == null);sdmSuccess = true;lostCounter.setAt (lhome);} catch (SDMException e) {}
} // while } catch (SDMException e) {}
} // while[end]
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 21
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 22
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 23