Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Annemarie Hellweg Geändert vor über 11 Jahren
1
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 1 4. Design Gliederung: 1. Einführung 2. Anforderungsdefinition 3. Analyse 4. Design <== l Klassendiagramme l Story Diagramme l Zetteltests 5. Validierung 6. Zusammenfassung
2
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 2 Implementierung von Objektdiagrammen Ziel: Programm m Daten m Verhalten Für alle Objekte m Schablonen für Objekte m Zugriff auf Attribute m Bereitstellung von Links Klassen m gleichartige Objekte gemeinsame Klassen Step 2: Der Spielstein macht einen Schritt. Zwei bleiben. tom theDie s1 f3 f4 :Field v == 3 stones at next die «destroy» «create» 1: moveOneStep() 2: steps := 2
3
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 3 Projekthandbuch Beispiel 5. Design (Produktdaten): Klassendiagramm(e) des Projekts: m Klassen für alle Objektarten m Attributdeklarationen m Assoziationen m Methodendeklarationen ….. 5. Design (Produktdaten)
4
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 4 Projekthandbuch Beispiel Systematische Ableitung aus Story Boards: l ordne jedem Objekt vorhandenen oder neuen Typ zu. l für jede Attributverwendung Deklaration in entsprechender Klasse l für jeden Link entsprechende Assoziation l für jede Nachricht entsprechende Methodendeklaration tom theDie s1 f3 f4 :Field v == 3 stones at next die «destroy» «create»
5
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 5 Klassendiagramme "Syntax" von Klassendiagrammen: m kommt gleich Semantik von Klassendiagrammen aus extensionaler Sicht: m Menge aller "gültigen" Objektdiagramme / Momentaufnahmen und Szenarios (siehe Verhaltensdiagramme) ein Objektdiagramm / eine Momentaufnahme ist "gültig" wenn: l alle verwendeten Klassen sind deklariert l alle benutzten Attribute sind deklariert und werden typkonform verwendet l für jeden Link gibt es eine Assoziation zwischen den entsprechenden Klassen l die Kardinialiätsangaben der Assoziationen werden nicht verletzt l...
6
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 6 Klassendiagramme aus Implementierungssicht: public class Student { public void removeYou() { // kill all links } } Student Student s1 = new Student; … s1.removeYou();
7
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 7 Klassendiagramme aus Implementierungssicht: public class Student { … private String haarfarbe; public String getHaarfarbe() { return this.haarfarbe; } public void setHaarfarbe(String value){ this.haarfarbe = value; } … } Student haarfarbe:String String f = s1.getHaarFarbe(); … s1.setHaarFarbe(green);
8
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 8 Klassendiagramme aus Implementierungssicht: public class Student { … public void lese(String buch){ // todo } … } Student lese(String buch) … s1.lese(Harry Potter); …
9
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 9 Klassendiagramme aus Implementierungssicht: public class Student { private Sitz platz; public Sitz getPlatz() { return this.platz; } public void setPlatz(Sitz value){ if (this.platz != value) { if (this.platz != null) { Sitz oldPlatz = this.platz; this.platz = null; oldPlatz.setBesetzer(null); } this.platz = value; if (this.platz != null) { this.platz.setBesetzer (this); }}}} Student Sitz besetzer 0..1 hat platz 0..1
10
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 10 Klassendiagramme aus Implementierungssicht: public class Sitz { private Student besetzer; public Student getBesetzer() { return this.besetzer; } public void setBesetzer (Student value){ if (this.besetzer != value) { if (this.besetzer != null) { Sitz oldBesetzer = this.besetzer; this.besetzer = null; oldBesetzer.setPlatz(null); } this.besetzer = value; if (this.besetzer != null) { this.besetzer.setPlatz (this); }}}} Student Sitz besetzer 0..1 hat platz 0..1
11
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 11 Klassendiagramme aus Implementierungssicht: Student Sitz besetzer 0..1 hat platz 0..1 … Sitz pos = s1.getPlatz(); … s1.setPlatz (sitz2); …
12
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 12 Klassendiagramme aus Implementierungssicht: Prof Tafel user 0..1 nutzt boards 0..n public class Prof { private HashSet boards = new FHashSet(); public boolean hasInBoards(Tafel value) { return this.boards.contains (value); } public int sizeOfBoards () { return this.boards.size(); } public Iterator iteratorOfBoards () { return this.boards.iterator(); } }
13
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 13 Klassendiagramme aus Implementierungssicht: Prof Tafel user 0..1 nutzt boards 0..n boolean flag = albert.hasInBoards (linkeTafel); int no = albert.sizeOfBoards(); Iterator iter = albert.iteratorOfBoards(); while (iter.hasNext()) { Tafel current = (Tafel) iter.next(); }
14
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 14 Klassendiagramme aus Implementierungssicht: Prof Tafel user 0..1 nutzt boards 0..n public class Prof { private HashSet boards = new FHashSet(); … public void addToBoards (Tafel value) { if ( value != null && ! this.hasInBoards (value)) { this.boards.put (value); value.setUser (this); }} public void removeFromBoards (Tafel value) { if (value != null && this.hasInBoards (value) { this.boards.remove (value); value.setUser (null); }} }
15
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 15 Klassendiagramme aus Implementierungssicht: Prof Tafel user 0..1 nutzt boards 0..n … albert.addToBoards (tafel1); albert.addToBoards (tafel2); albert.removeFromBoards (tafel0); …
16
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 16 Klassendiagramme aus Implementierungssicht: Person Student … Person p1 = new Student (); … public class Student extends Person { … }
17
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 17 Syntax von Klassendiagrammen (UML 1)
18
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 18 Generierung von JUnit Tests: m Scenarios JUnit Tests, start situation setup code Start Situation: Tom rolled a 3 and selects counter 1 for moving theDie :Die f2 :Field v == 3 stones at next die f3 :Field next f4 :Field next class TestMoveUsual implements TestCase { private Player tom; private Die theDie; private Stone stone1;... void setUp () { tom = new Player (); theDie = new Die (); theDie.setV (3) tom.setDie (theDie); stone1 = new Stone (); tom.addToStones (stone1);... tom :Player stone1 :Stone f1 :Field tom theDie stone1 f2 f1 f3 f4 :TestMoveUsual
19
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 19 Generierung von JUnit Tests: m Scenarios JUnit Tests, start situation setup code Invocation: stone 1 is moved class TestMoveUsual implements TestCase {... void testMoveUsual () { this.stone1.move();... stone1 1: move ()
20
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 20 Generierung von JUnit Tests: m result situation check object modifications class TestMoveUsual implements TestCase { void testMoveUsual () { this.stone1.move(); assertTrue (tom.getDie() == theDie); assertTrue (theDie.getV() == 0); assertTrue (stone1.getPlayer () == tom); assertTrue (stone1.getAt () == f4); } Result Situation: the die is counted down to zero and stone 1 reached field 4 tom theDie stone1 f4 v == 0 stones at die
21
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 21
22
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 22
23
Programmiermethodik SS2006 © 2005 Albert Zündorf, University of Kassel 23
Ähnliche Präsentationen
© 2025 SlidePlayer.org Inc.
All rights reserved.