Objektorientierte Programmiertechniken
LVA 185.A01, VU, 3 Ects, 2013/2014 W
2. Übungsaufgabe
Thema:
Aufwandsabschätzung, Programmiereffizienz, Untertypbeziehungen und dynamisches Binden
Termine:
| Ausgabe: |
16.10.2013 |
| Abgabe: |
23.10.2013, 12:00 Uhr |
Abgabeverzeichnis:
Aufgabe2+3
Programmaufruf:
java Test
Grundlage:
Skriptum, Schwerpunkt auf Abschnitt 2.1
Aufgabe
Welche Aufgabe zu lösen ist:
In Unterkranichkirchen regt sich Widerstand.
Man will nicht akzeptieren, dass ein einfacher Algorithmus die gesamte Komplexität der Kürbiszucht ersetzen soll.
Außerdem werden einige Oberkranichkirchener Teilnehmer am Kürbiswettbewerb beschuldigt, sich ihre Ergebnisse erschummelt zu haben.
Der einzige Ausweg scheint in einem ganz neuen Programm zur Aufzucht virtueller Kürbisse zu bestehen, das die Realität der Kürbiszucht viel genauer abbildet als das alte aus
Aufgabe 1.
Zumindest folgende Punkte werden gefordert:
- Die Wetterlage kann nicht mehr selbst beeinflusst werden.
Statt der täglichen individuellen Angabe der Licht- und Wassermenge geben die Organisatoren des Kürbiswettbewerbs einen Witterungsverlauf von Mitte März bis Ende November vor.
Der Witterungsverlauf ist den Teilnehmer(inne)n vor dem Wettbewerb nicht bekannt.
Neben der Anzahl der täglichen Sonnenstunden wird auch die Tagestiefst- und -höchsttemperatur sowie die Regenmenge und Windgeschwindigkeit über den Witterungsverlauf bestimmt.
Es können auch extreme Wetterereignisse wie Starkregen, Hagel und Sturm eingestreut sein.
- Das Wachstum der Kürbisse hängt von der Witterung, der Kürbissorte, den Bodenverhältnissen, dem Pflanzzeitpunkt, dem Auftreten verschiedener Schädlinge und Pflegemaßnahmen ab.
Bis auf die Witterung sind diese Parameter (zumindest indirekt) steuerbar.
Die Bodenart muss ganz zu Beginn aus mehreren Alternativen gewählt werden.
Kürbissorte und Pflanzzeitpunkt können einmalig gewählt werden, auch nachdem der Beginn des Witterungsverlaufs schon bekannt ist.
Pflegemaßnahmen können jederzeit abhängig von der Witterung getroffen werden.
- Zu den möglichen Pflegemaßnahmen gehören das Gießen, Düngen, Jäten, Bodenauflockern und die Schädlingsbekämpfung.
Diese Maßnahmen verändern das Wachstumsverhalten auf eine von Kürbissorte und Bodenart abhängige Weise.
Gießen fördert das Wachstum wenn es trocken ist, aber nicht wenn es schon feucht ist; außerdem hat es Einfluss auf die Schädlinge.
Düngen kann (je nach Sorte) das Wachstum fördern, aber hauptsächlich gegen Ende der Wachstumsphase auch die Reife verhindern und zu Fäule führen.
Durch Schädlingsbekämpfung kann man den Befall durch bestimmte Schädlinge für eine gewisse Zeit unterbinden, jedoch ergibt sich ein Bumerangeffekt, der diese Schädlinge nach Ende der Wirksamkeit verstärkt auftreten und wiederholte Bekämpfungsmaßnahmen unwirksam bleiben lässt.
Jäten und Bodenauflockern können vor allem bei Trockenheit das Wachstum fördern und haben keinerlei schädliche Auswirkungen.
Diese Tätigkeiten erfordern aber einen hohen zeitlichen Aufwand, der irgendwie zu berücksichtigen ist.
Eine weitere Pflegemaßnahme könnte z.B. das Zudecken von Kürbissen vor extremen Wetterereignissen sein, wodurch das Wachstum zwar gestört wird, aber Schäden durch die Wetterereignisse weitgehend vermieden werden.
- Es werden mehrere Sorten an Kürbissen mit unterschiedlichen Wachstumseigenschaften zur Pflanzung angeboten.
Sie haben unterschiedliche(n) Wachstumsdauer, Lichtbedarf, Wasserbedarf, Widerstandsfähigkeit gegen Schädlinge und Witterungseinflüsse, etc.
Zusätzlich soll es möglich sein, sich eigene Kreuzungen dieser Sorten zusammenzustellen.
Dabei werden die Eigenschaften der beteiligten Sorten auf zufällige Weise gemischt.
- Es gibt mehrere Bodenarten wie Sandböden, Lehmböden, Humusböden, etc.
Die Bodenbeschaffenheit wirkt sich beispielsweise darauf aus, wie rasch Wasser im Boden abfließt bzw. Wind und Sonne den Boden austrocknen.
Auch die Wirkung der Pflegemaßnahmen wird vom Boden beeinflusst.
- So etwas wie eine Wettervorhersage wäre ein praktisches Hilfsmittel für die Planung.
Auf keinen Fall darf man Details des künftigen Witterungsverlaufs erfahren.
Daher müssen Prognosen auf der Basis des vergangenen Verlaufs erstellt werden.
- Es ist schwierig, einen realitätsnahen Witterungsverlauf per Hand zu erstellen.
Diese Aufgabe soll das Programm übernehmen.
- Es ist ganz wichtig, dass alle Möglichkeiten zum Schummeln unterbunden werden.
Jeder Züchter kann nur die eigenen Kürbisse sehen, nicht die der anderen.
Alle Daten müssen dauerhaft und sicher gespeichert werden.
Alle Aktionen müssen protokolliert werden, sodass eventuelle Unregelmäßigkeiten auch im Nachhinein analysierbar sind.
- Benötigt wird auch eine Infrastruktur zur Durchführung des Wettbewerbs, von der Anmeldung bis zum Vergleich der Ergebnisse.
Schreiben Sie in Java wieder den Kern eines solchen 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 machen.
Das Testprogramm soll mittels java Test von Aufgabe2+3 aus aufrufbar sein und die oben beschriebene Funktionalität überprüfen.
Die Tests sollen selbständig ohne Benutzerinteraktion ablaufen, sodass Aufrufer keine Testfälle auswählen oder Testdaten eintippen müssen.
Testergebnisse sollen (in nachvollziehbarer und verständlicher Form) am Bildschirm ausgegeben werden.
Neben dem Testprogramm soll die Klasse Test.java als Kommentar eine kurze, aber verständliche Beschreibung der Aufteilung der Arbeiten auf die einzelnen Gruppenmitglieder enthalten – wer hat was gemacht.
Wie die Aufgabe zu lösen ist:
Die oben aufgezählten gewünschten Eigenschaften sind nur als Anhaltspunkte gedacht.
Sie können auch andere sinnvoll erscheinende Eigenschaften einbauen 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 Arbeiten, die Sie bis zum Abgabetermin fertigstellen können.
Planen Sie entsprechend Ihren Vorkenntnissen und Fähigkeiten möglichst viel ein, das Sie in der vorgesehenen Zeit auch zum Abschluss bringen können – das heißt, so viel Sie können, aber auf keinen Fall mehr als Sie können.
Als groben Anhaltspunkt sollten Sie (jedes Gruppenmitglied) mindestens fünf bis sechs Stunden in die Lösung dieser Aufgabe fließen lassen.
Versuchen Sie so effizient wie möglich zu arbeiten und sehr rasch zu einer brauchbaren Lösung zu kommen.
Ignorieren Sie Details, die Ihnen als 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 und für die Fehlerbeseitigung ein.
Senden Sie möglichst bald ein grobes Konzept Ihrer geplanten Arbeiten – am besten mit einer Einteilung, welches Gruppenmitglied was machen soll – an Ihre(n) Tutor(in).
Die Tutor(inn)en werden sich bemühen, rasch hilfreiche Rückmeldungen zu den Konzepten 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 Ihrem Tutor oder Ihrer Tutorin nicht reicht, werden Sie um eine Abänderung gebeten.
Einer der Schwerpunkte dieser Aufgabe ist der Umgang mit Untertypbeziehungen.
Planen Sie die Verwendung von Untertypbeziehungen zusammen mit dynamischem Binden ein.
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.
Es gibt niemanden, der Ihnen vorschreibt, wie die Aufgabenstellung genau zu verstehen ist.
Diese Aufgabe stellt 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.
Untertypbeziehungen sind ein schwieriges, aber für die objektorientierte Programmierung sehr wichtiges Thema.
Nutzen Sie die Gelegenheit, bei der Lösung der Aufgabe Erfahrungen damit zu gewinnen.
Fehler, die Sie dabei noch machen, wirken sich nicht auf Ihre Beurteilung aus.
Sie bekommen von den Tutor(inn)en Rückmeldungen und bei Bedarf maßgeschneiderte Hilfe.