12.08.2013 Aufrufe

Analyse-Klassendiagramm - Datenbank- und Informationssysteme ...

Analyse-Klassendiagramm - Datenbank- und Informationssysteme ...

Analyse-Klassendiagramm - Datenbank- und Informationssysteme ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!