Die Analysephase
        Das Schreiben einer Anwendung etwas komplexeren Ausmaßes ist
        eine heikle Angelegenheit und bedarf sorgfältiger Planung im
        Vorfeld. Warum? Ganz einfach: Diejenigen unter Euch, die sich bereits
        einmal an die Umsetzung eines eigenen Projektes gewagt haben (ob nun
        allein oder in Gruppen), haben sicher nach gewisser Zeit festgestellt,
        dass man an einigen Stellen des Programms noch andere Features
        hätte einbauen können, an die man zunächst gar nicht
        gedacht hatte. Oft geht das noch gut und man kann den fehlenden Code
        einfach ergänzen. Doch was ist, wenn zum Einbau der neuen
        Funktionen weitreichende Änderungen aller anderen Funktionen,
        wenn nicht des gesamten Projektes, nötig werden?
        Ein weiterer Knackpunkt ist das Arbeitsumfeld der Anwendung. Wir haben
        sicher alle bereits von dem kleinen Schnitzer der NASA gehört,
        kurzerhand eine
        
            Mars-Sonde im All zu verlieren
        
        nur aufgrund der Tatsache, dass sich die Entwickler der Software
        nicht über die zu verwendenden Längeneinheiten einigen
        konnten. So etwas ist einfach nur peinlich und sollte heutzutage nicht
        mehr passieren. Dennoch geschehen diese fatalen Fehler und sind
        meistens in einem nicht ausreichenden Verständnis der
        Produktumgebung begründet. Im Fall unserer verschollenen Sonde
        war aber eher mangelnde Kommunikation im Team der Grund.
	
        Nachdem sich das Team auf ein Prozessmodell geeinigt hat, und damit
        den ungefähren Ablauf des Projektes vor Augen hat, wird zunächst der
        Anwendungsbereich und die Aufgabenstellung in allen Einzelheiten
        analysiert. Die wichtigsten Punkte werden dabei in einer
        Prioritätenliste festgehalten. Mit diesen Daten geht es noch einmal zum Kunden,
        um alle Unklarheiten aus dem Weg zu räumen.
        Die vorzeitige Erstellung eines Benutzerhandbuches hat sich für
        die Anforderungsermittlung als vorteilhaft erwiesen, die wiederum in
        der Ausarbeitung eines Pflichtenheftes endet. Dieses Dokument ist im
        weiteren Verlauf der Projektierung als Vertrag mit dem Kunden zu
        verstehen und wird dementsprechend von ihm unterschrieben.
        Neben diesen etwas weniger formalen Dokumenten hat es sich für die Kommunikation
        als vorteilhaft herausgestellt, diese in eine etwas allgemeinverständlichere Form
        zu bringen. Dazu überführt man Schritt für Schritt die textuellen Beschreibungen
        in eine passende Diagrammbeschreibung. Die statischen Beziehungen werden sich in einem
        Klassendiagramm wiederfinden, die dynamischen in einigen Sequenzdiagrammen. Als Zwischenschritt
        bietet sich die CRC-Karten-Methode an. Zum Ende der Analyse sollte feststehen, wie lange in
        etwa die Entwicklung dauern wird und wie hoch die materiellen Anforderungen (Teamstärke,
        Zeitaufwand und weitere Resourcen) sind.
	
Viele werden sich jetzt fragen, wann denn ihr unter viel Mühen erlerntes Salespoint-Wissen zur Anwendung kommt. Dazu ist zu sagen, dass man sich in der Analyse nicht auf ein Framework oder System festlegen sollte. Vielmehr soll die Aufgabenstellung ohne "Hintergedanken" analysiert werden. Wenn man das Framework jetzt schon einbinden wollte, dann würden viele sonst möglichen Denkmuster und Lösungswege verbaut, da man nur nach Äquivalenzen im Framework sucht. Zudem steht meist zu dieser frühen Phase des Projektes noch nicht fest, ob, und wenn, welches Framework eingesetzt werden wird. Im Entwurf kommen wir dann noch früh genug auf das Framework zurück.
Festlegung auf ein Prozessmodell
In unserer langjährigen Erfahrung in der Projektierung von Anwendungen haben wir es uns zur Gewohnheit gemacht, mit der Entwicklung eines passenden Prozessmodells zu beginnen. Für uns ist nicht nur der dort verankerte zeitliche Rahmen mit seinen zahlreichen Meilensteinen (milestones!) wichtig. Das Modell bildet auch einen organisatorischen Rahmen, eine Vorlage für den Umgang mit Problemfällen, wie beispielsweise den Rückfall in eine frühere Entwicklungsphase aufgrund von Änderungen im Design.
	
Definition Prozessmodell:
	Ein Prozessmodell (auch Vorgehensmodell genannt) soll
	folgendes wiedergeben/veranschaulichen:
	
- Welche Aktivitäten werden durchgeführt?
 - In welcher zeitlichen Beziehung stehen sie zueinander? Müssen sie aufeinander folgen oder dürfen sie sich auch überschneiden?
 - Welche Personen nehmen an diesen Aktivitäten teil und welche Rollen nehmen sie dabei ein?
 - Welche Ergebnisse (sogenannte Artefakte) entstehen, und wann?
 - Zu welchen Zeitpunkten wurden Meilensteine festgelegt? Welche Artefakte sind dort fertigzustellen?
 
Natürlich gibt es verschiedene Möglichkeiten und Wege ein solches Modell zu erstellen. Sie hängen davon ab, wie konkret und detailliert man es am Ende haben will. Für uns war der organisatorische Rahmen der wichtigste Punkt, an dem wir auch die Modellerstellung festmachten. Er wird, wenn er einmal steht, nicht mehr geändert. Viele schmerzhafte Erfahrungen, die meist aus dem Verlust des Rahmens und dem daraus resultierenden Chaos bestehen, lehrten uns das. Andere Details, wie beispielsweise einige (nicht alle!) Meilensteine, werden zwar angegeben, können aber noch im Nachhinein geändert werden. Sie stellen lediglich Richtlinien dar.
Die Vielzahl der existierenden Prozessmodelle ruft natürlich eine Menge Befürworter und Gegner des einen oder anderen Modells auf den Plan. Fast jedes Teammitglied plädierte für ein anderes Modell, was sich als sehr produktiv erwies. Zum Finden des für uns am besten passenden - des einzig richtigen Modells wenn man so sagen will - könnte man folgende Vorgehensweise anwenden:
- Zunächst sollte jedes Teammitglied aufschreiben, was genau (immer mit Bezug auf unser Projekt) für sein favorisiertes Modell spricht und welche Punkte gegen die von den anderen Personen genannten Modelle sprechen.
 - Die Notizen werden eingesammelt und einer Prüfung unterzogen, ob auch niemand zu großzügig in der positiven Beurteilung seines Modells war.
 - Schließlich werden die Pros und Kontras an einer Tafel zusammengetragen und diskutiert.
 
Für das hier betrachtete Projekt bietet sich das an, was man als das Wasserfallmodell bezeichnet. Grob zusammengefasst sprachen etwa die folgenden Punkte dafür:
- Der zeitliche Aufwand für die Entwicklung unseres Produktes würde verhältnismäßig gering ausfallen, weshalb sich eine straight-forward Methode empfahl.
 - Sollten Fehler auftreten, stören die nicht den Ablauf im Markt oder vernichten wichtige Datenbestände. Die Fehlertoleranz ist also recht hoch und langwieriges Testen ist noch nicht nötig.
 - Von den meisten Entwicklern im Team wurde zunächst die unter der Bezeichnung extreme programming bekannte Technik bevorzugt (hauptsächlich aufgrund der geringen Entwicklungszeit). Aber einige Teammitglieder verfügten noch über keinerlei Erfahrung auf dem Gebiet und müssten erst eine entsprechende Nachschulung antreten, was alles nur verzögern würde.
 
