Objektorientierte Programmierung
LVA 185.162, VL 2.0, 2010 W
2. Laborübungsaufgabe
Themen:
Aufwandsabschätzung, Programmiereffizienz, Untertypbeziehungen und dynamisches Binden
Termine:
| Ausgabe: |
20.10.2010 |
| reguläre Abgabe: |
27.10.2010, 13:45 Uhr |
| nachträgliche Abgabe: |
03.11.2010, 13:45 Uhr |
Abgabeverzeichnis:
Gruppe/Aufgabe2
Programmaufruf:
java Test
Grundlage:
Skriptum bis Seite 58
Aufgabe
Welche Aufgabe zu lösen ist:
Erweitern Sie Ihre Lösung der
ersten Aufgabe so, dass die Lagerverwaltung in der Praxis besser verwendbar wird.
Von Anwendern des Systems werden unten aufgezählte Erweiterungen für sinnvoll oder notwendig erachtet.
Diese Aufzählung ist einerseits noch unvollständig, andererseits aber bereits so umfangreich, dass in der vorgegebenen Zeit bei weitem nicht alles umsetzbar ist.
Ihre Aufgabe besteht darin, die Ihrer Meinung nach wichtigste Teilmenge der benötigten Funktionalität zu wählen und in Programmcode umzusetzen.
- Alle Daten, die hinzugefügt werden können, sollen, wenn Abhängigkeiten dies erlauben, auch wieder entfernt werden können.
- Lagerbestände sind auf mehrere Lager (Zentrallager sowie Lager in einzelnen Filialen) aufzuteilen.
Dabei sind auch Verschiebungen der Lagerbestände von einem Lager in ein anderes möglich.
- Neben Lagerbeständen sind auch Bestellungen zu verwalten.
Das können Bestellungen bei Lieferanten, Bestellungen von Kunden oder geplante Verschiebungen von einem Lager in ein anderes sein, und die erwarteten Zeitpunkte für den Lagerein- bzw. -ausgang sind zu berücksichtigen.
Dadurch sollen nicht nur aktuelle Lagerbestände abrufbar sein, sondern auch erwartete Lagerbestände in der Zukunft.
- Es wird zwischen tatsächlichen Lagerbeständen und verfügbaren Lagerbeständen unterschieden.
Ziel ist es sicherzustellen, dass für einen bestimmten Zeitpunkt bestellte Produkte zu diesem Zeitpunkt auch in ausreichender Menge vorhanden sind.
In einem Lager vorhandene Ware ist nicht verfügbar, wenn aufgrund einer Bestellung ein entsprechender Lagerausgang ohne zwischenzeitlichen Lagereingang erwartet wird.
- Es sind auch aktuelle Verkaufspreise, Einkaufspreise und (fiktive) Lagerhaltungskosten pro Produkt zu verwalten, wobei Lagerhaltungskosten auch abhängig von Lagerbestand, Lagerungsdauer und Verpackungsgröße definiert sein können.
Preise und Lagerhaltungskosten können auch für ganze Produktgruppen festgelegt werden.
- Konfigurationen (siehe Aufgabe 1) können mit Verkaufspreisen und Lagerhaltungskosten versehen sein, die sich von denen der einzelnen Produkte unterscheiden.
Außerdem können Konfigurationen als Bestandteile weitere Konfigurationen enthalten.
- Konfigurationen können als Bestandteile auch Produktgruppen enthalten.
Beim Zusammenbau von Geräten entsprechend den Konfigurationen sind jene verfügbaren Produkte der Produktgruppen zu wählen, bei denen die Einkaufspreise abzüglich der Lagerhaltungskosten am niedrigsten sind.
- Kunden bekommen die Möglichkeit, über ein leicht zu bedienendes Interface auf aktuelle Verkaufspreise, verfügbare Lagerbestände in den einzelnen Filialen und gegebenenfalls erwartete Lieferzeiten zuzugreifen.
- Es muss sichergestellt sein, dass Benutzer nur jene Art von Zugriff auf Daten erhalten, die sie benötigen.
Beispielsweise dürfen Kunden keinerlei Änderungen an Daten vornehmen und keinen Lese-Zugriff auf Einkaufspreise, Handelsspannen und ähnlich sensible Daten bekommen.
Verkäufer dürfen Daten nur auf für Verkäufe typische Weise ändern, und das nur wenn gleichzeitig entsprechende Belege (z.B. Rechnungen) angefertigt werden.
Nur die Administration bekommt Zugang zu allen Daten.
- Daten für die Zugangskontrolle sind zu verwalten.
- Alle Lese-Zugriffe auf sensible Daten und Änderungen von Daten sind auf solche Weise zu protokollieren, dass Manipulationen der Protokolle so weit wie möglich ausgeschlossen werden.
- Daten gehen bei Programmbeendigung nicht verloren.
- Ein Backup-System erlaubt, den Betrieb sogar dann weiterzuführen, wenn Teile der Hardware ausfallen.
- Im Falle eines Netzwerkausfalls sollen alle Lager autonom weiterarbeiten können.
Nur Zugriffe auf Bestände anderer Lager sind dann nicht oder nur sehr eingeschränkt möglich.
Entwickeln Sie nur den Kern eines entsprechenden Programms ohne Benutzerschnittstelle.
Dieser soll keine Eingabe von der Tastatur verlangen oder Ausgabe auf den Bildschirm machen.
Erweitern Sie das Testprogramm (aufrufbar mittels java Test von Gruppe/Aufgabe2 aus) um Überprüfungen der zusätzlichen Funktionalität.
Wie in der ersten Aufgabe sollen alle Tests selbständig ohne Benutzereingaben ablaufen und Testergebnisse in verständlicher Form am Bildschirm ausgeben.
Programmteile, die zum Testen benötigt werden, sollen klar vom Programmkern getrennt sein.
Wie die Aufgabe zu lösen ist:
Die oben aufgezählten Erweiterungen sind nur als Anhaltspunkte gedacht.
Sie können auch andere sinnvoll erscheinende Erweiterungen machen und einzelne Punkte nur unvollständig oder anders als angedeutet lösen.
Eine der größten Schwierigkeiten dieser Aufgabe besteht in der richtigen Abschätzung des Umfangs der Erweiterungen, die Sie in einer Woche machen können.
Planen Sie entsprechend Ihren Vorkenntnissen und Fähigkeiten nur so viele Erweiterungen ein, wie Sie in der vorgesehenen Zeit zum Abschluss bringen können – das heißt, so viele wie möglich, aber auf keinen Fall mehr.
Versuchen Sie, sehr rasch zu einer brauchbaren Lösung zu kommen.
Ignorieren Sie Details, die Ihnen unwichtig erscheinen.
Bedenken Sie, dass Sie alle Teile Ihrer Lösung durch Testfälle überprüfen sollen und planen Sie die Zeit für die Entwicklung der Testfälle ein.
Es wird im Normalfall keine Gelegenheit geben, Teile der Arbeit, die Sie in der vorgegebenen Zeit nicht zu Ende bringen, nachzuholen.
Senden Sie möglichst bald ein grobes Konzept Ihrer geplanten Erweiterungen (am besten mit einer Einteilung, welches Gruppenmitglied was macht) an Ihre Tutorin oder Ihren Tutor.
Die TutorInnen werden sich bemühen, rasch hilfreiche Rückmeldungen zu geben.
Überschätzen Sie sich nicht.
Erstellen Sie eher ein Konzept, von dem Sie sicher annehmen, dass Sie die Arbeiten zeitlich schaffen.
Wenn das Konzept Ihrer Tutorin oder Ihrem Tutor nicht reicht, werden Sie ohnehin rasch um eine Abänderung gebeten werden.
Ein Schwerpunkt dieser Aufgabe ist der Umgang mit Untertypbeziehungen zusammen mit dynamischem Binden.
Planen Sie Ihre Erweiterungen so, dass Untertypbeziehungen verwendet werden.
Setzen Sie gezielt dynamisches Binden ein.
Diese Teile Ihrer Lösung könnten in der nächsten Aufgabe eine wichtige Rolle spielen.
Beachten Sie die allgemeinen Informationen zur Laborübung aus der ersten Aufgabe.
Warum die Aufgabe diese Form hat:
Sie sollen möglichst große Freiheit bei der Lösung der Aufgabe haben und selbst die Verantwortung für alles übernehmen, was mit der Entwicklung der Software zu tun hat.
Es gibt niemanden, der Ihnen vorschreibt, wie die Aufgabenstellung zu verstehen ist.
Dadurch sollen Sie eine Ahnung davon bekommen, was es bedeutet, selbst für ein Softwareprojekt verantwortlich zu sein.
Diese Aufgabe ist im Vergleich zu allen anderen Aufgaben die bei weitem umfangreichste und stellt damit hohe Anforderungen an jedes einzelne Gruppenmitglied sowie die Zusammenarbeit innerhalb der Gruppe – eine Nagelprobe für das Funktionieren der Gruppe und zum Aufdecken möglicher Schwachstellen in der Organisation der Gruppe.
Untertypbeziehungen sind ein schwieriges, aber sehr wichtiges Thema.
Nutzen Sie die Gelegenheit, bei der Lösung dieser Aufgabe Erfahrungen damit zu gewinnen:
Fehler, die Sie dabei machen, wirken sich nicht auf Ihre Beurteilung aus.
Aber Sie bekommen von den TutorInnen Rückmeldungen und bei Bedarf maßgeschneiderte Hilfe.