Objektorientierte Programmierung
LVA 185.162, VL 2.0, 2007 W
2. Übungsaufgabe
Themen:
Untertypbeziehungen, Programmiereffizienz
Termine:
| Ausgabe: |
18.10.2007 |
| reguläre Abgabe: |
25.10.2007, 12:45 Uhr |
| nachträgliche Abgabe: |
05.11.2007, 12:45 Uhr |
| möglicherweise weitere Abgabetermine vom Tutor vorgegeben |
Abgabeverzeichnis:
Aufgabe2
Programmaufruf:
java Test
Grundlage:
Skriptum bis Seite 55.
Aufgabe
Welche Aufgabe zu lösen ist:
Erweitern Sie die Lagerverwaltung aus der ersten Aufgabe so, dass sie in der
Praxis tatsächlich verwendbar wird. Folgende Eigenschaften werden von
Anwendern als wichtig angesehen:
- Daten gehen beim Abschalten des Computers nicht verloren.
- Produkte können aus dem Sortiment genommen werden.
- Die Anzahl von Produkten kann in verschiedenen Einheiten angegeben
sein. Zum Beispiel entspricht eine
Packung
von Produkt X einer
Stückzahl von 12, eine Palette
1000 Packungen, und ein
LKW
10 Paletten. Je nach Produkt und Verpackung sind unterschiedliche
Einheiten sinnvoll. Derselbe Name einer Einheit kann bei unterschiedlichen
Produkten unterschiedlichen Stückzahlen entsprechen. Neue Einheiten
können jederzeit zu einem Produkt hinzugefügt und auch wieder
weggenommen werden.
- Jedes Produkt ist genau einer Produktgruppe (z.B. Nahrungsmittel,
Kosmetikartikel, etc.) zugeordnet. Neue Produktgruppen können
jederzeit eingeführt und bestehende, denen kein Produkt zugeordnet ist,
gelöscht werden. Jede Produktgruppe ist mit einem Mehrwertsteuersatz
(z.B. 10% oder 20%) assoziiert, der für alle Produkte dieser Gruppe
gilt.
- Ein wichtiger Punkt ist die Abfrage der Daten in der Lagerverwaltung.
Alle Daten müssen auf einfache Weise ausgelesen werden können.
Auch Auflistungen der Lagerbestände (nach Produktgruppen oder anderen
Kriterien sortiert) sowie Preislisten (mit Mehrwertsteuersätzen) werden
benötigt.
- Nur registrierte Benutzer dürfen die Lagerverwaltung verwenden.
Jeder Zugriff muss den Namen des Benutzers enthalten, und der Zugriff darf
nur erfolgen, wenn der Benutzer registriert ist. Benutzer können
für unterschiedliche Aufgaben registriert sein (z.B. nur Daten auslesen,
Lagerbestände ändern, Preise und Produktgruppen festlegen, Benutzer
verwalten, etc.). Es ist möglich, neue Benutzer (mit eindeutigem Namen)
für bestimmte Aufgaben zu registrieren und die Registrierung auch wieder
zu löschen. Es muss aber immer mindestens ein Benutzer registriert sein,
der Benutzer verwalten darf.
- Ein Benutzer mit entsprechenden Rechten kann die Verwendung der
Lagerverwaltung sperren. Dann kann nur noch dieser Benutzer auf die Daten
zugreifen, bis er die Sperre wieder aufhebt.
- Jede Änderung, jeder gescheiterte Änderungsversuch und jede
Abfrage ist zu protokollieren, damit nachvollziehbar ist, wer wann was
gemacht hat. Dabei ist auch der Name des Benutzers zu speichern. Falls beim
Zugriff Daten geändert werden, müssen die alten Daten
rekonstruierbar sein. Jeder Protokolleintrag hat eine eindeutige Nummer.
- Wenn die Lagerverwaltung für die Verwendung durch andere Benutzer
gesperrt ist, können alle Änderungen ab einem Protokolleintrag mit
einer bestimmten Nummer wieder rückgängig gemacht werden. Auch
dieses Rückgängigmachen wird protokolliert und kann
rückgängig gemacht werden.
- Da die gespeicherten Daten sehr wichtig sind, müssen
regelmäßig Backups angelegt werden. Die Verwaltung der Backups
soll automatisiert sein.
Wie in der ersten Aufgabe soll ein Aufruf von java Test
alle wichtigen
Teile der Lagerverwaltung (nicht interaktiv) testen. Die Tests sollen klar von
der eigentlichen Lagerverwaltung getrennt sein.
Wie die Aufgabe zu lösen ist:
Eine vollständige Lösung dieser Aufgabe ist sehr umfangreich und in
der gegebenen Zeit (1 Woche) vermutlich nicht zu schaffen. Versuchen Sie, die
Aufgabe so zu lösen, dass zumindest die wichtigsten Benutzerwünsche
erfüllt werden. Die entsprechene Auswahl müssen Sie selbst treffen.
Erweitern Sie die bestehende Lösung schrittweise. Versuchen Sie,
möglichst produktiv zu sein. Schreiben Sie aber keine Programmteile, die
nicht gebraucht werden oder nicht das tun, wofür sie gedacht sind. Achten
Sie stets auf gute Wartbarkeit (Einfachheit, Objektkopplung,
Klassenzusammenhalt, etc.). Entwickeln Sie zuerst ein grobes Konzept (welche
Punkte Sie in welcher Reihenfolge angehen, wer in der Gruppe wann was macht,
etc.) und beginnen Sie erst dann mit dem Programmieren.
Verwenden Sie (außer den Standardbibliotheken) keine vorgefertigten
Programmteile, auch keine Datenbanken und sonstigen Werkzeuge, die in der
Softwareentwicklung häufig zum Einsatz kommen. Ein Ziel der Aufgabe ist
es, auf unterster Ebene effizient Programmieren zu lernen. Versuchen Sie
keinesfalls zu zeigen, welche modernen Technologien Sie beherrschen und mit
wie komplexen Lösungen Sie umgehen können. Die einfachste Lösung
ist die beste.
Welche Informationen der Tutor erwartet:
Falls Sie frühzeitige Tutor-Betreuung wünschen, schicken Sie
möglichst bald Ihr Konzept über die von Ihnen geplante Vorgehensweise
(grobes Konzept) an Ihre Tutorin oder Ihren Tutor. Alles Weitere erfahren Sie
dann von ihr oder ihm.
Was im Hinblick auf die Abgabe zu beachten ist:
Schreiben Sie Ihre Lösung in das bereits existierende Verzeichnis
Gruppe/Aufgabe2
. Das Programm soll von diesem Verzeichnis aus durch
java Test
aufrufbar sein. Schreiben Sie nicht mehr als eine Klasse in
jede Datei. Das Verzeichnis soll zu den Abgabezeitpunkten alle
.java
-Dateien enthalten, die Sie für Ihre Lösung
benötigen. Bitte entfernen Sie alle
.java
-Dateien, die nicht zur
Abgabe gehören. Dateien mit anderen Endungen werden (abgesehen von
Verzeichnissen) bei der Beurteilung nicht berücksichtigt. Für diese
Aufgabe (aber nicht für die meisten folgenden Aufgaben) dürfen auch
Verzeichnisse innerhalb von
Gruppe/Aufgabe2
verwendet werden.