Analyse des Aufgabenbereiches
	
"Denn sie wissen nicht, was sie tun."
	Mit diesen Worten könnte man viele Dramen der Software-Entwicklung kurz
	aber umfassend beschreiben. Sich das Arbeitsumfeld eines zu erstellenden
        Produktes genau anzusehen, werden sicher viele als
        überflüssiges Zusatzwissen abtun. Doch um eben genanntes
        Szenario zu vermeiden, ist es absolut unerlässlich, sich ein
        exaktes Bild der späteren Einsatzumgebung der Software zu machen,
        die man entwickelt. Alle wichtigen Details gehören
        aufgeschrieben. Jedem Mitglied des Entwicklungsteams müssen die
        Voraussetzungen, mit denen gearbeitet wird, bekannt sein. Und alle
        müssen von denselben Voraussetzungen ausgehen (um derlei Kapriolen
        wie mit dem climate orbiter zu vermeiden).
        Nicht umsonst sind dem Thema der Produktumgebung mehrere Kapitel des
        Pflichtenheftes gewidmet.
	
	
Hinweis:
        Den meisten Praktikumsgruppen wird die Möglichkeit der
        Besichtigung ihres (meist fiktiven) Auftraggebers leider nicht vergönnt sein. Sie
        müssen den Anwendungsbereich zusammen mit ihrem Tutor (der im
        Verlauf des Praktikums von Zeit zu Zeit die Rolle des Auftraggebers
        übernimmt) kennenlernen. Legt gemeinsam fest, wie Ihr Euch den
        Aufbau Eures jeweiligen Anwendungsbereiches vorstellt und wie die
        Abläufe dort aussehen. Die Aufgabenstellungen allein geben oft
        nicht viel her und Eure Fantasie wird Euch vermutlich über's Ziel
        hinausschießen lassen. Grenzt deshalb in Zusammenarbeit mit Eurem
        Tutor das Umfeld genau ein. Dabei solltet ihr ruhig erstmal eure Gedanken schweifen lassen.
        Die Liste der möglichen Funktionen ist nahezu unendlich. Sprecht euch aber danach
        unbedingt mit eurem Tutor ab, da er noch am ehesten einschätzen kann, was alles machbar ist.
        Dabei hilft die frühzeitige Abgrenzung von Pflicht- und Wunschkriterien.
        Viele der etwas abgedrehteren Ideen werden wohl eher den Weg zu den Wunschkriterien finden.
        Wie sich aber in den letzten Jahren gezeigt hat, bleibt für einige Gruppen immer noch genug Zeit,
        um solche Features dann auch zu implementieren.
 Ein mögliches Beispiel einer solchen
        Ausschmückung findet ihr im nächsten Abschnitt.
	
Am Tag nach der Vorstellung des Projektes durch die Firmenleitung trafen wir uns noch einmal mit einigen Vertretern des Marktes um uns ein genaues Bild des Aufbaus des Großhandels und der dort ablaufenden Geschäftsprozesse zu machen. In unserem Team befand sich lediglich ein Sachverständiger für dieses Fachgebiet: Er hatte als Schüler im Laden seiner Eltern gejobt, was ihn sicherlich an Erfahrungen reicher machte, uns aber nicht wirklich weiterhalf. Deshalb kamen wir fast ohne Grundwissen (mal abgesehen von den persönlichen Vorstellungen jedes Einzelnen) zum Markt, dessen Aufbau sich zunächst grob in fünf Bereiche unterteilte:
- die Verkaufshalle mit einem Informationsstand am Eingang und den Kassen am Ausgang,
 - ein Hochregal-Lager für die Warenbestände,
 - das Bürogebäude mit der Verwaltung, dem Besprechungsraum und dem Büro des Chefs,
 - der Kundenparkplatz und schließlich
 - der Fuhrpark mit Verladerampe für ein- und ausgehende Waren.
 
        Der Markt wird vom Kunden an einem Informationsstand betreten, an dem
        er von einem Mitarbeiter begrüßt (und beraten) wird und wo
        Unmengen an Info-Broschüren und Werbematerial der verschiedensten
        Anbieter für ihn bereitliegen. Aus dem Supermarkt kennt man es so,
        dass in den Regalen stets mehrere Produktexemplare der
        verschiedenen Anbieter liegen, die man in seinen Korb packt. In unserem
        Großhandel sieht das ein wenig anders aus, was uns anfangs auch
        überraschte.
        Die Verkaufshalle besteht natürlich zum Großteil aus
        Regalen. Doch darin befindet sich von jedem Produkt immer nur ein
        Beispiel-Exemplar. Daneben ist stets eine Tafel mit einer Beschreibung
        der wichtigsten Eigenschaften, wie Hersteller, Preis usw. angebracht.
        Wenn man nach einer Analogie sucht, dann sollte man sich am Besten der
        einer Gärtnerei bedienen, in denen neben den Tüten mit den
        Sämereien immer auch ein kleines Beet davon befindet.
        Die eigentlichen Warenbestände liegen übersichtlich sortiert
        und verpackt im Lager, was eine noch weit größere Halle ist,
        in der die Waren palettenweise aufgestapelt sind. Eine Aufteilung in
        verschiedene Produktkategorien und die anschließende
        alphabetische Sortierung innerhalb jeder Kategorie machen ein schnelles
        Auffinden gesuchter Artikel durch die Lagerarbeiter möglich.
	
        Den räumlich kleinsten (aber nicht weniger wichtigen) Teil der
        Firma stellt das Bürogebäude dar. Dort finden intensivere
        Beratungsgespräche mit Großkunden statt und hier hat
        natürlich die Verwaltung (inkl. dem Chef) ihren Sitz.
        Abgerundet wird alles durch die an das Lagerhaus angegliederte
        Waren-Verladerampe mit dem Fuhrpark der Firma. Hier werden angelieferte
        Waren von den Lagerarbeitern entgegengenommen und Lieferungen an
        Adressen außerhalb der Firma in Transporter verpackt. Die drei LKWs
        und zwei Kleintransporter der Firma stehen dazu auf einem Parkplatz
        direkt gegenüber der Verladerampe, neben dem Kundenparkplatz, der
        von der Rampe aus ebenfalls zugänglich ist.
	Der Furhpark und die Auslieferung an den Kunden wurden hier zwar exemplarisch beschrieben,
	spielen aber im weiteren Projekt keine Rolle mehr. Der Eingriff in die vorhandene Architektur
	wäre an diesem Punkt zu groß, als dass er im Rahmen des Praktikums gelöst
	werden könnte.
	
Identifizierung von Anwendungsfällen
Als wichtiges Hilfsmittel für das Verständnis der Geschäftsabläufe haben sich die Anwendungsfall-Diagramme erwiesen (auch hier gilt: Grafiken prägen sich besser ein und sind übersichtlicher als verbale Beschreibungen). In Verbindung mit der Nennung der beteiligten Akteure und einer detaillierten verbalen Beschreibung helfen sie, diese Abläufe in all ihren Einzelheiten in Bezug auf die Anwendung zu erfassen.
Ein in dieser Phase häufig begangener Fehler ist, die Anwendungsfall-Diagramme zur Darstellung des zeitlichen Ablaufs der Geschäfsprozesse zu missbrauchen. Wir wollen eindringlich darauf aufmerksam machen, dass use cases nicht für diesen Zweck geeignet sind! Greift für die Darstellung des zeitlichen Ablaufs bitte auf Sequenzdiagramme (ja, auch schon in dieser Phase!) zurück.
	
