5.2 Die Klasse Bestellung

 

 

Das Herz der Klasse "Bestellung" ist eine Liste von Bestellposten. Von ihr abgeleitet sind die zwei Klassen "Kundenbestellung", die den Bestellungen der Kunden entsprechen, "Nachbestellungen", sie entsprechen den eigenen Nachbestellungen bei Lieferanten. Die Klassen "NachbestellungenKartei" und "KundenbestellungenKartei", die jeweils eine Liste des zugehörigen Bestellungstyps sind, werden mit Hilfe der Klasse "Liste" erzeugt.

Die Klasse Bestellung ist in diesem Programm implementiert in der Header-Datei "JWI_Klassen_Bestellung.h" und der Datei "JWI_Klassen_Bestellung_Implementation.cpp", die die Implementierung der Operationen enthält. Sie hat im implementations-Modell folgend Form:

Attribute:

int bnr

int gnr

Datum datum

int bearbeitet

BestellpostenListe postenliste

 

Operationen:

Bestellung(int bestellungsnr=0, int geschaeftspartnernr=0)

~Bestellung()

void DatenAendern()

int HoleBestellungsNr()

datumzeiger HoleDatum()

BestellpostenListe HoleBestellpostenListe()

boolean HoleBearbeitet()

void PostenAnhaengen(Bestellposten bestposten)

void SetzeBearbeiten()

 

 

5.2.1 Veränderungen zum ursprünglichen Modell

Im ursprünglichen Modell existierte keine Klasse Bestellung. Jedoch haben die beiden Klassen "Kundenbestellung" und "Nachbestellung" identische Attribute und identischen Operationen zur Abfrage von Attribut-Werten. Diese sind in diesem Modell neu hinzugekommen. Weiterhin ist eine Operation zum Setzten des Attributes "bearbeitet" identisch. Deshalb bot es sich an, diese beiden Klassen zu einer Oberklasse Bestellung zusammenzufassen. Da im Falle einer Bestellung der Bildschirmdialog zur Eingabe der Daten für Bestellungen von Kunden als auch eigene Bestellungen an Lieferanten leicht verschieden sind, ist die Operation Neu den abgeleiteten Klassen zugeordnet worden.

Eine weitere Veränderung der Klassen Bestellung, Kunden- und Nachbestellung zum ursprünglichen Modell ist die, daß jeder einzelnen Bestellung in einer Liste vollständiger Bestellposten zugewiesen werden und nicht nur Verweise auf sie. Dadurch muß in dem Objekt der Klasse Verwaltung keine Liste von Bestellposten mehr geführt werden. Diese hat den Vorteil, daß sich in der Klasse Verwaltung viele Such-Durchläufe einsparen lassen, was bei einer Speicherung von Referenzen unvermeidbar gewesen wäre.

Da es für die Erzeugung einer Bestellung, egal ob Kunden- oder Nachbestellung, am einfachsten ist, die sukzessiven eingegebenen Bestellposten einfach an die Bestellung anzuhängen, hat die Oberklasse eine Operation "PostenAnhaengen" bekommen. Im ursprünglichen Modell sollte eine solche Operation nur für die Klasse Nachbestellung existieren. Aufgrund der Vererbungseigenschaften von Klassen besitzt jetzt jedoch auch die Klasse Kundenbestellung eine solche Operation.

Zu beachten ist, daß alle Attribute der Klasse Bestellung als public deklariert werden müssen, da sonst von den abgeleiteten Klassen nicht auf sie zugegriffen werden kann (vgl. 5. Implementation der Klassen und ihr Vergleich mit derjenigen des ursprünglichen Modells).

Weiterhin ist die Klasse Bestellung um eine Operation zur Änderung alter Daten erweitert worden, die - wie immer bei dieser Art von Operation – es zuläßt, einzelnen Daten über einen Bildschirmdialog zu ändern.

Bemerkung: Das Attributes "bearbeitet" ist in dieser Implementation als Integer deklariert worden, da C++ keinen Boolean-Typen direkt zur Verfügung stellt, wie es im ursprünglichen Modell vorgesehen war.

 

 

