+ All Categories
Home > Documents > Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 1 4. Design Gliederung: 1....

Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 1 4. Design Gliederung: 1....

Date post: 05-Apr-2015
Category:
Upload: baldewin-ede
View: 104 times
Download: 0 times
Share this document with a friend
23
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
Transcript
Page 1: Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 1 4. Design Gliederung: 1. Einführung 2. Anforderungsdefinition 3. Analyse 4. Design.

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

Page 2: Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 1 4. Design Gliederung: 1. Einführung 2. Anforderungsdefinition 3. Analyse 4. Design.

Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 2

Beispiel: Objektspiel Spielstein raussetzenMain Memory Objects Rule Diagram / Program

Page 3: Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 1 4. Design Gliederung: 1. Einführung 2. Anforderungsdefinition 3. Analyse 4. Design.

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

Page 4: Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 1 4. Design Gliederung: 1. Einführung 2. Anforderungsdefinition 3. Analyse 4. Design.

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

Page 5: Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 1 4. Design Gliederung: 1. Einführung 2. Anforderungsdefinition 3. Analyse 4. Design.

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

Page 6: Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 1 4. Design Gliederung: 1. Einführung 2. Anforderungsdefinition 3. Analyse 4. Design.

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 !

Page 7: Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 1 4. Design Gliederung: 1. Einführung 2. Anforderungsdefinition 3. Analyse 4. Design.

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

Page 8: Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 1 4. Design Gliederung: 1. Einführung 2. Anforderungsdefinition 3. Analyse 4. Design.

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 ();

}

}

}

Page 9: Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 1 4. Design Gliederung: 1. Einführung 2. Anforderungsdefinition 3. Analyse 4. Design.

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

Page 10: Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 1 4. Design Gliederung: 1. Einführung 2. Anforderungsdefinition 3. Analyse 4. Design.

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) { }

Page 11: Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 1 4. Design Gliederung: 1. Einführung 2. Anforderungsdefinition 3. Analyse 4. Design.

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() );

Page 12: Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 1 4. Design Gliederung: 1. Einführung 2. Anforderungsdefinition 3. Analyse 4. Design.

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))

Page 13: Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 1 4. Design Gliederung: 1. Einführung 2. Anforderungsdefinition 3. Analyse 4. Design.

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

Page 14: Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 1 4. Design Gliederung: 1. Einführung 2. Anforderungsdefinition 3. Analyse 4. Design.

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();

Page 15: Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 1 4. Design Gliederung: 1. Einführung 2. Anforderungsdefinition 3. Analyse 4. Design.

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 ()

Page 16: Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 1 4. Design Gliederung: 1. Einführung 2. Anforderungsdefinition 3. Analyse 4. Design.

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

Page 17: Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 1 4. Design Gliederung: 1. Einführung 2. Anforderungsdefinition 3. Analyse 4. Design.

Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 17

Rule Diagrams: for-each Activities

thisthis

looser

lostCounter

noPosnoPos noPos

lhome

at

Page 18: Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 1 4. Design Gliederung: 1. Einführung 2. Anforderungsdefinition 3. Analyse 4. Design.

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

Page 19: Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 1 4. Design Gliederung: 1. Einführung 2. Anforderungsdefinition 3. Analyse 4. Design.

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]

Page 20: Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 1 4. Design Gliederung: 1. Einführung 2. Anforderungsdefinition 3. Analyse 4. Design.

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]

Page 21: Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 1 4. Design Gliederung: 1. Einführung 2. Anforderungsdefinition 3. Analyse 4. Design.

Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 21

Page 22: Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 1 4. Design Gliederung: 1. Einführung 2. Anforderungsdefinition 3. Analyse 4. Design.

Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 22

Page 23: Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 1 4. Design Gliederung: 1. Einführung 2. Anforderungsdefinition 3. Analyse 4. Design.

Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 23


Recommended