Hinweis:
	In der Analysephase wird oft der Fehler gemacht, so viele Use-Case-Diagramme wie
	möglich zu erstellen, um auch jeden noch so kleinen Fall abzudecken. Das
	kann jedoch dazu führen, dass die Diagramme nur noch sehr wenig zum
	Verständnis des Problems beitragen.
	Daher geht es darum, die Diagramme in Form und Anzahl so einfach wie möglich
	zu halten, und dennoch alle wichtigen Fälle zu berücksichtigen.
	Das klingt jetzt ein wenig wie die Quadratur des Kreises. Daher ist auch hier
	die Abstimmung mit dem Tutor sehr wichtig.
	Als Richtlinie könnten zwei bis drei Use-Case-Diagramme gelten, die jeweils
	einen anderen Aufgabenbereich abdecken. Wenn diese jedoch zu groß und unübersichtlich werden,
	dann empfiehlt sich die Aufteilung auf mehrere Diagramme.
	Zeichnet auch nur die Anwendungsfälle ein, die sich klar von anderen abgrenzen.
	Es macht keinen Sinn, die Fälle "kaufe Artikel A" und "kaufe Artikel B" als zwei getrennte
	Fälle einzutragen.
	Auch systeminterne Abläfe, wie z.B. das Prüfen von Parametern, gehören nicht in
	die Use-Case-Diagramme. Bitte verzichtet der Einfachkeit halber auf "include" und "extend" Beziehungen.
	
	
Kunden
        Zunächst einmal wollen wir klären, was wir unter
        Kunden verstehen. Die Kunden unseres Großhandels
        haben nämlich nicht viel mit denen herkömmlicher
        Supermärkte gemeinsam. Besucher unseres Handels sind meistens
        Vertreter (oder Einkäufer) anderer Firmen (gewöhnlich
        Handwerksbetriebe).
        Das folgende Anwendungsfall-Diagramm veranschaulicht die
        Funktionen der Software, die der Kunde nutzt, während er sich im
        Markt aufhält. Es wird anschließend noch ausführlich
        beschrieben.
	

Abbildung 2.1: Kundenbetreuung
	
Anmeldung
        Will nun ein solcher Kunde bei uns einkaufen, betritt er den Markt
        immer am Informationsstand. Daran kommt niemand unbemerkt vorbei. Das
        ist unter anderem eine Art Rezeption, wo sich der Kunde durch Vorzeigen
        seiner Kundenkarte identifiziert. Handelt es sich beim
        Einkäufer um einen neuen Kunden des Großhandels, füllt
        er zunächst ein Formular mit allen kundenrelevanten Daten (u.a.
        die Lieferadresse) aus bevor ihm seine Kundenkarte ausgehändigt
        wird.
        Abschließend wird er mit einem persönlichen Assistenten in
        Form eines PDA ausgestattet, der ihn während seines Einkaufs
        begleitet, ihn über Sonderangebote informiert und seinen
        (virtuellen) Einkaufskorb repräsentiert. Desweiteren bietet der
        PDA dem Kunden während seines gesamten Aufenthaltes im Markt die
        Möglichkeit, seine Kundendaten zu ändern.
	
	
Einkauf
        Wie bereits erwähnt wurde, liegen in den Regalen der Verkaufshalle
        Beispielexemplare der angebotenen Produkte aus. Dort befinden sich
        immer auch Informationstafeln mit den wichtigsten Artikeldaten wie dem
        Preis, dem Hersteller, Anwendungstipps etc.. Diese Liste von Daten kann
        der Kunde nun aber auch über seinen PDA abrufen. Hier bekommt er
        eine Übersicht der Angebotspalette (die er auf dem Display nach
        Produktkategorien filtern und nach Namen sortieren kann) mit den
        jeweils verfügbaren Mengen und dem Stückpreis.
        Die Detailinformationen zu jedem Artikel lassen sich durch
        Auswählen des entsprechenden Artikels anzeigen.
        Sollte der Kunde bereits Exemplare des angezeigten Artikels in seinem
        Einkaufskorb haben, wird die darin befindliche Menge ebenfalls
        angezeigt.
	
	
Einkaufskorb
        Der persönliche Assistent (in Form des PDA) des Kunden stellt
        unter anderem seinen (virtuellen) Einkaufskorb dar. Sowohl aus der
        Artikelübersicht als auch aus der Detailansicht können
        Artikel zum Kauf vorgemerkt werden. Ich betone ganz besonders das
        vorgemerkt, was soviel wie reserviert
        bedeutet. Denn die Produktexemplare verbleiben zunächst im Lager
        an ihrem Platz liegen. Es ist nur vom Computersystem dafür zu
        sorgen, dass die zum Kauf vorgemerkte Menge ab dem Zeitpunkt ihrer
        Markierung für andere Kunden nicht mehr zum Kauf zur
        Verfügung steht. Bevor die Produktexemplare dem Kunden
        gutgeschrieben werden können, muss natürlich
        geprüft werden, ob die von ihm ausgewählte Menge
        überhaupt zur Verfügung steht. Ist das nicht der Fall, wird
        er freundlichst darauf hingewiesen.
	
Von der Übersicht der angebotenen Artikel aus gelangt der Kunde leicht in das Übersichtsfenster seines persönlichen Einkaufskorbes. Hier ist es dem Kunden wieder möglich, sich die Details der Artikel anzuschauen oder den Inhalt seines Warenkorbes zu ändern. Das betrifft zum Einen eine Änderung der eingekauften Produktexemplare und zum Anderen das Löschen eingekaufter Artikel.
	
Bezahlung
        Der einzige Weg aus dem Markt heraus führt an den Kassen vorbei.
        Dort geben die Kunden ihre PDAs ab, deren Daten anschließend vom
        Kassierer abgerufen werden. Nach dem Datentransfer wird der zu
        zahlende Betrag berechnet und ggf. ein Rabatt für treue Kunden
        abgezogen.
        Wenn der Kunde bestätigt hat, den Betrag zahlen zu wollen, kann
        er noch zwischen verschiedenen Zahlungsarten (in Bar oder mit
        Kreditkarte) wählen. Abschließend gibt der Kassierer die
        Artikelliste an das Lager weiter, wo die zuständigen Lagerarbeiter
        über die Lieferung informiert werden.
	
	
Einkauf abbrechen
        Dem Kunden muss es jederzeit möglich sein, den Einkauf
        unverzüglich abzubrechen (seine Gründe dafür sind
        erstmal egal). Es läuft immer darauf hinaus, dass der Inhalt
        seines virtuellen Einkaufskorbes wieder in den Bestand der zum Kauf
        durch Kunden verfügbaren Produkte übergeht und der Kunde am
        Informationsstand (wo er den PDA wieder abgibt) den Markt
        verlässt.
	
	
Auslieferung
        Das Lager ist in verschiedene Produktkategorien eingeteilt und jedem
        Lagerarbeiter ist eine Liste solcher Kategorien zugeordnet, um die er
        sich während seiner Arbeitszeit kümmern muss. Bei
        Lieferung neuer Waren muss er die Exemplare, die seine Kategorie
        betreffen, dort einordnen. Beim Kauf von Artikeln durch Kunden
        sucht er die Artikel zusammen und bringt sie zum,
        vorher vom Kunden angegebenen, Lieferort oder Stellplatz.
	
	