5.2.2 Abgeleitete Klassen

Wie erwähnt bildet die Klasse Bestellung die Oberklasse der folgenden abgeleiteten Klassen. Aufgrund der Vererbung übertragen sich alle Attribute und Operationen der Oberklasse auf die abgeleiteten Klassen. Es ist lediglich zu beachten, daß die Attribute der Oberkasse, auf die in den abgeleiteten Klassen direkt zugegriffen werden soll, als public deklariert sein müssen. Geschieht dieses nicht, ist kein direkter Zugriff der Operationen der abgeleiteten Klassen auf die Attribute der Oberklasse möglich.

Um den Zugriff auf das Attribut "Nummer des Geschäftspartners" (gnr) für die Objekte der Klassen "Kundenbestellung" und "Nachbestellung" eindeutiger zu gestalten, sind die jeweiligen Operationen nicht in der Oberklasse sondern in den abgeleiteten Klassen als "HoleKundenNr" bzw. "HoleLieferantenNr" implementiert worden.

Bis auf die Operation "PostenAnhaengen", die in diesem Modell auch für die Klasse Kundenbestellung existiert, habe sich somit keine Veränderungen zum ursprünglichen Modell ergeben.

Bemerkung:

Es war möglich die Operation "Drucken" direkt in der Klasse Nachbestellung zu implementieren, da diese Operation nur auf Attribute dieser Klasse zugreift. Im ursprünglichen Entwurf wäre die Einbindung der Operation "Drucke" in die Klasse Nachbestellung jedoch nicht möglich gewesen. Dieses liegt daran, daß im implementierten Modell vollständige Bestellposten zu den Attributen der Klasse Nachbestellung gehören. In der Form des ursprünglichen Entwurfs, in dem nur verweise auf Bestellposten gespeichert werden sollten, hätte ein Objekt der Klasse Nachbestellung nicht auf die benötigte Liste der Bestellposten, die in der Klasse Verwaltung geführt worden wäre, zugreifen können. Damit wäre es nicht möglich gewesen die Nachbestellung zu drucken.

 

 

5.2.2.1 Die Klasse Kundenbestellung

Die Klasse Kundenbestellung besteht aus den gleichen Dateien und der gleichen Aufteilung dieser Dateien wie die Klasse Bestellung. Aufgrund der Vererbungseigenschaft und der public Deklaration der Attribute in der Klasse Bestellung hat sie zusätzlich zu den Attributen und Operationen der Oberklasse noch die nachfolgend genannten Operationen:

 Kundenbestellung(int bestellungsnr=0, int geschaeftspartnernr=0)

~Kundenbestellung()

int HoleKundenNr()

void Neu(int bestellungsnr)

Eine eigene Klassendefinition war somit nur notwendig, um den Bildschirmdialog zur Eingabe einer neuen Kundenbestellung auf diesen Bestellungstypen anzupassen. Würde auf diese Eindeutigkeit verzichtet, hätte die Operation "Neu" auch in die Oberklasse mit eingebunden werden können. Damit wäre diese abgeleitete Klassen nicht mehr notwendig gewesen. 

 

 

5.2.2.2 Die Klasse Nachbestellung

Die Klasse Nachbestellung besteht ebenfalls aus den gleichen Dateien und der gleichen Aufteilung dieser Dateien wie die Klasse Bestellung. Auch hier werden aufgrund der Vererbungseigenschaft und der public Deklaration der Attribute in der Klasse Bestellung zusätzliche Operationen zu denjenigen der Oberklasse zu Verfügung gestellt:

 Nachbestellung(int bestellungsnr=0, int geschaeftspartnernr=0)

~Nachbestellung()

int HoleLieferantenNr()

void Neu(int bestellungsnr)

void Drucken()

Aufgrund der Operation "Drucken" war für die Klasse Nachbestellung eine eigene Klassendefinition notwendig. Für die Operation "Neu", wäre eine eigene Klassendefinition nicht notwendig gewesen, da Nachbestellungen rein System intern erzeugt werden.