Analyse-Klassendiagramm - Datenbank- und Informationssysteme ...
Analyse-Klassendiagramm - Datenbank- und Informationssysteme ...
Analyse-Klassendiagramm - Datenbank- und Informationssysteme ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Softwareentwurf<br />
Kapitel III: <strong>Analyse</strong><br />
III.3 Entwicklung des <strong>Analyse</strong>-<br />
<strong>Klassendiagramm</strong>s<br />
Christian Soltenborn<br />
AG <strong>Datenbank</strong>- <strong>und</strong> <strong>Informationssysteme</strong>
Schon wieder <strong>Klassendiagramm</strong>e?<br />
Hilfe!<br />
Sind das jetzt andere?<br />
Wir haben die Übersicht verloren!<br />
So, <strong>und</strong> jetzt kommen<br />
wir zu den <strong>Analyse</strong>-<br />
<strong>Klassendiagramm</strong>en<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 2
ok, dann noch mal das<br />
große Bild...<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 3
Problem<br />
Pflichtenheft<br />
Problem<br />
System<br />
Genereller Überblick über die Beziehungen<br />
der Dokumente etc.?<br />
Ziele<br />
Beschreibung des<br />
Problembereichs<br />
Modell des<br />
Problembereichs<br />
Geschäftsfeld<br />
Struktur Verhalten<br />
Produktfunktionen<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 4<br />
1.<br />
1.<br />
2.<br />
2.<br />
3.<br />
3.
Problem<br />
Pflichtenheft<br />
Problem<br />
System<br />
Präzisierung der<br />
Strukturbeschreibung<br />
Genereller Überblick über die Beziehungen<br />
der Dokumente etc.?<br />
Ziele<br />
Beschreibung des<br />
Problembereichs<br />
Präzisierung der<br />
Ablaufbeschreibung<br />
Aufgaben des zu<br />
entwickelnden Systems<br />
festlegen<br />
Modell des<br />
Problembereichs<br />
Geschäftsfeld<br />
Struktur Verhalten<br />
Produktfunktionen<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 5<br />
1.<br />
1.<br />
2.<br />
2.<br />
3.<br />
3.
Problem<br />
Pflichtenheft<br />
Problem<br />
System<br />
<strong>Analyse</strong>dokument<br />
Genereller Überblick über die Beziehungen<br />
der Dokumente etc.?<br />
Ziele<br />
Beschreibung des<br />
Problembereichs<br />
Kann ich größere<br />
Strukturen<br />
identifizieren?<br />
Architektur<br />
Modell des<br />
Problembereichs<br />
Geschäftsfeld<br />
Struktur Verhalten<br />
Produktfunktionen<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 6<br />
1.<br />
1.<br />
2.<br />
2.<br />
3.<br />
3.<br />
<strong>Analyse</strong>-Sequenzdiagramm
Problem<br />
Pflichtenheft<br />
Problem<br />
System<br />
<strong>Analyse</strong>dokument<br />
Genereller Überblick über die Beziehungen<br />
der Dokumente etc.?<br />
Ziele<br />
Beschreibung des<br />
Problembereichs<br />
Welche Klassentypen<br />
(Stereotype) benötige ich?<br />
[bo<strong>und</strong>ary, control, entity]<br />
Architektur<br />
Modell des<br />
Problembereichs<br />
Geschäftsfeld<br />
Struktur Verhalten<br />
Produktfunktionen<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 7<br />
1.<br />
1.<br />
2.<br />
2.<br />
3.<br />
3.<br />
<strong>Analyse</strong>-Sequenzdiagramm
Problem<br />
Pflichtenheft<br />
Problem<br />
System<br />
<strong>Analyse</strong>dokument<br />
Genereller Überblick über die Beziehungen<br />
der Dokumente etc.?<br />
Ziele<br />
Beschreibung des<br />
Problembereichs<br />
Gr<strong>und</strong>lage für<br />
Gegenstandsklassen<br />
Szenarien -> <strong>Analyse</strong>-SD<br />
Use-Cases -> Kontrollklassen<br />
Aktoren -> Übergangsklassen<br />
Architektur<br />
Modell des<br />
Problembereichs<br />
Geschäftsfeld<br />
Struktur Verhalten<br />
Produktfunktionen<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 8<br />
1.<br />
1.<br />
2.<br />
2.<br />
3.<br />
3.<br />
<strong>Analyse</strong>-Sequenzdiagramm
Gut, wir haben jetzt eine<br />
Tonne Sequenzdiagramme.<br />
Ist das nicht ganz schön<br />
unübersichtlich?<br />
Deswegen sammeln wir<br />
die Informationen im<br />
<strong>Analyse</strong>-<br />
<strong>Klassendiagramm</strong><br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 9
III. 1 Architektur festlegen<br />
-> Architektur<br />
III. 2 Anforderungen analysieren<br />
-> <strong>Analyse</strong>-Sequenzdiagramme<br />
III.3 Ergebnisse synthetisieren<br />
-> <strong>Analyse</strong>-<strong>Klassendiagramm</strong><br />
Übersicht <strong>Analyse</strong><br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 10
Synthese der <strong>Analyse</strong>-Ergebnisse<br />
Probleme bei der Vielzahl an Sequenzdiagrammen:<br />
Viele Objekte (<strong>und</strong> ihre Typen) wurden gef<strong>und</strong>en<br />
Objekte derselben Klasse kommen an ganz unterschiedlichen Punkten vor<br />
Aufrufe auf Objekten wurden gef<strong>und</strong>en, sind diese einheitlich benutzt?<br />
Manche Klassen wurden aus dem MdP abgeleitet, was ist mit den<br />
Strukturen (Assoziationen) des MdP?<br />
Synthese zum <strong>Analyse</strong>-<strong>Klassendiagramm</strong> soll diese Probleme lösen:<br />
Zusammenfassen von vielen Objektinformationen zu einer Klasse<br />
Zusammenfassen aller Operationen <strong>und</strong> Eigenschaften einer Klasse<br />
Festlegen der Beziehungen zwischen den Klassen<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 11
Sequenzdiagramme -> <strong>Klassendiagramm</strong>e<br />
Großer Sprung<br />
Wenig Raum für Erläuterungen/Begründungen<br />
Vorgehen bei der Synthese<br />
Sequenzdiagramme -> <strong>Analyse</strong>-Tabellen -> <strong>Klassendiagramm</strong>e<br />
Tabellen sammeln Informationen zu Klassen aus Sequenzdiagrammen ein<br />
Tabellen bieten Raum, unterschiedliche Informationen aus verschiedenen<br />
Sequenzdiagrammen zu vergleichen <strong>und</strong> zu integrieren<br />
Tabellen haben Platz, um auch Erläuterungen aufzunehmen<br />
Wenn die Tabellen fertig sind, kann man aus ihnen ein <strong>Analyse</strong>-<br />
<strong>Klassendiagramm</strong> ableiten<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 12
Struktur der <strong>Analyse</strong>-Tabellen<br />
Klasse Aufgaben Attribute Kennt<br />
(dauerhaft?)<br />
Welche Klassen<br />
haben wir <strong>und</strong><br />
welche<br />
Stereotypen<br />
haben diese?<br />
Welche<br />
Aufgaben<br />
erledigen diese<br />
Klassen?<br />
Welche Daten<br />
kennen diese<br />
Klassen?<br />
Welche anderen<br />
Klassen kennt<br />
diese Klasse?<br />
Ist diese<br />
Kenntnis<br />
dauerhaft?<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 13
<strong>Analyse</strong>-Tabellen<br />
Klasse<br />
Jedes Objekt in den <strong>Analyse</strong>-Sequenzdiagrammen hat einen Typ (Klasse).<br />
Alle diese Klassen werden in der <strong>Analyse</strong>-Tabelle gesammelt<br />
Klasse Aufgaben Attribute Kennt<br />
(dauerhaft?)<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 14
Verfeinerung ins System hinein<br />
starteKV()<br />
:GUI<br />
starteKV()<br />
:SysStrg<br />
gib nächsten()<br />
kv1<br />
:KV<br />
new KVStrg()<br />
Vom Sequenzdiagramm<br />
zur <strong>Analyse</strong>-Tabelle<br />
kv1:KV<br />
kommissioniere (kv1)<br />
Klassen einsammeln<br />
:KVStrg<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 15
<strong>Analyse</strong>-Tabellen<br />
Klasse<br />
Klasse Aufgaben Attribute Kennt<br />
(dauerhaft?)<br />
GUI<br />
SysStrg<br />
KV Verwaltung<br />
KV<br />
KVStrg<br />
Achten auf ähnliche Namen (KVstr, KVStrg), ist dasselbe gemeint?<br />
Achten auf gleiche Namen (KV, KV), sind verschiedene Dinge gemeint?<br />
Multiobjekt umgesetzt als KV Verwaltung<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 16
<strong>Analyse</strong>-Tabellen<br />
Aufgaben<br />
Objekte erhalten Nachrichten, bestimmte Aufgaben zu erledigen.<br />
Für jeden (verschiedenen) Aufruf wird in der Spalte Aufgaben ein<br />
Eintrag bei der entsprechenden Klasse angelegt<br />
Klasse Aufgaben Attribute Kennt<br />
(dauerhaft?)<br />
GUI<br />
SysStrg<br />
KV Verwaltung<br />
KV<br />
KVStrg<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 17
Verfeinerung ins System hinein<br />
starteKV()<br />
:GUI<br />
starteKV()<br />
:SysStrg<br />
gib nächsten()<br />
kv1<br />
:KV<br />
new KVStrg()<br />
Vom Sequenzdiagramm<br />
zur <strong>Analyse</strong>-Tabelle<br />
kv1:KV<br />
kommissioniere (kv1)<br />
:KVStrg<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 18
Aufgaben werden mit einem Kommentar beschrieben.<br />
<strong>Analyse</strong>-Tabellen<br />
Aufgaben<br />
Klasse Aufgaben Attribute Kennt<br />
(dauerhaft?)<br />
SysStrg starteKV()<br />
löst die Bearbeitung<br />
eines Kommissioniervorganges<br />
aus<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 19
<strong>Analyse</strong> von „Los kommissionieren“<br />
:LosStrg l1:Los<br />
gib Lagerfach()<br />
fa<br />
gib anzahl()<br />
12<br />
gib Lagerfach()<br />
fa<br />
:Ware<br />
steuere an Fach Anzahl(fa,12)<br />
fa:Lagerfach<br />
Vom Sequenzdiagramm<br />
zur <strong>Analyse</strong>-Tabelle<br />
fe:Lagerfeld<br />
gib Lagerfeld()<br />
fe<br />
gib ID()<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 20<br />
1<br />
gib ID()<br />
16<br />
:DHCStrg<br />
steuereAn<br />
FeldFachAnz<br />
(16,1,12)
Parameter werden mit ihren Datentypen angegeben<br />
<strong>Analyse</strong>-Tabellen<br />
Aufgaben<br />
Klasse Aufgaben Attribute Kennt<br />
(dauerhaft?)<br />
DHCStrg steuere an Fach Anzahl<br />
(Lagerfach, Integer)<br />
steuert das DHC so, dass<br />
das übergebene Lagerfach<br />
zugänglich ist <strong>und</strong> die<br />
übergebene Anzahl auf dem<br />
Display angezeigt wird<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 21
<strong>Analyse</strong> von „KV kommissionieren“<br />
:GUI :KVStrg kv1:KV<br />
zeige Anzahl<br />
Aufträge(3)<br />
gib Anzahl<br />
Aufträge()<br />
3<br />
new Schedule (kv1)<br />
gib nächstes Los ()<br />
l1<br />
new LosStrg()<br />
kommissioniere (l1)<br />
gib nächstes Los ()<br />
…<br />
s:Schedule<br />
Vom Sequenzdiagramm<br />
zur <strong>Analyse</strong>-Tabelle<br />
l1:Los<br />
:LosStrg<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 22
Rückgabewerte werden mit ihren Datentypen nach einem<br />
Doppelpunkt angegeben<br />
<strong>Analyse</strong>-Tabellen<br />
Aufgaben<br />
Klasse Aufgaben Attribute Kennt<br />
(dauerhaft?)<br />
KV gib Anzahl Aufträge():Integer<br />
gibt die Anzahl der Aufträge<br />
im Kommissioniervorgang<br />
zurück<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 23
<strong>Analyse</strong>-Tabellen<br />
Aufgaben<br />
Gibt es mehrere identische Aufgaben einer Klasse mit unterschiedlichen<br />
Namen? -> Integrieren<br />
Klasse Aufgaben Attribute Kennt<br />
(dauerhaft?)<br />
KV gib Anzahl Aufträge():Integer<br />
gibt die Anzahl der Aufträge<br />
im Kommissioniervorgang<br />
zurück<br />
gib Aufträge():Integer<br />
gibt die Anzahl der Aufträge<br />
im Kommissioniervorgang<br />
zurück<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 24
<strong>Analyse</strong>-Tabellen<br />
Attribute<br />
Manche Aufgaben erledigen Objekte ohne Rückfrage bei anderen. Für<br />
diese Aufgaben können sie datenwertige Attribute benötigen, die<br />
auch über den Aufruf einer Methode hinaus zur Verfügung stehen.<br />
Klasse Aufgaben Attribute Kennt<br />
(dauerhaft?)<br />
KV<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 25
<strong>Analyse</strong> von „KV kommissionieren“<br />
:GUI :KVStrg kv1:KV<br />
zeige Anzahl<br />
Aufträge(3)<br />
gib Anzahl<br />
Aufträge()<br />
3<br />
new Schedule (kv1)<br />
gib nächstes Los ()<br />
l1<br />
new LosStrg()<br />
kommissioniere (l1)<br />
gib nächstes Los ()<br />
…<br />
Vom Sequenzdiagramm<br />
zur <strong>Analyse</strong>-Tabelle<br />
s:Schedule<br />
l1:Los<br />
:LosStrg<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 26
Attribute mit Name:Datentyp <strong>und</strong> Beschreibung eintragen<br />
<strong>Analyse</strong>-Tabellen<br />
Attribute<br />
Klasse Aufgaben Attribute Kennt<br />
(dauerhaft?)<br />
KV Anzahl Aufträge:Integer<br />
Die Anzahl der im<br />
Kommissioniervorgang<br />
enthaltenen Aufträge<br />
Attribute treten bei fast allen Entity-Klassen auf<br />
Control-Klassen haben wenig oder gar keine Attribute<br />
Bo<strong>und</strong>ary-Klassen haben häufig Zustands-Attribute<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 27
<strong>Analyse</strong>-Tabellen<br />
Lokale Bekanntheit<br />
Objekte haben Kenntnisse über ihre Umgebung. Diese werden in die<br />
Spalte Lokale Bekanntheit (oder kurz: Kennt) eingetragen<br />
Klasse Aufgaben Attribute Kennt<br />
(dauerhaft?)<br />
SysStrg<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 28
Wann kennt ein Objekt ein anderes?<br />
Wenn es aktiv mit diesem kommuniziert<br />
Wenn es dieses Objekt erzeugt<br />
Wenn es Referenzen auf dieses Objekt weitergibt<br />
<strong>Analyse</strong>-Tabellen<br />
Lokale Bekanntheit<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 29
starteKV()<br />
:GUI<br />
SysStrg kennt die<br />
KVStrg, weil es<br />
diese erzeugt<br />
starteKV()<br />
SysStrg kennt das Objekt<br />
kv1:KV (<strong>und</strong> damit die<br />
Klasse KV), weil es<br />
Referenzen auf dieses<br />
Objekt weitergibt<br />
:SysStrg<br />
gib nächsten()<br />
kv1<br />
:KV<br />
Vom Sequenzdiagramm<br />
zur <strong>Analyse</strong>-Tabelle<br />
kv1:KV<br />
SysStrg kennt die KV Verwaltung,<br />
weil es mit dieser kommuniziert<br />
KV Verwaltung kennt SysStrg nicht!<br />
(nur Antwort, keine aktive Kommunikation)<br />
kommissioniere (kv1)<br />
:KVStrg<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 30
Wann kennt ein Objekt ein anderes?<br />
Wenn es aktiv mit diesem kommuniziert<br />
Wenn es dieses Objekt erzeugt<br />
Wenn es Referenzen auf dieses Objekt weitergibt<br />
Wie kann Bekanntheit entstehen?<br />
Selbsterzeugen von Objekten<br />
Übergabe als Parameter<br />
Übergabe als Antwort<br />
<strong>Analyse</strong>-Tabellen<br />
Lokale Bekanntheit<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 31
Verfeinerung ins System hinein<br />
starteKV()<br />
:GUI<br />
SysStrg kennt die<br />
KVStrg, weil es<br />
diese erzeugt<br />
starteKV()<br />
KVStrg kennt das<br />
Objekt kv1:KV, weil es<br />
dieses als Parameter<br />
bekommt<br />
:SysStrg<br />
gib nächsten()<br />
kv1<br />
:KV<br />
Vom Sequenzdiagramm<br />
zur <strong>Analyse</strong>-Tabelle<br />
kv1:KV<br />
SysStrg kennt kv1:KV, weil es dieses<br />
als Antwort bekommt<br />
kommissioniere (kv1)<br />
:KVStrg<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 32
Wann kennt ein Objekt ein anderes?<br />
Wenn es aktiv mit diesem kommuniziert<br />
Wenn es dieses Objekt erzeugt<br />
Wenn es Referenzen auf dieses Objekt weitergibt<br />
Wie kann Bekanntheit entstehen?<br />
Selbsterzeugen von Objekten<br />
Übergabe als Parameter<br />
Übergabe als Antwort<br />
Was ist dauerhafte Bekanntheit<br />
<strong>Analyse</strong>-Tabellen<br />
Lokale Bekanntheit<br />
Ein Objekt kennt ein anderes über die Ausführung einer Methode<br />
hinaus<br />
-> lokale Speicherung der Objektidentität<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 33
Verfeinerung ins System hinein<br />
starteKV()<br />
:GUI<br />
starteKV()<br />
Ob SysStrg KV dauerhaft<br />
kennt, können wir hier<br />
nicht beurteilen, da wir<br />
nur eine Methode von<br />
SysStrg sehen<br />
Dies gilt auch für KVStrg:<br />
hier wird das Objekt zwar<br />
gelöscht, es könnte aber<br />
andere Methoden geben, die<br />
dauerhafte Speicherung<br />
implizieren!<br />
:SysStrg<br />
gib nächsten()<br />
kv1<br />
:KV<br />
Vom Sequenzdiagramm<br />
zur <strong>Analyse</strong>-Tabelle<br />
kv1:KV<br />
SysStrg kennt KV Verwaltung dauerhaft, weil es<br />
dieses Objekt nicht im Laufe der Methode<br />
starteKV() kennengelernt hat<br />
kommissioniere (kv1)<br />
:KVStrg<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 36
<strong>Analyse</strong>-Tabellen<br />
Lokale Bekanntheit<br />
Einträge in der Spalte „Kennt“ mit Klassennamen <strong>und</strong> der Angabe der<br />
Dauerhaftigkeit (soweit schon bestimmbar)<br />
Klasse Aufgaben Attribute Kennt (dauerhaft?)<br />
SysStrg KV Verwaltung (ja)<br />
KV (?)<br />
KVStrg (?)<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 37
<strong>Analyse</strong>-Tabellen<br />
Bestimmung der lokalen Bekanntheit<br />
An einem <strong>Analyse</strong> Sequenzdiagramm kann man<br />
erkennen<br />
Welche Klassen eine Klasse kennt (Achtung: Abstraktion von<br />
Objekten!)<br />
Ob eine Bekanntschaft dauerhaft ist (wenn die Bekanntschaft nicht<br />
innerhalb derselben Methode hergestellt wurde)<br />
An allen <strong>Analyse</strong>-Sequenzdiagrammen kann man<br />
erkennen<br />
Ob Bekanntschaften nicht dauerhaft sind (Bekanntschaft wird<br />
immer innerhalb derselben Methode hergestellt)<br />
⇒ Normalerweise werden wir nur "ja" <strong>und</strong> "?" bei dauerhaft benutzen können!<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 38
Gr<strong>und</strong>sätzlicher Pattern für dauerhafte Bekanntheit<br />
:A :B<br />
:X<br />
:Y<br />
:Z<br />
set C(c)<br />
foo<br />
bar<br />
baz<br />
<strong>Analyse</strong>-Tabellen<br />
Lokale Bekanntheit<br />
Dauerhafte Bekanntheit: Einmal bekannt machen, dann immer auf die<br />
Bekanntheit zurückgreifen<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 39<br />
foo2<br />
bar2<br />
baz2<br />
c:C
<strong>Analyse</strong>-Tabellen<br />
Lokale Bekanntheit<br />
Gr<strong>und</strong>sätzlicher Pattern für nicht dauerhafte Bekanntheit<br />
:A :B<br />
:X<br />
:Y<br />
foo(c)<br />
bar(c)<br />
baz(c)<br />
…<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 40<br />
…<br />
Nicht dauerhafte Bekanntheit: Das entsprechende Objekt muss jedesmal<br />
übergeben/erfragt werden<br />
foo2<br />
bar2<br />
baz2<br />
c:C
<strong>Analyse</strong>-Tabellen<br />
Lokale Bekanntheit<br />
Was ist, wenn keins der beiden Pattern erfüllt ist?<br />
Objekte werden mehrfach miteinander bekannt gemacht, obwohl<br />
sie bereits als dauerhaft bekannt gelten<br />
Inkonsistente Modellierung<br />
Einheitliche Entscheidung: Dauerhafte Bekanntschaft oder nicht<br />
<strong>Analyse</strong>-Sequenzdiagramme ändern, um Konsistenz herzustellen<br />
Objekte werden nie miteinander bekannt gemacht<br />
Unvollständige Modellierung<br />
Wenn wichtige Methoden fehlen -> <strong>Analyse</strong>-Sequenzdiagramme<br />
ergänzen<br />
Manche „Setup“-Methoden (Systemstart etc.) werden nicht modelliert<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 41
Zusammenfassung <strong>Analyse</strong>-Tabellen<br />
Eingabe: Menge von <strong>Analyse</strong>-Sequenzdiagrammen<br />
Ausgabe: Tabelle, die<br />
Alle vorkommenden Klassen auflistet, inklusive<br />
Stereotyp der Klasse<br />
Aufgaben der Klasse mit Parametern <strong>und</strong> Rückgabewerten<br />
Attribute der Klassen mit Datentypen<br />
Bekannte andere Klassen mit Angabe der Dauerhaftigkeit<br />
Die Tabelle soll<br />
Informationen sammeln<br />
Konsistenz zwischen den <strong>Analyse</strong>-Sequenzdiagrammen sichern/herstellen<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 42
<strong>Analyse</strong>-<strong>Klassendiagramm</strong><br />
Eigentlich kennen wir bereits eine Notation, mit der<br />
man die Informationen aus der Tabelle darstellen kann:<br />
<strong>Klassendiagramm</strong>e<br />
Uns fehlen nur noch einige Ausdrucksmöglichkeiten<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 43
Operationen<br />
Kommissioniervorgang<br />
datum:Datum<br />
gib Anzahl Aufträge():Integer<br />
Navigationsrichtung<br />
Komissioniervorgang<br />
*<br />
Ausdrucksmittel in <strong>Analyse</strong>-<br />
<strong>Klassendiagramm</strong>en<br />
Zusätzliches Kompartment für<br />
Notation der Operationen einer<br />
Klasse<br />
speichert<br />
0..1<br />
KV Verwaltung<br />
Gibt an, dass eine Navigation von KV Verwaltung zu KV<br />
möglich ist.<br />
Achtung: Unabhängig von der Leserichtung!<br />
Unidirektionale <strong>und</strong> bidirektionale Navigation ist möglich<br />
Default (keine Pfeilspitzen) = beide Pfeilspitzen = bidir. Nav.<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 44
Umsetzen von <strong>Analyse</strong>-Tabellen ins<br />
<strong>Analyse</strong>-<strong>Klassendiagramm</strong><br />
Jede Klasse der <strong>Analyse</strong>-Tabelle wird eine Klasse im<br />
<strong>Analyse</strong>-<strong>Klassendiagramm</strong><br />
Klasse<br />
GUI<br />
SysStrg<br />
KV Verwaltung<br />
KV<br />
KVStrg<br />
GUI<br />
KV Verwaltung<br />
SysStrg<br />
Kommissioniervorgang<br />
KVStrg<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 45
Umsetzen von <strong>Analyse</strong>-Tabellen ins<br />
<strong>Analyse</strong>-<strong>Klassendiagramm</strong><br />
Gef<strong>und</strong>ene Attribute <strong>und</strong> Operationen werden eingetragen<br />
Klasse Aufgaben Attribute<br />
KV gib Anzahl Aufträge():Integer<br />
gibt die Anzahl der Aufträge im<br />
Kommissioniervorgang zurück<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 46<br />
KV<br />
Anzahl Aufträge:Integer<br />
gib Anzahl Aufträge():Integer<br />
Anzahl Aufträge:Integer<br />
Die Anzahl der im<br />
Kommissioniervorgang enthaltenen<br />
Aufträge
Umsetzen von <strong>Analyse</strong>-Tabellen ins<br />
<strong>Analyse</strong>-<strong>Klassendiagramm</strong><br />
Dauerhaftes Bekanntsein wird zu (gerichteten) Assoziationen<br />
Klasse Aufgaben Attribute Kennt (dauerhaft?)<br />
SysStrg KV Verwaltung (ja)<br />
SysStrg KV Verwaltung<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 47
<strong>Analyse</strong>-<strong>Klassendiagramm</strong><br />
Abschließen der Erstellung des <strong>Analyse</strong>-Klassenendigrammes:<br />
Assoziationen vervollständigen (Namen <strong>und</strong> Kardinalitäten)<br />
Bei Assoziationen zwischen Entity-Klassen: Gibt es bereits eine<br />
Assoziation im Modell des Problembereichs?<br />
Lagerfach Lagerfeld<br />
4..12<br />
enthält<br />
Bei Assoziationen mit mindestens einer neu gef<strong>und</strong>enen Klasse:<br />
Was ist ein sinnvoller Name? Wie sind die Kardinalitäten?<br />
SysStrg KV Verwaltung<br />
0..1<br />
1<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 48<br />
1
Problem<br />
Pflichtenheft<br />
Problem<br />
System<br />
<strong>Analyse</strong>dokument<br />
Genereller Überblick über die Beziehungen<br />
der Dokumente etc.?<br />
Ziele<br />
Beschreibung des<br />
Problembereichs<br />
Zusammenfassen der<br />
Informationen<br />
(über die <strong>Analyse</strong>-<br />
Tabellen)<br />
Architektur<br />
Modell des<br />
Problembereichs<br />
Geschäftsfeld<br />
Struktur Verhalten<br />
<strong>Analyse</strong>-<br />
<strong>Klassendiagramm</strong><br />
Produktfunktionen<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 49<br />
1.<br />
1.<br />
2.<br />
2.<br />
3.<br />
3.<br />
<strong>Analyse</strong>-Sequenzdiagramm
Yo, jetzt seh‘ ich<br />
wieder klarer, thnx!<br />
Aber haben wir jetzt<br />
nicht nur ein<br />
<strong>Klassendiagramm</strong><br />
durch ein anderes<br />
ersetzt?<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 50
Problem<br />
Pflichtenheft<br />
Problem<br />
System<br />
<strong>Analyse</strong>dokument<br />
Ziele<br />
Beschreibung des<br />
Problembereichs<br />
Architektur<br />
MdP vs.<br />
<strong>Analyse</strong>-<strong>Klassendiagramm</strong><br />
Modell des<br />
Problembereichs<br />
Geschäftsfeld<br />
Struktur Verhalten<br />
vs.<br />
<strong>Analyse</strong>-<br />
<strong>Klassendiagramm</strong><br />
Produktfunktionen<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 51<br />
1.<br />
1.<br />
2.<br />
2.<br />
3.<br />
3.<br />
<strong>Analyse</strong>-Sequenzdiagramm
Modell des Problembereichs<br />
Beschreibt das Problemgebiet<br />
Enthält Begriffe des Problembereichs<br />
Alle Klassen sind gleich<br />
Assoziationen sind ungerichtet<br />
MdP vs.<br />
<strong>Analyse</strong>-<strong>Klassendiagramm</strong><br />
<strong>Analyse</strong>-<strong>Klassendiagramm</strong><br />
Beschreibt unseren Lösungsansatz<br />
Übernimmt manche dieser Begriffe<br />
als Gegenstandsklassen<br />
Verwirft manche dieser Begriffe als<br />
irrelevant<br />
Integriert oder spaltet manche dieser<br />
Begriffe (z.B. KV Steuerung)<br />
Enthält komplett neue, lösungsorientierte<br />
Klassen (z.B.<br />
Übergangsklassen)<br />
Ordnet die Klassen verschiedenen<br />
Ebenen der Architektur zu<br />
Assoziationen sind gerichtet<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 52
Relevanter Ausschnitt des MdP:<br />
Karussell<br />
1<br />
26<br />
{ordered}<br />
-Zulässiges Gewicht : Decimal<br />
1<br />
4..12<br />
{ordered}<br />
Lagerfeld<br />
Lagerfach<br />
-Zulässiges Gewicht : Decimal<br />
-Höhe : Decimal<br />
MdP vs. <strong>Analyse</strong>-<strong>Klassendiagramm</strong><br />
Beispiel V-DHC<br />
Auftrag<br />
-Auftragsnummer : String<br />
-Bestelldatum : Date<br />
-Priorität : Decimal<br />
0..1<br />
Auslagerungsauftrag<br />
Charge<br />
-Nummer : Decimal<br />
-Verfallsdatum : Date<br />
3 liegt in<br />
3 1..* wird erledigt durch<br />
1<br />
Kommissioniervorgang<br />
Warengruppe<br />
-Bezeichnung : String<br />
-Gewicht pro Ware : Decimal<br />
-maxAnzahl pro Fach : Decimal<br />
-Standardlagerfach : String<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 53<br />
1<br />
0..*<br />
1..*<br />
von4<br />
1<br />
3 zusammengestellt in<br />
1<br />
0..*<br />
Ware<br />
1..*<br />
Los<br />
0..* 0..1<br />
enthält Waren von4<br />
1<br />
1..*
MdP vs. <strong>Analyse</strong>-<strong>Klassendiagramm</strong><br />
Beispiel V-DHC<br />
Relevanter Ausschnitt des <strong>Analyse</strong>-KD (nach den oben gezeigten Sequenzdiagrammen)<br />
-ID : int<br />
+gibID() : int<br />
-ID : int<br />
GUI<br />
1<br />
4..12<br />
{ordered}<br />
Lagerfeld<br />
Lagerfach<br />
+getLagerfeld() : Lagerfeld<br />
+getID() : int<br />
0..1<br />
KV Verwaltung<br />
+starteKV()<br />
+zeigeAnzahlAufträge(Integer)() +gibNaechsten() : Kommissioniervorgang<br />
zeigt an4<br />
1<br />
1<br />
1<br />
1<br />
zeigt an<br />
1<br />
1<br />
KVStrg<br />
+starteKV()<br />
SysStrg<br />
+kommissioniere(in kv : Kommissioniervorgang)<br />
+kommissioniere() : Los<br />
LosStrg<br />
DHCStrg<br />
+steuereAnFachAnzahl(in lf : Lagerfach, in anz : int)<br />
3 liegt in<br />
0..1 *<br />
Kommissioniervorgang<br />
-AnzahlAutraege : int<br />
+gibAnzahlAuftraege() : int<br />
-Anzahl : int<br />
+gibLagerfach() : Lagerfach<br />
3 zusammengestellt<br />
+gibAnzahl()<br />
in<br />
: int<br />
1..*<br />
+gibLagerfach() : Lagerfach<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 54<br />
0..*<br />
Ware<br />
1<br />
Schedule<br />
+gibNaechstesLos() : Los<br />
1..*<br />
Los<br />
0..1
MdP vs. <strong>Analyse</strong>-<strong>Klassendiagramm</strong><br />
Beispiel V-DHC<br />
Relevanter Ausschnitt des <strong>Analyse</strong>-KD (nach den oben gezeigten Sequenzdiagrammen)<br />
-ID : int<br />
+gibID() : int<br />
-ID : int<br />
GUI<br />
1<br />
4..12<br />
{ordered}<br />
Lagerfeld<br />
Lagerfach<br />
+getLagerfeld() : Lagerfeld<br />
+getID() : int<br />
0..1<br />
KV Verwaltung<br />
+starteKV()<br />
+zeigeAnzahlAufträge(Integer)() +gibNaechsten() : Kommissioniervorgang<br />
zeigt an4<br />
1<br />
1<br />
1<br />
1<br />
zeigt an<br />
1<br />
1<br />
KVStrg<br />
+starteKV()<br />
SysStrg<br />
+kommissioniere(in kv : Kommissioniervorgang)<br />
+kommissioniere() : Los<br />
LosStrg<br />
DHCStrg<br />
+steuereAnFachAnzahl(in lf : Lagerfach, in anz : int)<br />
3 liegt in<br />
0..1 *<br />
Kommissioniervorgang<br />
-AnzahlAutraege : int<br />
+gibAnzahlAuftraege() : int<br />
-Anzahl : int<br />
+gibLagerfach() : Lagerfach<br />
3 zusammengestellt<br />
+gibAnzahl()<br />
in<br />
: int<br />
1..*<br />
+gibLagerfach() : Lagerfach<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 55<br />
0..*<br />
Ware<br />
1<br />
Schedule<br />
+gibNaechstesLos() : Los<br />
1..*<br />
Los<br />
0..1
Stimmt, da haben wir eine Menge<br />
dazugelernt<br />
Und in den Sequenzdiagrammen<br />
stecken<br />
auch noch Details über<br />
die internen Abläufe<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 56
Aber dürfen Kontrollklassen auf<br />
Bo<strong>und</strong>aryklassen zeigen?<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 57
Wir erinnern uns:<br />
Drei Schichten Architektur<br />
Jede Schicht ist zur darüberliegenden ein Server<br />
Abschluss der <strong>Analyse</strong><br />
Verfeinerung der Architektur<br />
Jede Schicht ist Client der darunterliegenden Schicht<br />
Wir hatten (erstmal) eine Drei-Schichten-Architektur vereinbart<br />
Nach der <strong>Analyse</strong> wissen wir jetzt viel mehr Details über<br />
unser System<br />
Haben wir uns an die Architektur gehalten?<br />
Wissen wir jetzt mehr Details über die Architektur?<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 58
Nochmal das <strong>Analyse</strong>-<strong>Klassendiagramm</strong><br />
+starteKV()<br />
+zeigeAnzahlAufträge(Integer)()<br />
zeigt an4<br />
1<br />
+starteKV()<br />
-ID : int<br />
+gibID() : int<br />
1<br />
1<br />
SysStrg<br />
GUI<br />
Lagerfeld<br />
1<br />
4..12<br />
{ordered}<br />
1<br />
zeigt an<br />
1<br />
+kommissioniere(in kv : Kommissioniervorgang)<br />
Lagerfach<br />
-ID : int<br />
+getLagerfeld() : Lagerfeld<br />
+getID() : int<br />
1<br />
KV Verwaltung<br />
+gibNaechsten() : Kommissioniervorgang<br />
0..*<br />
3 liegt in<br />
0..1<br />
Überprüfung der Architektur<br />
+steuereAnFachAnzahl (in lf : Lagerfach, in anz : int)<br />
KVStrg<br />
Ware<br />
DHCStrg<br />
+gibLagerfach() : Lagerfach<br />
+kommissioniere() : Los<br />
0..1 *<br />
1..*<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 59<br />
Los<br />
0..1<br />
-Anzahl : int<br />
+gibLagerfach() : Lagerfach<br />
+gibAnzahl() : int<br />
LosStrg<br />
Kommissioniervorgang<br />
-AnzahlAutraege : int<br />
+gibAnzahlAuftraege() : int<br />
3 zusammengestellt in<br />
1..*<br />
1<br />
Schedule<br />
+gibNaechstesLos() : Los
Nochmal das <strong>Analyse</strong>-<strong>Klassendiagramm</strong><br />
+starteKV()<br />
+zeigeAnzahlAufträge(Integer)()<br />
zeigt an4<br />
1<br />
Logikschicht<br />
+starteKV()<br />
Datenhaltungsschicht<br />
-ID : int<br />
+gibID() : int<br />
1<br />
1<br />
SysStrg<br />
GUI<br />
Lagerfeld<br />
1<br />
-ID : int<br />
4..12<br />
{ordered}<br />
1<br />
zeigt an<br />
1<br />
+kommissioniere(in kv : Kommissioniervorgang)<br />
Lagerfach<br />
+getLagerfeld() : Lagerfeld<br />
+getID() : int<br />
1<br />
KV Verwaltung<br />
+gibNaechsten() : Kommissioniervorgang<br />
0..1<br />
Überprüfung der Architektur<br />
+steuereAnFachAnzahl(in lf : Lagerfach, in anz : int)<br />
KVStrg<br />
0..*<br />
3 liegt in<br />
Ware<br />
DHCStrg<br />
+gibLagerfach() : Lagerfach<br />
0..1 *<br />
1..*<br />
-Anzahl : int<br />
+kommissioniere() : Los<br />
Präsentationsschicht<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 61<br />
Los<br />
0..1<br />
+gibLagerfach() : Lagerfach<br />
+gibAnzahl() : int<br />
LosStrg<br />
Kommissioniervorgang<br />
-AnzahlAutraege : int<br />
+gibAnzahlAuftraege() : int<br />
3 zusammengestellt in<br />
1..*<br />
+gibNaechstesLos() : Los<br />
1<br />
Schedule
Nochmal das <strong>Analyse</strong>-<strong>Klassendiagramm</strong><br />
+starteKV()<br />
+zeigeAnzahlAufträge(Integer)()<br />
zeigt an4<br />
1<br />
Logikschicht<br />
+starteKV()<br />
Datenhaltungsschicht<br />
-ID : int<br />
+gibID() : int<br />
1<br />
1<br />
SysStrg<br />
GUI<br />
Lagerfeld<br />
1<br />
-ID : int<br />
4..12<br />
{ordered}<br />
1<br />
zeigt an<br />
1<br />
+kommissioniere(in kv : Kommissioniervorgang)<br />
Lagerfach<br />
+getLagerfeld() : Lagerfeld<br />
+getID() : int<br />
1<br />
KV Verwaltung<br />
+gibNaechsten() : Kommissioniervorgang<br />
0..1<br />
Überprüfung der Architektur<br />
+steuereAnFachAnzahl(in lf : Lagerfach, in anz : int)<br />
KVStrg<br />
0..*<br />
3 liegt in<br />
Ware<br />
DHCStrg<br />
+gibLagerfach() : Lagerfach<br />
0..1 *<br />
1..*<br />
-Anzahl : int<br />
+kommissioniere() : Los<br />
Präsentationsschicht<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 62<br />
Los<br />
0..1<br />
+gibLagerfach() : Lagerfach<br />
+gibAnzahl() : int<br />
LosStrg<br />
Kommissioniervorgang<br />
-AnzahlAutraege : int<br />
+gibAnzahlAuftraege() : int<br />
3 zusammengestellt in<br />
1..*<br />
+gibNaechstesLos() : Los<br />
1<br />
Schedule
<strong>Analyse</strong> von „KV kommissionieren“<br />
:GUI :KVStrg kv1:KV<br />
zeige Anzahl<br />
Aufträge(3)<br />
gib Anzahl<br />
Aufträge()<br />
3<br />
new Schedule (kv1)<br />
gib nächstes Los ()<br />
l1<br />
new LosStrg()<br />
kommissioniere (l1)<br />
gib nächstes Los ()<br />
…<br />
s:Schedule<br />
Vom Sequenzdiagramm<br />
zur <strong>Analyse</strong>-Tabelle<br />
l1:Los<br />
:LosStrg<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 63
<strong>Analyse</strong> von „Los kommissionieren“<br />
:LosStrg l1:Los<br />
gib Lagerfach()<br />
fa<br />
gib anzahl()<br />
12<br />
gib Lagerfach()<br />
fa<br />
:Ware<br />
steuere an Fach Anzahl(fa,12)<br />
fa:Lagerfach<br />
Vom Sequenzdiagramm<br />
zur <strong>Analyse</strong>-Tabelle<br />
fe:Lagerfeld<br />
gib Lagerfeld()<br />
fe<br />
gib ID()<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 64<br />
1<br />
gib ID()<br />
16<br />
:DHCStrg<br />
steuereAn<br />
FeldFachAnz<br />
(16,1,12)
Aufwärtskommunikation<br />
in der 3-Schichten-Architektur<br />
Wie gelangen Informationen über den aktuellen Systemzustand zum<br />
Display?<br />
Antworten<br />
Berechne<br />
Berechne<br />
2+2<br />
4<br />
:GUI<br />
Berechne<br />
Wert(„2+2“)<br />
:Strg<br />
Problem: Die Art der Ausgabe kann sich abhängig von der<br />
Verarbeitung des Inputs ändern<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 65<br />
4
Aufwärtskommunikation<br />
in der 3-Schichten-Architektur<br />
Wie gelangen Informationen über den aktuellen Systemzustand zum<br />
Display?<br />
Antworten mit Informationen über Anzeige<br />
Berechne<br />
2/(3-x)<br />
Es ist ein Fehler<br />
aufgetreten:<br />
Division by Zero<br />
:GUI<br />
Berechne<br />
Wert(„2/(3-x)“)<br />
„Fehlerscreen“,<br />
„Division by Zero“<br />
:Strg<br />
Problem: Dieses Ein-Ausgabemuster entspricht nicht zeitgemäßen,<br />
interaktiven Systemen<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 66
Aufwärtskommunikation<br />
in der 3-Schichten-Architektur<br />
Wie gelangen Informationen über den aktuellen Systemzustand zum<br />
Display?<br />
Polling<br />
:GUI<br />
Berechne<br />
Wert(„2/(3-x)“)<br />
getUpdate<br />
getUpdate<br />
getUpdate<br />
„Ergebnis“,“2“<br />
:Strg<br />
Problem: Dieses Muster ist unschön anzusehen <strong>und</strong> nicht<br />
gewinnbringend in der <strong>Analyse</strong><br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 67
Lösung<br />
Aufwärtskommunikation<br />
in der 3-Schichten-Architektur<br />
Ein Bo<strong>und</strong>ary Objekt der <strong>Analyse</strong> verkapselt (immer) ein relativ komplexes<br />
System (GUI Klassen, Dialogkontrolle, externe Protokolle…)<br />
Erweiterung des Bo<strong>und</strong>ary Begriffes um eine Fassadenklasse in der<br />
Logikschicht<br />
Freie Kommunikation in der Präsentationsschicht<br />
Logikschicht möglich<br />
Unabhängigkeit vom<br />
Informationstransport<br />
zur echten Schnittstelle Logikschicht<br />
Datenhaltungsschicht<br />
«bo<strong>und</strong>ary» «bo<strong>und</strong>ary»<br />
«control»<br />
«control»<br />
«entity» «entity»<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 69
Lösungspattern(intern):<br />
:GUI<br />
Berechne<br />
Wert(„2/(3-x)“)<br />
getUpdate<br />
getUpdate<br />
getUpdate<br />
„Ergebnis“,“2“<br />
:GUIFassade<br />
Berechne<br />
Wert(„2/(3-x)“)<br />
zeigeErgebnis(„2“)<br />
Aufwärtskommunikation<br />
in der 3-Schichten-Architektur<br />
Erkenntnis für uns: Wir können mit der GUI kommunizieren, ohne<br />
die Architektur zu verletzen. Interne Realisierung dann über das o.g. Pattern<br />
:Strg<br />
im <strong>Analyse</strong>-SD:<br />
:GUI :Strg<br />
Berechne<br />
Wert(„2/(3-x)“)<br />
zeigeErgebnis(„2“)<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 70
Wichtige Erkenntnis:<br />
Ergebnis der <strong>Analyse</strong><br />
Die „Objekte“ (<strong>und</strong> damit auch Klassen) in der <strong>Analyse</strong><br />
erfordern (teilweise) noch eine Realisierung durch<br />
komplexe Strukturen.<br />
<strong>Analyse</strong> Klassen ≠ Implementationsklassen<br />
<strong>Analyse</strong> Klassen ≈ Interfaces<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 71
In der <strong>Analyse</strong><br />
Zusammenfassung <strong>Analyse</strong><br />
Legen wir die gr<strong>und</strong>sätzliche Architektur des Systems fest<br />
Verfeinern wir die Produktfunktionen durch <strong>Analyse</strong>-<br />
Sequenzdiagramme<br />
Fassen wir die dabei gewonnenen strukturellen Informationen erst<br />
zu Tabellen, dann zu einem <strong>Analyse</strong>-<strong>Klassendiagramm</strong> zusammen<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 72
<strong>Analyse</strong>-Sequenzdiagramme<br />
Wozu sie gut sind<br />
Wie man sie zeichnet<br />
Welche Elemente ihnen zugr<strong>und</strong>e liegen<br />
Was Sie gelernt haben sollten<br />
Welche Prinzipien Sie bei der Erstellung berücksichtigen sollten<br />
<strong>Analyse</strong>-Tabellen<br />
Welche Informationen hier einzutragen sind<br />
Welche Probleme dabei auftreten können<br />
<strong>Analyse</strong>-<strong>Klassendiagramm</strong>e<br />
Welche neuen Notationselemente diese enthalten<br />
Wie man sie aus den Tabellen ableitet<br />
Was man sonst noch einfügen muss<br />
Wie sie sich vom Modell des Problembereichs unterscheiden<br />
Softwareentwurf 2010/2011 Universität Paderborn - Gregor Engels 73