Objektorientierte Programmierung
LVA 185.162, VL 2.0, 2010 W
1. Laborübungsaufgabe
Themen:
Datenabstraktion, Klassenzusammenhalt, Objekt-Kopplung
Termine:
| Ausgabe: |
13.10.2010 |
| reguläre Abgabe: |
20.10.2010, 13:45 Uhr |
| nachträgliche Abgabe: |
27.10.2010, 13:45 Uhr |
Abgabeverzeichnis:
Gruppe/Aufgabe1
Programmaufruf:
java Test
Grundlage:
Erstes Kapitel des
Skriptums
Aufgabe
Welche Aufgabe zu lösen ist:
Schreiben Sie in Java den Kern eines Programms zur Verwaltung des Lagers eines Computer-Händlers.
Folgende Vorgänge sollen unterstützt werden:
- Anlegen von Produkten, wobei jedes Produkt einen eindeutigen Namen und eine Beschreibung erhält
- Erhöhen und Verringern des Lagerbestandes (= Anzahl der vorhandenen Stücke) sowie Abfragen des Lagerbestandes und aller weiteren Daten zu einem Produkt
- Anlegen von Produktgruppen (wie z.B. Prozessoren, Festplatten und Hauptspeicher)
- Zuordnen von Produkten und Produktgruppen zu (anderen) Produktgruppen (wie z.B. von X zur Produktgruppe DVD-Brenner und von DVD-Brenner zur Produktgruppe Optische Laufwerke), wobei Produkte und Produktgruppen auch mehreren (anderen) Produktgruppen zugeordnet sein können
- Auflisten aller Produkte einer Produktgruppe einschließlich Lagerbestand, wobei auch alle Produkte aller zugeordneten Produktgruppen aufgelistet werden (z.B. auch der DVD-Brenner X in der Auflistung von Optische Laufwerke)
- Anlegen von Konfigurationen, die gegebene Stückzahlen bestimmter Produkte unter neuen Namen zusammenfassen (wie z.B. 1 Gehäuse G, 1 Mainboard M, 2 Hauptspeicher R und 2 Festplatten H zur Konfiguration Komplettsystem1)
- Abfragen des Lagerbestands für eine Konfiguration, wobei ermittelt wird, wie viele entsprechend konfigurierte Geräte aus dem Lagerbestand zusammengebaut werden können
- Verringern des Lagerbestands aller Produkte, die für eine bestimmte Anzahl an Geräten einer bestimmten Konfiguration benötigt werden
Schreiben Sie nur den Kern eines entsprechenden Programms ohne Benutzerschnittstelle sowie ein Testprogramm.
Der Kern soll die oben beschriebene Funktionalität aufweisen, aber keinerlei Eingabe von der Tastatur oder Ausgabe auf den Bildschirm (auch nicht von/auf eine Datei) machen.
Alle benötigten bzw. erzeugten Daten müssen über Parameter und Rückgabewerte von Methoden übergeben werden.
Entsprechende Typen der Daten sollen Sie selbst finden.
Die Daten der Lagerverwaltung können bei Programmbeendigung verloren gehen, eine permanente Speicherung ist also nicht nötig.
Das Testprogramm soll mittels java Test von Gruppe/Aufgabe1 aus aufrufbar sein und die oben beschriebene Funktionalität, vor allem auch Grenzfälle überprüfen.
Die Tests sollen selbständig ohne Benutzerinteraktion ablaufen, sodass Aufrufer keine Testfälle auswählen oder Testdaten eintippen müssen.
Alle Testdaten sollen im Testprogramm vorgegeben sein.
Testergebnisse sollen (in nachvollziehbarer und verständlicher Form) am Bildschirm ausgegeben werden.
Wie die Aufgabe zu lösen ist:
Ihr Programmcode soll wiederverwendbar sein, da die nächste Aufgabe voraussichtlich auf Teilen davon aufbaut.
Lesen Sie das erste Kapitel des Skriptums und achten Sie darauf, wie Sie gute Qualität von Software und gute Wiederverwendbarkeit erreichen können.
Achten Sie besonders auf Datenabstraktion:
Alles, was kaum trennbar miteinander verbunden ist, soll in einem Objekt gekapselt sein, leicht voneinander trennbare Einheiten sollen zu verschiedenen Objekten gehören.
Auf Daten soll nur über dafür vorgesehene Methoden zugegriffen werden.
Unnötige Zugriffe und unnötige Zugreifbarkeit von Daten und Methoden sind zu vermeiden.
Achten Sie auf hohen Klassenzusammenhalt und schwache Objektkopplung.
Die Lösung soll möglichst einfach sein und keine unnötige Funktionalität haben.
Diese Aufgabe hilft den TutorInnen bei der Einschätzung Ihrer Vorkenntnisse sowie der Zusammenarbeit in der Gruppe.
Sorgen Sie dafür, dass Sie diese Aufgabe so gut Sie können in der Gruppe lösen (ohne Abschreiben) und jedes Gruppenmitglied etwa in gleichem Maße mitarbeitet.
Sonst könnten Sie durch eine Fehleinstufung wertvolle Zeit verlieren.
Scheuen Sie sich nicht, Ihre Tutorin oder Ihren Tutor um Hilfe zu bitten, wenn Sie bei der Lösung der Aufgabe Probleme haben oder keine brauchbare Zusammenarbeit in der Gruppe zustande kommt.
Die TutorInnen sind dazu da, Ihnen bei inhaltlichen Problemen und gruppeninternen Konflikten zur Seite zu stehen und Sie möglichst erfolgreich durch die Laborübung zu schleusen.
Warum die Aufgabe diese Form hat:
Der Umfang ist so gewählt, dass die Programmierung selbst nicht zu viel Zeit in Anspruch nimmt und dadurch Zeit für die interne Organisation der Gruppe (also zum Kennenlernen, Finden einer passenden Position in der Gruppe und Aufbau geeigneter Kommunikationsmöglichkeiten) und inhaltliche Diskussionen bleibt.
Auf eine genaue Spezifikation der Aufgabenstellung wird aus folgenden Gründen bewusst verzichtet:
- Sie sollen in der Gruppe diskutieren, wie Sie die Aufgabe verstehen und welche Lösungswege geeignet erscheinen.
- Sie sollen sich von Anfang an daran gewöhnen, dass Aufgaben in der Regel nicht vollständig spezifiziert sind, aber trotzdem bestimmte Vorgaben eingehalten werden müssen.
- Sie sollen sich eine eigene brauchbare Faktorisierung überlegen und dabei von Qualitätsmerkmalen wie Datenkapselung, Klassenzusammenhalt und Objektkopplung (statt starrer Vorgaben) leiten lassen.
- Sie sollen die Verantwortung für die Korrektheit Ihrer Lösung (so wie Sie sie selbst verstehen) übernehmen, indem Sie entsprechende Tests durchführen.
Allgemeine Informationen zur Laborübung
Folgende Informationen betreffen auch alle weiteren Aufgabenstellungen.
Was bei der Lösung der Aufgaben zu beachten ist:
Die Aufgabenstellungen lassen Ihnen viel Freiheit, stellen zum Teil aber auch klare Anforderungen.
Nützen Sie die Freiheit zur Vereinfachung der Lösungen, vergewissern Sie sich aber, dass alle Anforderungen erfüllt sind.
Unter Wie die Aufgabe zu lösen ist:
finden Sie Hinweise darauf, wie Sie die Lösung vereinfachen können, welche Fallen Sie umgehen sollten und welche Aspekte für die Beurteilung besonders wichtig sind.
Bei der ersten Aufgabe kommt es also besonders auf Datenabstraktion, Klassenzusammenhalt, Objektkopplung und Einfachheit der Lösung an.
Ab der vierten Aufgabe können Ihnen bei solchen Hinweisen beispielsweise auch für unnötig komplizierte oder umfangreiche Lösungen Punkte abgezogen werden.
Unterschiedliche Aufgaben haben unterschiedliche Schwerpunkte.
Jede Aufgabe wird daher nach einem anderen Schema beurteilt.
Ein häufiger Fehler besteht darin, eine Aufgabe nach Gefühl zu lösen, ohne zu verstehen, worauf es ankommt.
Jede Aufgabe bezieht sich auf Themen, die in der Aufgabenstellung genannt werden und meist kurz zuvor in der Vorlesung behandelt wurden.
Versuchen Sie, eine Beziehung zwischen Aufgabenstellung und Vorlesungsstoff herzustellen.
Achten Sie darauf, Fachbegriffe (wie Datenabstraktion, Klassenzusammenhalt und Objektkopplung) nicht nur umgangssprachlich zu interpretieren, sondern verwenden Sie diese Begriffe so wie in Vorlesung und Skriptum beschrieben.
Vermeiden Sie umgekehrt aber auch, alle in der Vorlesung behandelten Techniken unbedingt in Ihrer Lösung unterbringen zu wollen.
Verwenden Sie nur die Lösungsstrategien, die Ihnen sinnvoll erscheinen.
Für die meisten Aufgaben sind viele verschiedene Lösungsansätze zielführend, und bei der Beurteilung wird kein guter Lösungsansatz einem anderen, gleich guten bevorzugt werden.
Versuchen Sie nicht, Teile der Aufgabenstellung durch Tricks oder Spitzfindigkeiten zu umgehen.
Beispielsweise gibt es immer wieder Lösungen, in denen die Test-Klasse nur Tests erfolgreich
ausgibt statt tatsächlich Tests durchzuführen.
Solche Versuche werden durch händische Beurteilungen rasch erkannt.
Spätere Aufgaben enthalten oft Schwierigkeiten, die mit Allgemeinwissen alleine oder über aufgabenbezogene Internet-Recherchen kaum zu lösen sind.
Gerade in solchen Fällen kann die Umgehung der Schwierigkeiten durch Tricks zu starken Punkteabzügen führen.
Hinweise zu einer guten Lösung lassen sich häufig im Skriptum oder auf den Vorlesungsfolien finden.
Was im Hinblick auf Abgaben zu beachten ist:
Schreiben Sie Ihre Lösung in das am Beginn der Aufgabenstellung genannte Verzeichnis (
Gruppe/Aufgabe1 für die erste Aufgabe) auf der
g0.
Das Programm soll von diesem Verzeichnis aus durch den ebenfalls oben genannten Befehl (in der Regel
java Test) aufrufbar sein.
Das heißt, die Methode
main soll in der Klasse
Test in der von Ihnen selbst geschriebenen Datei
Test.java (nicht
test.java oder sonst irgendwie anders) stehen.
Schreiben Sie (abgesehen von geschachtelten Klassen) nie mehr als eine Klasse in jede Datei.
Das Verzeichnis soll zum Zeitpunkt der Abgabe und der nachträglichen Abgabe 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 bei der Beurteilung nicht berücksichtigt.
Stellen Sie sicher, dass ein Aufruf von
javac *.java (bzw.
javac *.java */*.java und so weiter wenn Sie Pakete verwenden) im Abgabeverzeichnis keine Fehlermeldung liefert, da Lösungen mit Syntaxfehlern im Allgemeinen nicht beurteilt werden.
Warnings sind bei den ersten Aufgaben zwar erlaubt, später aber teilweise nicht mehr.
Versuchen Sie gleich von Anfang an, Warnings zu vermeiden.
Verwenden Sie außer den Java-Standardbibliotheken keine vorgefertigten Programmteile, da diese bei der Beurteilung als nicht vorhanden angesehen werden.
Vermeiden Sie jede Änderung der Verzeichnisstruktur der Abgabeverzeichnisse (kein Verschieben, Umbenennen, Löschen und Neuanlegen) um die automatische Abgabe nicht zu behindern.
Wenn Sie die Verzeichnisstruktur irrtülich ändern, wenden Sie sich bitte an Ihre Tutorin, Ihren Tutor oder die Lehrveranstaltungsleitung.
Wie Account und Gruppen-Verzeichnis zu verwenden sind:
Bei der Anmeldung zur Lehrveranstaltung haben Sie (jeder Teilnehmer) einen eigenen Account auf dem Übungsrechner
g0 bekommen.
In diesem Account können Sie unabhängig von anderen Übungsteilnehmern (auch unabhängig von anderen Mitgliedern Ihrer Gruppe) arbeiten.
Das Verzeichnis
Gruppe gehört allen Gruppenmitgliedern gemeinsam.
Legen Sie alle Daten, die von den Gruppenmitgliedern gemeinsam (und nicht nur von Ihnen persönlich) verwendet werden, in diesem Verzeichnis ab.
Das gilt insbesondere für Lösungen von Aufgaben.
Es kann pro Gruppe und Aufgabe nur eine gemeinsame Lösung geben, auf die sich die Gruppenmitglieder einigen müssen.
Es bleibt der Gruppe überlassen, wie die Arbeit aufgeteilt wird, solange die Aufteilung einigermaßen gerecht ist (wird beim Abgabegespräch überprüft).
Bitte achten Sie darauf, dass alle Gruppenmitglieder Lese- und Schreibrechte auf Dateien im Verzeichnis Gruppe haben.
Fehlende Rechte entstehen oft durch Kopieren einer Lösung vom eigenen Rechner in ein Abgabeverzeichnis.
Der Besitzer von datei kann durch chmod g+rw datei (oder chmod g+rw *) allen Gruppenmitgliedern solche Zugriffe auf datei (bzw. alle seine Dateien im aktuellen Verzeichnis) geben.
Manchmal führen fehlende Rechte dazu, dass letzte notwendige Änderungen vor der Abgabe nur mehr sehr schwer möglich sind, wenn der Besitzer einer Datei gerade nicht greifbar ist.
Änderungen der Struktur von Abgabeverzeichnissen sind zu vermeiden.
Sie können aber in Gruppe (jedoch nicht in Gruppe/Aufgabe1 bis Gruppe/Aufgabe8) beliebig weitere Verzeichnisse anlegen und dort beispielsweise alte Versionen oder andere Dateien, die nicht zur Abgabe gehören, ablegen.
Was TutorInnen von Ihnen wissen möchten:
Teilen Sie Ihrer Tutorin oder Ihrem Tutor bitte möglichst bald mit, welche Vorkenntnisse Sie haben, damit Sie in der Form betreut werden können, die für Sie am günstigsten ist.
Wählen Sie dazu ein Mitglied Ihrer Gruppe zur Kontaktperson.
Die Kontaktperson soll so bald wie möglich eine Mail an die Tutorin bzw. den Tutor (siehe
Gruppe/TUTOR) schicken um sich mit folgenden Informationen vorzustellen:
- Ihre Gruppennummer (siehe Gruppe/GRUPPE)
- die Kontaktperson Ihrer Gruppe (mit eMail-Kontaktadresse)
- eine Selbsteinschätzung der Java-Programmierkenntnisse jedes einzelnen Gruppenmitglieds:
- Anfänger = noch kaum mit Java in Berührung gekommen
- Ausgebildet = Java in einer Lehrveranstaltung, in einem Kurs oder in der Schule gelernt (bitte angeben, in welcher LVA oder Schule bzw. welchem Kurs gelernt)
- Erfahren = ausgebildet (bitte angeben, wo gelernt) und darüber hinaus kleine bis mittelgroße Programme in Java entwickelt
- Experte = in einer Firma oder selbständig große Java-Projekte durchgeführt
- eine Selbsteinschätzung der sonstigen Programmierkenntnisse der Gruppenmitglieder (wie oben, jedoch auf beliebige Programmiersprachen bezogen, z.B. erfahrener C-Entwickler und Fortran-Experte)
- zeitliche Einschränkungen der Gruppenmitglieder z.B. wegen beruflicher Verpflichtungen
- die gewünschte Intensität der Betreuung durch die Tutorin oder den Tutor, vor allem bei der Lösung der zweiten und dritten Aufgabe:
- minimal: TutorIn gibt kurze Kommentare zu Ihren Lösungen und verlangt unbedingt notwendige Verbesserungen, belästigt Sie aber nicht weiter
- normal: TutorIn macht (in der Regel per Mail und gegebenenfalls wiederholt) Verbesserungsvorschläge zu Ihren Lösungen und weist auf gute und schlechte Aspekte hin
- maximal: mehrere Treffen mit der Tutorin oder dem Tutor zur Besprechung bisheriger Lösungsansätze und der weiteren Vorgehensweise
Die genaue Form der Betreuung wird durch die Tutorin oder den Tutor bestimmt.
Unabhängig von der Form der Betreuung kann natürlich jedes Gruppenmitglied jederzeit konkrete Fragen an die Tutorin oder den Tutor richten.
Scheuen Sie sich bitte nicht, sich auch mit organisatorischen und gruppeninternen Problemen an die Tutorin oder den Tutor zu wenden.
Gerade gruppeninterne Konflikte (z.B. Gruppenmitglieder melden sich nicht, haben keine Zeit, können bzw. wollen kaum zur Lösung der Aufgaben beitragen, oder können sich nicht auf eine gemeinsame Lösung einigen) sind häufige Ursachen für ein schlechtes Abschneiden im Laborübungsteil.
TutorInnen kennen solche Probleme und haben Möglichkeiten, zur Verbesserung der Situation beizutragen.
Je früher TutorInnen von möglichen Problemen erfahren, um so einfacher sind sie in der Regel zu lösen.