12.08.2013 Aufrufe

Softwareentwurf - Analyse-Klassendiagramm - Universität Paderborn

Softwareentwurf - Analyse-Klassendiagramm - Universität Paderborn

Softwareentwurf - Analyse-Klassendiagramm - Universität Paderborn

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

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

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 41


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 und bidirektionale Navigation ist möglich<br />

Default (keine Pfeilspitzen) = beide Pfeilspitzen = bidir. Nav.<br />

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 42


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

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 43


Umsetzen von <strong>Analyse</strong>-Tabellen ins<br />

<strong>Analyse</strong>-<strong>Klassendiagramm</strong><br />

Gefundene Attribute und 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 />

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 44<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 />

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 45


<strong>Analyse</strong>-<strong>Klassendiagramm</strong><br />

Abschließen der Erstellung des <strong>Analyse</strong>-Klassenendigrammes:<br />

Assoziationen vervollständigen (Namen und Kardinalitäten)<br />

Bei Assoziationen zwischen Entity-Klassen: Gibt es bereits eine<br />

Assoziation im Modell des Problembereichs?<br />

enthält<br />

Lagerfach Lagerfeld<br />

4..12<br />

1<br />

Bei Assoziationen mit mindestens einer neu gefundenen Klasse:<br />

Was ist ein sinnvoller Name? Wie sind die Kardinalitäten?<br />

SysStrg KV Verwaltung<br />

1<br />

1<br />

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 46


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

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 47<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 />

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 48


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

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 49<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 />

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 50


Relevanter Ausschnitt des MdP:<br />

1<br />

26<br />

{ordered}<br />

Karussell<br />

Lagerfeld<br />

-Zulässiges Gewicht : Decimal<br />

1<br />

4..12<br />

{ordered}<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 />

liegt in<br />

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

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 51<br />

1<br />

0..*<br />

1..*<br />

von<br />

1<br />

1<br />

zusammengestellt in<br />

0..*<br />

Ware<br />

1..*<br />

Los<br />

0..* 0..1<br />

enthält Waren von<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 an<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 />

liegt in<br />

0..1 *<br />

Kommissioniervorgang<br />

-AnzahlAutraege : int<br />

+gibAnzahlAuftraege() : int<br />

-Anzahl : int<br />

+gibLagerfach() : Lagerfach<br />

zusammengestellt<br />

+gibAnzahl()<br />

in<br />

: int<br />

1..*<br />

+gibLagerfach() : Lagerfach<br />

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 52<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 an<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 />

liegt in<br />

0..1 *<br />

Kommissioniervorgang<br />

-AnzahlAutraege : int<br />

+gibAnzahlAuftraege() : int<br />

-Anzahl : int<br />

+gibLagerfach() : Lagerfach<br />

zusammengestellt<br />

+gibAnzahl()<br />

in<br />

: int<br />

1..*<br />

+gibNaechstesLos() : Los<br />

+gibLagerfach() : Lagerfach<br />

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 53<br />

0..*<br />

Ware<br />

1<br />

Schedule<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 />

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 54


Aber dürfen Kontrollklassen auf<br />

Boundaryklassen zeigen?<br />

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 55


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

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 56


Nochmal das <strong>Analyse</strong>-<strong>Klassendiagramm</strong><br />

+starteKV()<br />

+zeigeAnzahlAufträge(Integer)()<br />

zeigt an<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 />

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

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 57<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 />

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 an<br />

1<br />

+starteKV()<br />

1<br />

1<br />

SysStrg<br />

GUI<br />

Lagerfeld<br />

-ID : int<br />

+gibID() : int<br />

1<br />

+kommissioniere(in kv : Kommissioniervorgang)<br />

1<br />

KVStrg<br />

KV Verwaltung<br />

0..1<br />

Überprüfung der Architektur<br />

DHCStrg<br />

+steuereAnFachAnzahl(in lf : Lagerfach, in anz : int)<br />

+gibNaechsten() : Kommissioniervorgang<br />

4..12<br />

{ordered}<br />

Ware<br />

Zwischen dem Kommissioniervorgang<br />

und dem Schedule besteht eine<br />

Verbindung, die sichtbar wird, wenn<br />

der Konstruktor des Schedules 0..*<br />

liegt in<br />

analysiert wird [<strong>Analyse</strong>-KD ist hier<br />

noch unvollständig]<br />

Lagerfach<br />

-ID : int<br />

+getLagerfeld() : Lagerfeld<br />

+getID() : int<br />

+gibLagerfach() : Lagerfach<br />

+kommissioniere() : Los<br />

0..1 *<br />

1..*<br />

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 58<br />

0..1<br />

Los<br />

-Anzahl : int<br />

+gibLagerfach() : Lagerfach<br />

+gibAnzahl() : int<br />

Steuerungsklassen existieren<br />

häufig nur temporär (für einen<br />

bestimmten Zweck) und haben<br />

keine dauerhaften Assoziationen<br />

LosStrg<br />

Kommissioniervorgang<br />

-AnzahlAutraege : int<br />

+gibAnzahlAuftraege() : int<br />

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 an<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 />

liegt in<br />

Ware<br />

DHCStrg<br />

+gibLagerfach() : Lagerfach<br />

0..1 *<br />

1..*<br />

-Anzahl : int<br />

+kommissioniere() : Los<br />

Präsentationsschicht<br />

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 59<br />

Los<br />

0..1<br />

+gibLagerfach() : Lagerfach<br />

+gibAnzahl() : int<br />

LosStrg<br />

Kommissioniervorgang<br />

-AnzahlAutraege : int<br />

+gibAnzahlAuftraege() : int<br />

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 an<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 />

liegt in<br />

Ware<br />

DHCStrg<br />

+gibLagerfach() : Lagerfach<br />

0..1 *<br />

1..*<br />

-Anzahl : int<br />

+kommissioniere() : Los<br />

Präsentationsschicht<br />

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 60<br />

Los<br />

0..1<br />

+gibLagerfach() : Lagerfach<br />

+gibAnzahl() : int<br />

LosStrg<br />

Kommissioniervorgang<br />

-AnzahlAutraege : int<br />

+gibAnzahlAuftraege() : int<br />

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

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 61


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

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 62<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 />

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 63<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 />

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 64


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 und nicht<br />

gewinnbringend in der <strong>Analyse</strong><br />

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 65


Lösung<br />

Aufwärtskommunikation<br />

in der 3-Schichten-Architektur<br />

Ein Boundary Objekt der <strong>Analyse</strong> verkapselt (immer) ein relativ komplexes<br />

System (GUI Klassen, Dialogkontrolle, externe Protokolle…)<br />

Erweiterung des Boundary 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 />

«boundary» «boundary»<br />

«control»<br />

«control»<br />

«entity» «entity»<br />

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 66


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

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 67


Wichtige Erkenntnis:<br />

Ergebnis der <strong>Analyse</strong><br />

Die „Objekte“ (und 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 />

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 68


In der <strong>Analyse</strong><br />

Zusammenfassung <strong>Analyse</strong><br />

Legen wir die grundsä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 />

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 69


<strong>Analyse</strong>-Sequenzdiagramme<br />

Wozu sie gut sind<br />

Wie man sie zeichnet<br />

Welche Elemente ihnen zugrunde 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 />

<strong>Softwareentwurf</strong> 2008/089 <strong>Universität</strong> <strong>Paderborn</strong> - Gregor Engels 70

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!