Marktmanagement
	So ein Großhandel läuft natürlich nicht von alleine. Vielmehr
	steht hinter dem ganzen ein ausgeklügeltes Managementsystem.
	Dieses gliedert sich grundsätzlich in drei Teile, die der Übersicht halber
	in einem Use-Case-Diagramm zusammengefasst wurden.
	

Abbildung 2.2: Marktmanagement
	
Personal
        Damit der Großhandel seinen regulären Betrieb überhaupt
        aufnehmen kann, braucht er natürlich Personal.
        Der Manager kümmert sich um das Einstellen, Zuteilen und Entlassen von Mitarbeitern.
	Bei der Einstellung werden die Daten des neuen
        Mitarbeiters in das Computersystem eingegeben. Anschließend wird
        ihm eine Stelle im Markt zugeteilt, an der der "Neue"
        fortan seine Dienste verrichten darf. Bei Lagerarbeitern kommt hinzu,
        dass ihnen bestimmte Kategorien des Lagers zugeteilt werden, die
        sie zu versorgen haben. Kommt es dann doch einmal zu einer Entlassung,
        wird dem Mitarbeiter ein Entlassungsgeld gezahlt, dass auf Basis
        der Dauer seiner Beschäftigung und dem zuletzt gezahlten Gehalt
        berechnet wird.
	
	
Angebot
        Zum Füllen der Regale müssen natürlich zunächst
        Waren vom Marktmanager eingekauft werden.
	Für die Bestellung steht dem Manager
        ein erweiterter Artikelkatalog zur Verfügung (der Katalog des
        Kunden enthält ja nur die im Markt verfügbaren Artikel).
        Hier wählt der Manager die Waren zur Bestellung (direkt beim
        Produkthersteller) aus und kann die Bestellung für einen vom
        Hersteller abhängigen Zeitpunkt zur Lieferung vormerken. Trifft diese dann
        ein, wird sie von Lagerarbeitern beim Tageswechsel kontrolliert und
        die einzelnen Positionen abgehakt. Verspätete Lieferungen oder
        nicht gelieferte Positionen können auf ein späteres Datum
        verschoben oder ganz gestrichen werden.
        Die für den Verkauf von Artikeln wichtigen Daten, wie sein
        Verkaufspreis, können jederzeit vom Manager geändert werden.
        Für die Umsetzung gibt es zwei Alternativen: Die Änderung
        erfolgt sofort und erscheint noch im selben Moment auf allen Anzeigen
        des Marktes (auch die Anzeige des Kunden-Einkaufskorbes wird sofort
        aktualisiert) oder alle Änderungen eines Tages werden erst beim
        Tageswechsel wirksam.
	
	
Inventur
        Es kann ja immer wieder passieren,
        dass ein Lagerarbeiter einen Artikel zuviel verpackt oder bei
        einer Lieferung weniger Waren geliefert werden als bestellt wurden und
        beides, ohne dass es im Datenbestand der Anwendung vermerkt wird.
        
        Für die Durchführung der Inventur muss der Markt
        geschlossen sein. Der Manager wählt verschiedene
        (vertrauenswürdige) Lagerarbeiter für die Kontrollen aus und
        teilt ihnen die Produktkategorien zu, für deren Kontrolle sie
        verantwortlich sein werden. Dort vergleichen sie die Bestände in
        den Lagerregalen mit den Einträgen im Computersystem und vermerken
        Fehlbestände in Listen, die nach der Inventur dem Manager
        ausgehändigt werden.
	
	
Statistiken
        Um den Geschäftsbetrieb besser überwachen zu können, gab
        es schon immer Statistiken und Bilanzen. Unser Auftraggeber ist
        natürlich an einer Umsatzübersicht interessiert, wie auch an
        Verkaufsstatistiken für die verschiedenen Produkte sowie
        Produktkategorien. Mit Statistik ist hierbei gemeint, aufzuzeigen,
        wieviele Artikel in einem gewissen Zeitraum ge- und verkauft wurden.
        Dazu zählt auch eine Übersicht, in der der Manager ablesen
        kann, wie lange in etwa der Bestand eines bestimmten Produktes noch
        reichen wird.
	
Ein orientierendes Kundengespräch
In den vergangenen Tagen haben wir versucht, uns ein Bild von den verschiedenen Geschäftsabläufen zu machen, die in einem Großhandel tagtäglich abgewickelt werden. Nachdem wir die Abläufe verstanden, haben wir versucht, sie so zu modellieren, dass eine Einbettung in unsere Anwendung prinzipiell möglich ist. Da es aber immer gewisse Feinheiten gibt, die man als Laie in so kurzer Zeit unmöglich erkennen kann und es in unserer Wunschliste sicher auch Punkte gab, deren Umsetzung der Kunde gar nicht wollte, setzten wir uns nochmal mit Firmenvertretern zusammen, um eine endgültige Prioritätenliste zusammenzustellen.
	
Streichungen
        Wir präsentierten also unsere Anwendungsfall-Diagramme und
        lieferten einige Erklärungen dazu, wie wir uns den Ablauf
        vorstellen. Dabei wurde von anderer Seite häufig genickt und auch
        manchmal fragend der Kopf geschüttelt, worauf ein reges "Notizen
        machen" folgte. Nach unserer Präsentation gab es deshalb eine
        Menge Fragen und wir kamen zu folgenden Streichungen:
	
- Zunächst müsste die Arbeitsplatzzuteilung des Personals überarbeitet werden. Es wird in Zukunft nicht mehr so sein, dass jeder Lagerarbeiter für einen bestimmten Teil des Lagers (eine oder mehrere Produktkategorien) zuständig ist. Stattdessen bekommen die Lagerarbeiter ihre Aufträge so zugeteilt, wie sie gerade frei sind - wohl aus ökonomischen Gründen.
 - Desweiteren konnte man niemanden finden, der ständig die Informationen über Sonderangebote aktualisieren möchte und man stellte fest, dass eine persönliche Beratung am Informationsstand in diesem Fall mehr Kundennähe bringen würde. Wir merkten aber an, dass bei einer Erweiterung der Anwendung zum Online-Handel eine solche Funktion unbedingt dazu gehört und setzten diesen Punkt auf die Wunschliste mit den Erweiterungen für Version 2.0.
 - Die Durchführung einer Inventur ist ein solch komplexes Unterfangen, dass man in dieser Programmversion dankend darauf verzichtet hat. Auch diese Produktfunktion soll (zusammen mit der Fehlbestandskorrektur durch den Manager) unbedingt für Version 2.0 in Betracht gezogen werden.
 - Die Erstellung der Bilanz ist ein sehr komplexer Vorgang, der weit über die Buchführung des Warenbestandes und der Kassenzettel hinausgeht. Deshalb soll die Anwendung (in dieser Version) nicht damit betraut werden.
 - Ein Warenkatalog wird zentral von den Herstellern verschickt und nicht vom Händler eingegeben. Deshalb bestand hier kein Bedarf an manueller Eingabe von Artikeldaten.
 
	
Fehlende Funktionen
        Schließlich haben wir auch ein paar Funktionen übersehen,
        deren Einarbeitung unbedingt erfolgen muss:
	
- Eine Inventur ist ganz gut und schön. Doch was machen die Lagerarbeiter, wenn sie im laufenden Geschäftsbetrieb einen Fehlbestand im Lager bemerken? Sie müssen die Möglichkeit erhalten, Fehlbestände zu jeder Zeit zu melden und eine Aktualisierung des Datenbestandes der Anwendung herbeizuführen.
 - Eine sehr wichtige Angelegenheit stellt der sogenannte Tagesabschluss dar. Bei Schließung des Marktes werden die Lieferungen des vergangenen Tages entladen (die Lagerarbeiter haben tagsüber genug andere Dinge um die Ohren). Schließlich möchte sich das Management im Rahmen dieses Tagesabschlusses noch die Umsatzstatistik des vergangenen Tages anschauen.
 - In der Analyse sahen wir bisher keine Notwendigkeit für die Verwaltung des Kundenstammes durch den Marktmanager. Die Firma verlangt aber danach, weshalb dem Bereich der Kundenbetreuung noch Funktionen für die übersichtliche Darstellung des Kundenstammes und Bearbeitung der Kundendaten hinzuzufügen sind.
 
