Ermittlung von Klassenkandidaten:Zunächst haben wir die textuelle Beschreibung der Anwendungsfälle analysiert, um Substantive zu identifizieren, die zentrale Konzepte des zu modellierenden Anwendungssystems bezeichnen und darum als Klassenkandidaten in Erwägung zu ziehen sind. Dabei erschienen uns solche Konzepte als besonders relevant, die an den Handlungen der Anwendungsfälle aktiv oder passiv beteiligt sind, wie etwa "Produkte", "Kunden" oder "Bestellposten". Auf diese Weise konnten wir folgende Liste von Klassenkandidaten aufstellen:
Da sich herausstellte, daß sowohl zwischen den Klassen "Kundenbestellung" und "Nachbestellung" als auch zwischen den Klassen "Kunde" und "Lieferant" Gemeinsamkeiten bestehen (Beispielsweise haben sowohl Kunden als auch Lieferanten eine Adresse, und Kundenbestellungen wie Nachbestellungen setzen sich aus Bestellposten zusammen), wurde beschlossen, zwei zusätzliche abstrakte (d. h. nicht instanziierbare) Oberklassen "Bestellung" und "Geschäftspartner" einzuführen, um diese Gemeinsamkeiten zu modellieren. Von "Bestellung" wurden als instanziierbare Klassen "Kundenbestellung" und "Nachbestellung", von "Geschäftspartner" "Kunde" und "Lieferant" abgeleitet. Der Lieferschein wurde von uns an dieser Stelle des Modellierungsprozesses nicht als eigene Klasse modelliert, da zum einen die für einen Lieferschein zusammengestellten Informationen nach dem Ausdruck des Scheins nicht mehr benötigt werden (Rückinformationen über ausgelieferte Bestellposten werden über die "Liefer-Kartei" behandelt) und zum anderen eine Integration der Lieferscheinerstellung in die Klasse "Liefer-Kartei" favorisiert wurde, weil die Informationen in dieser Kartei zur Erstellung der Lieferscheine herangezogen werden. Mit der Erweiterung unserer ursprünglichen Klassenliste um die beiden abstrakten Klassen "Bestellung" und Geschäftspartner hatten wir die Klassen für den ersten Entwurf des Klassendiagramms beisammen und gingen daran, die Beziehungen zwischen den Klassen festzulegen.
![]() 1. Änderung an den Klassen:
![]() 2. Änderung an den Klassen:
![]() 3. Änderung an den Klassen:
![]() |
Festlegung von Beziehungen zwischen den KlassenParallel zur Ermittlung der Klassenkandidaten wurden bereits Beziehungen zwischen den Klassen festgelegt. Für jede Klasse haben wir dazu überlegt, mit welchen anderen Klassen sie in Beziehung stehen könnte. Nachdem die Partner einer Beziehung feststanden, wurde sie hinsichtlich Art, Direktionalität, Rollen, Kardinalitäten etc. spezifiziert. Dabei erwies sich die zuvor erstellte textuelle Beschreibung der Anwendungsfälle einmal mehr als hilfreiche Grundlage, da sie eine Reihe von Zusammenhängen zwischen den Konzepten aufzeigt. Außerdem konnte vorhandenes Vorwissen aus dem Datenbank-Bereich angewendet werden, etwa bei der Spezifizierung der Beziehung zwischen "Kunde" und "Kundenbestellung" (1:n-Beziehung) oder zwischen "Bestellposten" und "Produkt" (1:1-Beziehung).Die auf diese Weise festgelegten Beziehungen sind im einzelnen:
![]() 1. Änderung an den Beziehungen:
2. Änderung an den Beziehungen:
![]()
3. Änderung an den Beziehungen:
![]() |
Zurück zur Festlegung der Klassen
Zurück zur Festlegung der Beziehungen
Zurück zur 1. Änderung an den Klassen
Zurück zu den ersten beiden Änderungen an den Beziehungen
Zurück zur 2. Änderung an den Klassen
Zurück zur 3. Änderung an den Beziehungen
Im folgenden soll die Evolution der Klasseninterna beispielhaft für
die Klassen "Produkt",
"Liefer-Kartei"
und "Lieferschein"
beschrieben und dabei die Wechselwirkung zwischen Klassenmodell und Sequenzdiagrammen
aufgezeigt werden. Die genaue Semantik der einzelnen Attribute und Operationen
kann der Dokumentation des Beispielprojekts
entnommen werden. Die Änderungen, die sich von Entwurf zu Entwurf
ergeben haben, sind rot gekennzeichnet.
Wo eine Operation wegfiel, wurde sie in der Ausgangsabbildung durchgestrichen
dargestellt.
1. Beispiel zur Klasse "Produkt":Abbildung 7a zeigt die Interna der Klasse "Produkt", bevor wir an die Entwicklung der Sequenzdiagramme gingen.![]() ![]() 1. Änderung der Klasse "Produkt"Bei der Erstellung des ersten Sequenzdiagramm-Entwurfs zum Anwendungsfall "Bestellung bearbeiten" stellten wir fest, daß die Klasse "Produkt" zwei weitere Operationen "akt_best_korrigieren" und "vormerken" benötigt, um den aktuellen Lagerbestand des Produkts nach unten (oder oben) korrigieren bzw. eine bestimmte Anzahl von Mengeneinheiten dieses Produkts zur Nachbestellung vormerken zu können. Die Operation "min_max_best_definieren" kam hinzu, um den Anwendungsfall "Maximalen und minimalen Lagerbestand definieren" abzudecken. Das neue Attribut "lnr" enthält die Nummer des Lieferanten für das Produkt. Es wird im Sequenzdiagramm zu "Fehlbestände nachbestellen" zur Identifizierung des Lieferanten benötigt, an den die Nachbestellung für das Produkt gerichtet ist. (Dabei gilt die Annahme, daß jedes Produkt von genau einem Lieferant geliefert wird.) Das Ergebnis dieser Änderungen ist in Abbildung 7b dargestellt.![]()
![]() 2. Änderung der Klasse "Produkt"Für das Sequenzdiagramm zum Anwendungsfall "Wareneingang bearbeiten" bekam die Operation "wareneingang_bearbeiten" einen Parameter "eingetr_menge", in dem die eingetroffene Warenmenge für das Produkt angegeben wird. Außerdem wurde für das Sequenzdiagramm zu "Fehlbestände nachbestellen" eine weitere Operation namens "nachbestellen" erforderlich, die den Nachbestellungsvorgang für das Produkt durchführt (vgl. Abbildung 7c).![]() ![]() |
2. Beispiel zu den Klassen "Liefer-Kartei" und "Lieferschein":Die Integration der neuen Klasse "Lieferschein" in das Klassenmodell erforderte zunächst Änderungen an den Attributen bzw. Operationen der Klasse "Liefer-Kartei". Als neues Attribut kam eine Liste hinzu, die die Lieferscheinnummern ("lsnr") der erstellten Lieferscheine enthält. Zusätzlich zur bereits vorhandenen Operation "lieferscheine_erstellen" wurden zwei Hilfsoperationen "lieferscheine_zuordnen" und "lieferscheine_drucken" definiert, die während der Abarbeitung von "lieferscheine_erstellen" die zuvor vorbereiteten Lieferscheine durch die Lieferwagennummer ("lwnr") vervollständigen bzw. die vollständigen Lieferscheine ausdrucken (vgl. Abbildung 8a).
![]() 1. Änderung der Klassen "Liefer-Kartei" und "Lieferschein":Für den zweiten Entwurf des Sequenzdiagramms zum Anwendungsfall "Lieferscheine erstellen" wurde allerdings die Operation "lieferscheine_drucken" aus der Klasse "Liefer-Kartei" entfernt und dafür die Klasse "Lieferschein" um die Operation "ausdrucken" erweitert, da es sich dabei um eine Funktionalität handelt, die semantisch eher zu "Lieferschein" als zu "Liefer-Kartei" gehört. Damit sehen die Interna der beiden Klassen "Liefer-Kartei" und "Lieferschein" so aus, wie in Abbildung 8b dargestellt.
![]() 2. Änderung der Klassen "Liefer-Kartei" und "Lieferschein":In der endgültigen Fassung des Sequenzdiagramm zu "Lieferscheine erstellen" erhielt die "neu"-Operation der Klasse "Lieferschein" noch die Nummer ("lsnr") des neu erzeugten Lieferscheins als Rückgabewert, um der Klasse "Liefer-Kartei" diese Nummer für ihre "lieferscheine"-Liste mitzuteilen. Damit hatte die Klasse "Lieferschein" schließlich das in Abbildung 8c dargestellte Aussehen.![]() ![]() |
Einordnung in das Gesamtbild der UML