Upload
dietmar-anliker
View
103
Download
0
Embed Size (px)
Citation preview
Programmiermethodik SS2009 © 2009 Albert Zündorf, University of Kassel 1
3. Klassendiagramme in Java implementieren
Gliederung:
1. Einführung
2. Objektdiagramme zur Analyse von Beispielen
3. Klassendiagramme in Java implementieren
4. Methodenentwurf
5. Test-First Prinzip
6. Story Driven Modeling
7. Zusammenfassung
Programmiermethodik SS2009 © 2009 Albert Zündorf, University of Kassel 2
Motivation: rettet Prinz(essin) Ada
Aufgabe:
Wegesuche
Handicaps:
Räume kosten
genaue Geldmenge ausgeben
versteckte Geschenke
Fallen
. . .
Programmiermethodik SS2009 © 2009 Albert Zündorf, University of Kassel 3
Alternative Modellierungen
t3 :Tuerlocked = true
r2 :Raumkosten = 0
t5 :Tuerlocked = false
r6 :Raumkosten = 10
p1 :Personname = "Ada"
in
r4 :Raumkosten = 12
hat
hat
s7 :Schluessel
in
hat hat
oeffnet
Programmiermethodik SS2009 © 2009 Albert Zündorf, University of Kassel 4
Klassen als Baupläne für Objekte
Raumkosten : Integer
in
Geschenkname : String
in Tuerlocked : Boolean
Schluessel
in oeffnet
hat
hat
Person
name : Stringgeld : Integer
Programmiermethodik SS2009 © 2009 Albert Zündorf, University of Kassel 5
Klassendiagramme
"Syntax" von Klassendiagrammen:
kommt gleich
Semantik von Klassendiagrammen aus extensionaler Sicht:
Menge aller "gültigen" Objektdiagramme / Momentaufnahmen und Szenarios (siehe Verhaltensdiagramme)
ein Objektdiagramm / eine Momentaufnahme ist "gültig" wenn: alle verwendeten Klassen sind deklariert alle benutzten Attribute sind deklariert und werden typkonform verwendet für jeden Link gibt es eine Assoziation zwischen den entsprechenden
Klassen die Kardinialiätsangaben der Assoziationen werden nicht verletzt . . .
Programmiermethodik SS2009 © 2009 Albert Zündorf, University of Kassel 6
Implementierung:
public class Raum {
}
Raum
…
Raum r = new Raum ();…
r = new Raum ();…
:Raum
:Raum
Struktur
Daten Verhalten
Programmiermethodik SS2009 © 2009 Albert Zündorf, University of Kassel 7
Implementierung:
public class Raum {
…
public int kosten;
…}
Raum
kosten : Integer
…
if (r.kosten <= 0)
{
r.kosten = 12;
}
…
:Raum kosten = 5
:Raum kosten = -1
Struktur
Daten Verhalten
Programmiermethodik SS2009 © 2009 Albert Zündorf, University of Kassel 8
Implementierung:
public class Raum {
public void kassieren (Person p){
…}…
}
Raum
kassieren (p:Person)
…
r.kassieren (p);
…r.kassieren (p);…
:Raum kosten = 8
:Person geld = 50
:Raum kosten = 12
:Person geld = 100
Struktur
Daten Verhalten
Programmiermethodik SS2009 © 2009 Albert Zündorf, University of Kassel 9
Implementierung:
public class Schluessel {
Tuer tuer;
}
public class Tuer
{
Schluessel oeffner;
}
Schluesseloeffner 0..1
oeffnet
tuer 0..1
…t = new Tuer ();…t = new Tuer ();s = new Schluessel ();t.locked = true;
s.tuer = t;t.oeffner = s;…
Tuer
locked :Boolean
:Schluessel
:Tuer locked = false
Struktur
Daten Verhalten
:Tuer locked = false
Programmiermethodik SS2009 © 2009 Albert Zündorf, University of Kassel 10
Implementierung:
public class Schluessel {
Tuer tuer;
}
public class Tuer
{
Schluessel oeffner;
}
Schluesseloeffner 0..1
oeffnet
tuer 0..1
…if (t.locked){ Schluessel s = t.oeffner; if (s.besitzer == p) {…
Tuer
locked :Boolean
:Schluessel
:Tuer locked = false
Struktur
Daten Verhalten
:Tuer locked = false
oeffnet
Programmiermethodik SS2009 © 2009 Albert Zündorf, University of Kassel 11
Implementierung:
Person
Raum
gaeste 0..n
in
in 0..1
public class Person {
Raum in;}
import java.util.*;public class Raum{
List gaeste;}
…p.in = r;r.gaeste.add (p);…
p.in = r;r.gaeste.add (p);…
Struktur
Daten Verhalten
:Raum kosten = 8
:Raum kosten = 12
:Person geld = 50
:Person geld = 100
Programmiermethodik SS2009 © 2009 Albert Zündorf, University of Kassel 12
Implementierung:
Person
Raum
gaeste 0..n
in
in 0..1
public class Person {
Raum in;}
import java.util.*;public class Raum{
List gaeste;}
…for (Person p : r.gaeste ){ p.geld = p.geld – r.kosten;}…
Struktur
Daten Verhalten
:Raum kosten = 8
:Raum kosten = 12
:Person geld = 50
:Person geld = 100
in in
Programmiermethodik SS2009 © 2009 Albert Zündorf, University of Kassel 13
Rette Ada objektorientiert
Programmiermethodik SS2009 © 2009 Albert Zündorf, University of Kassel 14
Syntax von Klassendiagrammen (UML)
is_a
A B
association assocr1 r2
key
1..*1..2, 4
optionally with roles
exactly onemany (0 - n)
optional (0 - 1)
one or more
{ordered}
qualification
aggregation
ordering
A BD
link attrs
association as class:
B C
D
BA
C
r1 r2
r3
ternary (n-ary) association:
*0..1
«uses»
«friend»
{overlapping}
dependency
composition
navigability
dependencystereotypes
several intervals
unknown number1
refinement (generic instance)
assoc{sorted}
Programmiermethodik SS2009 © 2009 Albert Zündorf, University of Kassel 15
"Syntax" von Objektdiagrammen:
id1 :Class linkname
«Actor»id3 : Controller
attr1 : int == 10attr2 == value[state]
Klasse des Objekts
id2
:Class
Objektbezeichner
Objekt
Waisenobjekt
anonymes Objekst
Stereotyp / "Objektklass if ikation"(Stereotyp kann auch graphisch dargestellt werden)
id3 : Controller
attr1 : int == 10attr == value[state]
Attributwerte
Zustand
benannter Link
unbenannter Link
id1 :Classset1 :Class
Multiobjekt(Menge, Gruppe von Objekten)
Programmiermethodik SS2009 © 2009 Albert Zündorf, University of Kassel 16
Programmiermethodik SS2009 © 2009 Albert Zündorf, University of Kassel 17
Programmiermethodik SS2009 © 2009 Albert Zündorf, University of Kassel 18