Benutzerhandbuch, Version 0.1
Wir haben doch noch gar kein Stück Code geschweige denn irgendeine Oberfläche, die es zu beschreiben gäbe. Wozu also ein Handbuch schon jetzt anfangen? Diese Frage wird sicherlich bei vielen von Euch aufkommen. Dabei liegt die Antwort doch auf der Hand! Was machen wir hier denn? Genau: wir analysieren. Und ein Handbuch ist eine fantastische Möglichkeit dazu - eine häufig nicht beachtete Unterstützung der Analyse. Schließlich wollen wir doch die Fallen, die in der späteren Entwicklung noch auf uns warten möglichst frühzeitig erkennen. Deshalb schreibt man die groben Abläufe und Zusammenhänge diesmal im Blickwinkel des Benutzers der späteren Anwendung auf. Grob deshalb, weil wir ja wirklich noch kein Stück GUI haben.
Aus Gründen der Übersichtlichkeit haben wir das Benutzerhandbuch jeweils aus der Sicht jedes möglichen Nutzers der Anwendung geschrieben. Zunächst wollen wir jedoch die ganz besonderen Eigenheiten des SalesPoint-Frameworks im Bezug auf die Benutzeroberfläche erklären. Sie sind nicht nur für jede Anwendung, die mit dem Framework erstellt wurde einheitlich, sondern auch für jeden der Nutzer unserer Anwendung. Eine Zusammenfassung für alle Nutzer empfiehlt sich also.
Das Anwendungsfenster unterteilt sich zunächst in zwei Bereiche: die Menüleiste und den Rahmen für die vielen verschiedenen SalesPoint-Fenster (mit SalesPoint bezeichnen wir hier tatsächlich den Ort der Interaktion des Nutzers mit der Anwendung und nicht das Framework). Im Anwendungsmenü befinden sich immer Funktionen für die Beendigung der Anwendung und das Starten bzw. Umschalten von/zwischen SalesPoint-Fenstern. Diese können im Rahmenfenster nebeneinander existieren und sich auch überlappen. Jedes dieser internen Fenster kann über ein eigenes Menü für die Funktionen des SalesPoints verfügen.
Zunächst einmal muss sich ein Kunde in der Anwendung als solcher erkenntlich machen. Die Identifikation erfolgt in einem Dialogfenster für die Eingabe von Benutzernamen und Passwort. Sind beide korrekt, bekommt er ein neues Fenster innerhalb des Rahmenfensters geöffnet, in dem sich der Kunden-Salespoint befindet. Von dort aus kann er seine Kundendaten in einem Eingabedialog ändern oder den Einkauf beginnen, wobei er in die Ansicht seines Einkaufskorbes wechselt.
Im Eingabedialog für die Änderung der Kundendaten werden dem Nutzer zunächst die aktuell eingestellten Daten angezeigt. Sie können alle (bis auf die Kundennummer), ja selbst das Geschlecht, nachträglich geändert werden. Nach der Änderung der Daten findet eine Überprüfung der eingegebenen Daten statt und der Kunde wird über dabei aufgetretene Fehler und Unstimmigkeiten mit Hilfe von Meldungsfenstern informiert. Sind die Eingaben schließlich alle korrekt, werden die alten Kundendaten von der Anwendung mit den neuen Eingaben überschrieben.
Entscheidet sich der Kunde für den Einkauf im Großhandel, gelangt er zur Ansicht des Einkaufskorbes mit dem Marktangebot. Dort kann er aus der Liste der Waren, die der Markt momentan anbietet, Produkte mit Angabe der gewünschten Menge in den Einkaufskorb legen und sie auch wieder zurück in den Markt befördern, wo sie anschließend wieder anderen Kunden zum Kauf zur Verfügung stehen. Diesen Prozess kann er beliebig oft wiederholen, bis er sich für das Ende des Einkaufs entscheidet und zur Kasse begibt. Danach wird er in die Kassenwarteschlange eingereiht und wartet auf seinen Aufruf durch den nächsten freien Kassierer.
Nach der Anmeldung bei der Anwendung findet sich der Kassierer in der Übersicht der Kassenwarteschlange wieder. Dort sind alle Kunden aufgelistet, die momentan auf die Bezahlung ihrer gekauften Waren warten. Hier wählt er einen aus und leitet seine Bezahlung ein. Im nächsten Fenster wird eine Zusammenfassung des Einkaufs in Form eines Kassenzettels angezeigt. Den tatsächlich zu bezahlenden Betrag kann der Kassierer aber noch durch die Änderung des Kundenrabattes (der schon vorausberechnet eingetragen wurde) nachträglich verändern. Schließlich kann er noch die Art der Bezahlung, die vom Kunden gewünscht wird, eingeben. Sind alle Eingaben gemacht und die Bezahlung des Geldbetrages durch den Kunden bestätigt worden, wird die Auslieferung der Artikel durch einen Lagerarbeiter in die Wege geleitet. Der Kassierer selbst beginnt von vorn in der Ansicht der Kundenwarteschlange.
Auch der Lagerarbeiter muss sich natürlich erst einmal bei der Anwendung als Nutzer identifizieren. Nach der Auswahl des nächsten zu bearbeitenden Lieferauftrages kommt er zur Ansicht mit der Liste der zu liefernden Waren. Die kann er eine nach der anderen als "geliefert" abhaken oder einen Fehlbestand der Ware an das Management melden. Sind alle Waren geliefert worden, gilt der Lieferauftrag als erledigt und der Lagerarbeiter fährt mit dem nächsten Kunden fort.
Der wichtigste Teil der Benutzeroberfläche des Managers ist die Verwaltung der vom Großhandel angebotenen Waren. In einem Fenster kann er deshalb aus der Liste aller Artikel Produktexemplare für den Kauf durch den Großhandel auswählen. Er hat einen ähnlichen Einkaufskorb wie der Kunde und wählt neben dem Artikel selbst auch die Anzahl der zu liefernden Exemplare aus. Ist er mit dem Einkauf fertig, werden die Bestellungen abgeschickt und das Geld vom Marktkonto abgezogen. Die Waren stehen dem Markt dann nach Ablauf der Lieferdauer zur Verfügung. Zum Angebot gehört auch die Verwaltung des Produktkatalogs. Verschiedene Daten der angebotenen Artikel, u.a. der Verkaufspreis oder dessen Beschreibung können dort vom Manager geändert werden.
Die Verwaltung des Personalstammes beginnt mit einer Auflistung des im Markt angestellten Personals. Aus dieser Liste kann der Manager einen Eintrag/Mitarbeiter auswählen und seine Daten in einem entsprechenden Eingabedialog ändern. Desweiteren ist die Entlassung eines zuvor ausgewählten Mitarbeiters möglich wie auch die Neueinstellung von Personal. Dazu wird dem Manager ein Dialogfenster präsentiert, wo er die Personaldaten des neuen Mitarbeiters eingeben kann. Der "Neue" erscheint fortan in der Liste des Personals und versieht seinen Dienst im Großhandel.
Sicher stehen dem Manager auch Mittel zur Verwaltung des Kundenstammes zur Verfügung. Aus einer Liste aller Kunden, mit denen der Markt zu tun hat, kann er Manager wieder einen Eintrag für die weitere Bearbeitung auswählen. In einem Dialogfenster für die Bearbeitung der Kundendaten kann beispielsweise der dem Kunden gewährte Treuerabatt geändert werden. Auch die Beendigung der Geschäftsbeziehung zum Kunden ist möglich.
Abschließend beinhaltet der Manager-SalesPoint auch zwei Funktionen zum Öffnen und Schließen des Marktes bzw. deren Ankündigung für die Mitarbeiter und Kunden um sich auf das Ereignis vorzubereiten. Die statistischen Übersichten stehen hier ebenso zur Verfügung.
Das Pflichtenheft
        All unsere bisherigen Bemühungen kommen nun in einem Pflichtenheft
        zum Ausdruck, das eine detaillierte verbale Beschreibung aller
        Anforderungen beinhaltet, die von uns und dem Auftraggeber an das zu
        erstellende Produkt gestellt werden. Dieses Dokument ist eines der
        wichtigsten Artefakte, die im Laufe der Entwicklung erstellt werden, und
        sollte dementsprechend sorgfältig geschrieben werden. Es stellt
        quasi den Vertrag dar, den unsere Firma mit dem Auftraggeber
        vereinbart. Er wird vom Auftraggeber unterschrieben, der sich damit
        verpflichtet uns für alle im Pflichtenheft enthaltenen Punkte zu
        bezahlen. Er muss uns allerdings nur dann bezahlen, wenn wir
        unseren Teil der Vereinbarung korrekt und vor allem vollständig
        erledigen (d.h. alle Punkte des Pflichtenheftes in das Produkt
        integrieren).
        Noch eine wichtige Bemerkung: nachträgliche Änderungen der
        Analysephase sollten sich in einer neuen Version des Pflichtenheftes
        wiederfinden, die ebenfalls vom Auftraggeber durch seine Unterschrift
        abgesegnet werden muss.
	
        Kommen wir nun zur Gliederung des Dokuments. Wie so oft, gibt es auch
        hier einen
        
          Industriestandard (VDI/VDE), der für unsere Zwecke allerdings unpassend
        und viel zu kompliziert ist. Es gibt eine Vereinfachung, die von Professor Balzert
        vorgeschlagen wurde und an die wir uns im Praktikum halten werden. Sie
        ist auch in seinem Buch "Lehrbuch der Software-Technik"
        auf den Seiten 114 ff. näher beschrieben. Auszüge daraus wurden in einer
        Übersicht über das Pflichtenheft
        zusammengestellt.
	
Wir haben natürlich auch ein Pflichtenheft der Anwendung erstellt, in eine vorzeigbare Form gebracht und mit dem Kunden durchgesprochen. Nachdem er keine Einwände dagegen hatte, gibt es nun einen gültigen Vertrag und wir können uns weiter der Analyse des Aufgabenbereichs widmen.
Anwendung der CRC-Karten Methode
Es gibt einen Abschnitt in der Analyse, der die Geduld der Entwickler auf eine harte Probe stellt. Bekanntlich werden Interaktionsdiagramme (also Sequenz- und Kollaborationsdiagramme) gezeichnet um die Beziehungen und den Nachrichtenfluss zwischen Objekten und den zeitlichen Ablauf von Aktionen darzustellen. Für seine Visualisierung stellen diese Diagrammtypen das absolute Optimum dar. Ihr großes Handycap ist aber die umständliche Nutzung und Erstellung. Das sticht besonders beim Ausprobieren verschiedener Alternativen bei der Umsetzung von Produktfunktionen hervor. Denn entweder muss man viel radieren und neuzeichnen oder exzessiven Gebrauch von der <ENTF>-Taste in CASE-Tools machen und die Objekte hinterher wieder neu zusammenklicken (was eigentlich nicht weniger aufwendig ist als die Papiervariante). Dies setzt vor allem das Vorhandensein von CASE-Tools bzw. die Existenz einer einheitlichen Diagrammsprache voraus.
Beides war gegen Ende der 80er Jahre in den Tektronix-Laboratorien (damals eines der größten Zentren der Objekttechnologie) nicht vorhanden. Der Zwang immer komplexere Projekte zu Visualisieren führte zur Entwicklung der CRC-Karten-Methode. Man erkannte auch schnell, dass die Verwendung dieser einfach zu erstellenden Kärtchen die Diskussion unter den Entwicklern fördert und sie sich prima für "brainstorming-sessions" eignen. Diese Sitzungen sind eine feine Sache in vielerlei Hinsicht. Sie fördern nicht nur die Zusammenarbeit im Team (und machen nebenbei bemerkt eine Menge Spaß) sondern sorgen auch dafür, dass die Ideen jedes einzelnen Mitarbeiters in das Projekt einfließen können und er sich fortan damit identifiziert (und deshalb evtl. härter mitarbeitet). Und schließlich sehen drei bis vier Augenpaare mehr als nur eins, oder?
Die Verwendung der CRC-Karten wurde bereits in der Vorlesung vorgestellt, weshalb wir an dieser Stelle nicht weiter darauf eingehen wollen und sofort mit den Karten für den Großhandel fortfahren.
		     
![]() Abbildung 2.3: Markt  | 
		
		     
![]() Abbildung 2.4: Warenkatalog  | 
	     
		      
![]() Abbildung 2.5: Artikel  | 
		
		     
![]() Abbildung 2.6: Hersteller  | 
	     
		     
![]() Abbildung 2.7: Manager  | 
		
		     
![]() Abbildung 2.8: Bestellung  | 
	     
		     
![]() Abbildung 2.9: Buchhaltung  | 
		
		     
![]() Abbildung 2.10: Warenlager  | 
	     
		     
![]() Abbildung 2.11: Mitarbeiter  | 
		
		     
![]() Abbildung 2.12: Kasse  | 
	     
		     
![]() Abbildung 2.13: Kassierer  | 
		
		     
![]() Abbildung 2.14: Kassenzettel  | 
	     
		     
![]() Abbildung 2.15: Lagerarbeiter  | 
		
		     
![]() Abbildung 2.16: InfoStand  | 
	     
		     
![]() Abbildung 2.17: Kunde  | 
		
		     
![]() Abbildung 2.18: Einkaufskorb  | 
	     
Modellierung komplexer Abläufe - Sequenzdiagramme
Der Sinn von Sequenzdiagrammen ist klar. Sie sind in der Lage, die meisten komplizierten, zeitlichen Abläufe und Nachrichten zwischen den Objekten zu verdeutlichen, was uns mit den Anwendungsfall-Diagrammen nicht so recht gelingen will. Sie erleichtern das Verständnis von Abläufen im System enorm. Beim Durchspielen der CRC-Karten solltet ihr ja bereits auf einige Abläufe gestoßen sein. In reiner Textform sind diese jedoch schwer zu verstehen. Zudem werden Faktoren wie die Lebensdauer von Objekten oder Aufrufe des Objektes an sich selbst schwer erkennbar. Sequenzdiagramme helfen dabei, eine gewisse Ordnung in das System zu bringen. Man kommt weg vom abstrakten Klassen-Gedanken und hin zum Hantieren mit Objekten. Dies erleichtert vielen das Verständnis des Problems. Insbesondere, wenn ihr dem Auftraggeber die wichtigsten Abläufe mal eben kurz darstellen wollt/müsst, sind Sequenz-Diagramme Gold wert. Neben den eben genannten Punkten kann man an ihnen auch schwierig zu ortende Analysefehler ausfindig machen, die weder auf den CRC-Karten noch in den Use-Cases sichtbar sind. Sie werden zum Teil überhaupt erst durch die zeitliche Darstellung sichtbar.
Viele der hier gezeigten Sequenzdiagramme entstanden bereits während der Erstellung der CRC-Karten als Unterstützung in den brainstorming-sessions. Es ist aus oben genannten Gründen eine gute Idee, sie dort bereits anzulegen. Dazu kommt noch der Fakt, dass diese Sitzungen zumeist heiter und gelockert ablaufen und die langwierige Erstellung dieser Diagramme damit leichter fällt.
	
Hinweis:
	Spätenstens jetzt werden sich viele die Frage stellen, wie viele Sequenzdiagramme denn
	erstellt werden sollen, und wie man aus der Unendlichkeit der möglichen Diagramme die
	richtigen auswählt. Zur Anzahl lässt sich keine allgemeingütige Aussage machen.
	So wenig wie möglich, aber so viele wie nötig. Hier hilft wieder nur eine Absprache
	mit dem Betreuer. Was die Frage der Auswahl betrifft, so hat sich die Auswahl eines Use-Cases
	und das Darstellen mehrerer alternativer Szenarien an diesem als hilfreich heraus gestellt.
	Somit sind die folgenden Sequenzdiagramm ein wenig als Overkill anzusehen, auch wenn sie euch
	sicher dabei helfen können ein Gefühl für die Sequenzdiagramme zu bekommen.
	
	
Einkauf durch den Manager
        Das erste erstellte Sequenzdiagramm beschreibt den Einkauf neuer
        Artikel für den Großhandel durch den Marktmanager. Er
        fängt damit an, vom Markt eine Referenz auf den Warenkatalog zu
        holen (der Markt hat mehr oder weniger direkt Zugang zum gesamten
        Datenbestand der Anwendung). Von dem lässt er sich dann die
        Übersichtsliste aller verfügbaren Artikel aus dem Katalog
        nach Kategorien und anschließend nach Namen sortiert erstellen
        und anzeigen. Der Katalog greift dazu auf die Informationen zu, die in
        seinen Artikel-Objekten gespeichert sind, die wiederum Informationen
        über den Hersteller enthalten. Aus der nun vorhandenen
        Übersichtsliste wählt der Manager einen Artikel aus und
        lässt sich vom Warenkatalog eine Referenz darauf
        zurückgeben. Er gibt dem Katalog dazu lediglich den Artikelnamen,
        der daraufhin seinen Artikelbestand auf der Suche nach dem Zielobjekt
        durchgeht und einen Namensvergleich durchführt. Mit dem Zugriff
        auf das einzelne Artikelobjekt kann sich der Manager nun eine Maske mit
        Detailinformationen zum Artikel erstellen und diverse Überlegungen
        zum Kauf anstellen. Will er nun eine bestimmte Menge an Artikeln
        kaufen, muss er nur einen Button in dieser Maske betätigen
        und in einem Eingabeformular die Menge der zu kaufenden Waren eingeben.
        
		
			
![]()
Abbildung 2.19: Einkauf durch den Manager
        Das löst eine Funktion im Warenkatalog aus, der mit Hilfe der
        Artikelinformationen den Einkaufspreis für diese Menge berechnet
        und die Liquidität (Zahlungsfähigkeit) des Marktes daraufhin
        prüft. Ist sie gewährleistet wird automatisch (am besten nach
        nochmaliger Bestätigung) das Geld vom Marktkonto abgezogen (ja,
        gezahlt wird im Voraus) und mit Hilfe der im Artikel gespeicherten
        Herstellerinformationen die Lieferdauer ermittelt. Sind alle
        Berechnungen getätigt, wird ein neues Objekt des Typs Lieferung
        erstellt und in den Lieferlisten des Marktes abgelegt.
	
	
Produktpalette bearbeiten
        Hierbei geht es um die Bearbeitung der spezifischen Verkaufsdaten eines
        Artikels aus dem Warenlager (nicht dem Warenkatalog!). Dessen
        Informationen sind ebenfalls über den Markt zugänglich, den
        wiederum alle Anwendungsobjekte kennen sollten. Der Manager holt sich
        also zunächst eine Referenz auf das Warenlager direkt beim
        Markt-Objekt ab und lässt sich darüber eine
        Inhaltsübersicht (die ähnlich gestaltet ist und genauso
        aufgebaut wird wie die Übersicht des Warenkatalogs) des Lagers
        anzeigen. Nochmal: hier sind nur die Artikel enthalten, von denen
        mindestens ein Exemplar im Lager vorhanden ist. Da diese Information
        ziemlich wichtig ist, wird zur Kurzbeschreibung des Artikels auch noch
        die Anzahl der im Lager verfügbaren Exemplare angezeigt.
        
		
			
![]()
Abbildung 2.20: Produktpalette bearbeiten
        Wieder wählt der Manager aus dieser Liste den Artikel aus, der
        für ihn von Interesse ist und gelangt damit zu dessen
        Detailansicht - einer Maske, die diesmal auch Felder enthält, die
        editierbar sind. Eines davon ist der Verkaufspreis, den die Kunden im
        Großhandel für ein Exemplar des Artikels bezahlen
        müssen. Die Eingabe eines neuen Verkaufspreises wird vor dessen
        Speicherung zunächst auf ihre Gültigkeit hin geprüft.
        Ungültige Preise könnten zum Beispiel negative Werte sein
        oder Werte mit mehr als zwei Nachkommastellen oder exorbitant hohe Werte,
        die irgendwo bei 500% über dem vom Hersteller empfohlenen
        Verkaufspreis liegen. Bei ungültigen Eingaben erfolgt keine
        Speicherung und der Manager bekommt den Grund dafür in einem
        Meldungsfenster angezeigt.
	
	
Einkauf durch den Kunden
        Der Kunde hat, wie auch der Manager, immer einen Zugang zum Markt (also
        eine Referenz auf das Markt-Objekt verfügbar), über den er
        sich jetzt das Warenlager des Marktes holt und das Marktangebot
        anzeigen lässt. Dabei handelt es sich um dieselbe
        Produktübersicht wie die des Managements, jedoch mit
        Zusatzinformationen zur Anzahl der angezeigten Artikel im Einkaufskorb
        des Kunden. Nach der Auswahl eines der Artikel wird mit Hilfe des
        Artikelnamens im Warenlager-Objekt nach dem entsprechenden
        Artikel-Objekt gesucht und dieses an den Kunden zur Anzeige von dessen
        Detailinformationen zurückgegeben.
        
		
			
![]()
Abbildung 2.21: Einkauf durch den Kunden
        Entscheidet sich der Kunde zum Kauf eines Artikels, gibt er
        zunächst in einem Eingabefenster die Menge der Produktexemplare
        ein, die er in seinem virtuellen Einkaufskorb wiederfinden will. Wenn
        diese Menge nicht verfügbar ist, wird der eingegebene Wert
        korrigiert und der Kunde über diese Korrektur informiert. Jetzt
        wird etwas deutlich: Das Warenlager speichert (anders als der
        Warenkatalog) Zusatzinformationen zu jedem gespeicherten Artikel-Objekt
        - seinen Bestand und den im Markt zum Kauf zur Verfügung stehenden
        Bestand. Zwei (immer positive) Ganzzahlen. Der zweite von beiden wird
        nun korrigiert, damit sich andere Kunden nicht auch Produktexemplare in
        ihren Einkaufskorb legen, die im Lager gar nicht mehr zur
        Verfügung stehen sollten. Schließlich wird die Menge der
        Exemplare im Einkaufskorb korrigiert und der Kunde kann den Einkauf
        fortstetzen.
	
	
Bezahlung an der Kasse
        Der Moment der Wahrheit für den Kunden. Durch die Mitteilung an
        seinen virtuellen Einkaufskorb, dass er mit dem Einkauf fertig
        ist, leitet der die Bezahlung ein. Er besorgt sich vom Markt eine Liste
        aller verfügbaren Kassen (Kassen gelten als verfügbar, wenn sie
        sowohl offen, also mit einem Kassierer besetzt, als auch frei ist, sich
        also keine Kunden in der Warteschlange befinden).
	Offene und freie Kassen überprüfen dauernd ihre Warteschlangen nach
        Kunden und fertigen diese nach dem FIFO-Prinzip
        (first in, first out) ab. Der Kunde übergibt
        nun dem Kassierer seinen PDA mit dem virtuellen Einkaufskorb, der aus den
        dort gespeicherten Informationen den zu bezahlenden Preis berechnet.
        Zusätzlich zu den Artikelinformationen zieht der Kassierer hierbei
        noch die Rabattliste des Marktes zu Rate, aus der er den zu
        gewährenden Treuerabatt berechnet. In dieser Liste sind
        verschiedene Einkaufsvolumina (Summe aller bisher von dem Kunden im
        Markt bezahlten Rechnungen) gewissen Rabatten zugeordnet. Sind
        alle Informationen zusammengeholt, erstellt die Kasse daraus den
        Kassenzettel mit Kurzinformationen zu jedem Artikel im Einkaufskorb und
        dessen Verkaufspreisen bzw. Mengen und anderen nützlichen
        Informationen, wie das aktuelle Datum und die Uhrzeit des Einkaufs.
        
		
			
![]()
Abbildung 2.22: Bezahlung
        Nun ist es wieder am Kunden in Aktion zu treten. Nach Sichtung des
        Kassenzettels wählt er zwischen Barzahlung und Bezahlung mit
        Kreditkarte. Bei der Bezahlung mit Bargeld prüft er zunächst
        den Inhalt seines Portemonnaies und übergibt dem Kassierer (bei
        Vorhandensein der entsprechenden Geldmenge) einen Betrag. Aus dem
        berechnet die Kasse wiederum das Rückgeld und erstellt einen
        vervollständigten Kassenzettel mit den Informationen zur
        Bezahlung. Die Bezahlung mit Karte läuft einfacher ab. Sie wird
        lediglich von der Kasse auf ihre Gültigkeit hin
        überprüft, wonach der Auftrag zur Überweisung der
        Geldsumme an das entsprechende Kreditinstitut geht. Nach der Bezahlung
        erfolgt der Auftrag an die Lagerarbeiter des Marktes zur Auslieferung
        der Kundenwünsche an einen von ihm zu wählenden Ort
        (Stellplatz auf dem markteigenen Parkplatz oder externe Lieferadresse,
        die vorher zusammen mit den Kundeninformationen eingeben wurde).
        
	
Hinweis:
	Die Erstellung des Kassenzettels, die Abwicklung der Kartenzahlung sowie
	die Auslieferung an eine externe Lieferadresse wurden später im Entwurf
	und der Implementierung nicht umgesetzt.
	
Fertig! Das Klassendiagramm der Analyse
	Durch das Durchführen des CRC-Karten-Spiels sollten alle wichtigen Klassen
	und ihre Abhängigkeiten ermittelt sein. Da die Abhängigkeiten jedoch nicht
	klar aus den CRC-Karten zu sehen sind, muss man die CRC-Karten noch in ein Klassendiagramm
	überführen.
	Dabei ist speziell auf die Multiplizitäten einzugehen.
	Es kommt vielfach die Frage auf, wozu man denn ein Klassendiagramm benötigt. Der
	Kunde hat doch die Use-Case-Diagramme, und kann mit einem Klassendiagramm sowieso nichts
	anfangen, da es viel zu technisch ist. Ein Klassendiagramm zu diesem Zeitpunkt macht aus
	vielerlei Sicht Sinn. Der wichtigste Grund ist die Vorbereitung und die Planung für
	den späteren Entwurf. Im Analyse-Klassendiagramm könnt ihr auf einen Blick die
	fachliche Problematik eures Projektes erfassen. Das Entwurfsklassendiagramm was später
	Grundlage für den Entwurf wird ist im wesentlichen eine Erweiterung eures Analyse-Diagrammes
	um Salespointbestandteile (natürlich auch eine Verfeinerung des Diagramms). Ein weiterer
	Grund ist die Einführung einer Nomenklatur. Oft kommt es zu Problemen im Team, wenn man
	Begriffe verwendet, die nicht klar definiert sind. Durch das Klassendiagramm legt ihr euch auf
	Namen für eure Klassen fest, und über die Methoden und Attribute auch über die
	Inhalte der Klassen. Es sollten also keine Unklarheiten mehr darüber existieren was das
	Programm genau macht und wie es das macht.
		
			
![]()
Abbildung 2.23: Statisches Analyse-Klassendiagramm
        Fangen wir also mit dem Einkauf neuer Waren durch den Manager an. Wir
        brauchen zunächst einmal den Manager selbst, der ein Mitarbeiter
        ist. Um die Übersichten anzuzeigen, liest er den Inhalt des
        Warenkatalogs. Detailinformationen bekommt er aber erst durch direkten
        Zugriff auf die Artikel selbst, die im Katalog gespeichert sind. Unter
        den vielen verschiedenen Artikelinformationen sticht besonders der
        Hersteller hervor, der für eine Reihe von Artikeln gleich ist und
        auch wegen seiner zahlreichen spezifischen Eigenschaften einen eigenen
        Typ bekommen hat. Entscheidet sich der Manager für den Kauf von
        Artikeln, wird eine neue Bestellung angelegt. Diese Bestellungen
        zählen die Artikel auf, die der Manager gekauft hat und ordnen
        jedem einzelnen seine Anzahl zu. Dadurch das jede Bestellung nur Waren
        eines einzigen Herstellers beinhaltet, ist sie indirekt auch diesem
        zugeordnet. Getätigte Bestellungen wandern in die Buchhaltung, die
        wie das Warenlager ein fester Bestandteil des Marktes ist.
	
Das Warenlager lagert die vom Manager gekauften Artikel und ordnet jedem Artikel aus dem Warenkatalog seinen aktuellen Verkaufspreis und die gelagerte Anzahl zu. Es wird von den Lagerarbeitern (ebenfalls Mitarbeiter) verwaltet, die von der Kasse die Informationen zum Einkaufskorb des Kunden zugespielt bekommen um die Lieferung mit den gekauften Produkten des Kunden zusammenzustellen. Kunden melden sich beim Betreten des Großhandels am InfoStand an, der alle Informationen dafür bereithält und u.a. den Kundenstamm speichert. Er rüstet nach der Anmeldung den Kunden mit seinem PDA (dem virtuellen Einkaufskorb) aus und ist ein weiterer wichtiger Bestandteil des Marktes. Wie bereits erwähnt wurde, besitzen Kunden für die Dauer ihres Aufenthaltes im Markt einen Einkaufskorb, den sie hoffentlich reichlich füllen. Bezahlt wird schließlich an der Kasse, die (im offenen Zustand) von einem Kassierer bedient wird. Sie stellt die Kassenzettel aus, die dem Kunden ausgedruckt werden und anschließend in der Kasse und (nach dem Tagesabschluss) in der Buchhaltung zur späteren Verwendung (Erstellung von Statistiken für das Management) gespeichert werden.
  Einleitung | Durchführung der Entwurfsphase ![]()  | 
















 Einleitung