Objektorientierte Programmiertechniken
LVA 185.A01, VU, 3 ECTS, 2016/2017 W
2. Übungsaufgabe
Thema:
Aufwandsabschätzung, Programmiereffizienz, Untertypbeziehungen und dynamisches Binden
Termine:
| Ausgabe: |
19.10.2016 |
| Abgabe Grobstruktur: |
24.10.2016, 12:00 Uhr |
| Abgabe Zwischenstand: |
31.10.2016, 12:00 Uhr |
| Abgabe fertige Lösung: |
09.11.2016, 12:00 Uhr |
Abgabeverzeichnis:
Aufgabe1-3
Programmaufruf:
java Test
Grundlage:
Skriptum, Schwerpunkt auf Abschnitt 2.1
Aufgabe
Welche Aufgabe zu lösen ist:
Naturschutzverbände zeigen sich besorgt:
Sollten sich Eichhörnchen an die aus Simulationsläufen von Aufgabe 1 abgeleiteten Empfehlungen halten, müssten sie in nur wenigen Jahren auf die Rote Liste gefährdeter Arten gesetzt werden.
Der
Nagetierzuchtverein sieht das nicht so dramatisch:
Eichhörnchen sind stur genug um sich nicht an jede sinnlose Empfehlung zu halten.
Eine konträre Position bezieht der
Verein für ein selbstbestimmtes Eichhörnchenleben:
Auch wenn jedes Tier das Recht hat, nach seiner Natur und seinem Willen zu leben, braucht es Regeln um das Leben angenehmer zu gestalten.
Empfehlungen sind ein Schritt in diese Richtung.
Es wird betont, dass
man nur das Beste für Eichhörnchen im Sinn habe
, aber auch eingeräumt, dass
Ergebnisse von Simulationsläufen derzeit noch nicht die Aussagekraft erreicht hätten, die man sich wünschen würde
.
Das Ziel dieser Aufgabe besteht darin, die Simulation aus Aufgabe 1 so weit zu verbessern, dass sich auch Naturschutzverbände und der Nagetierzuchtverein damit anfreunden können.
Klar ist, dass wesentliche Verbesserungen passieren müssen.
Zumindest die am stärksten trivialisierenden Annahmen (z.B. in jedem Winter gleiche Witterungsverhältnisse, nur Gesamtnahrungsmenge statt der Qualität betrachtet, Umgebungseinflüsse nicht berücksichtigt, etc.) gehören rasch beseitigt.
Die genaue Art der Verbesserungen bleibt Ihnen überlassen.
Hier sind einige Vorschläge, die in der letzten Sitzung des Vereins für ein selbstbestimmtes Eichhörnchenleben gesammelt wurden:
- Verschiedene Witterungsverläufe sind zu simulieren.
Je nach Wetterlage wird angenomen, dass angelegte Nahrungsvorräte sowie natürliche Nahrungsvorkommen (etwa Früchte an Bäumen) zugänglich sind oder nicht.
Auch die Sterblichkeitsrate wird durch das Wetter (etwa Kälteperioden und Unwetter, aber auch die wetterabhängige Aktivität von Fressfeinden) beeinflusst, und die Paarungszeit kann sich um bis zu einem Monat verschieben.
- Die Annahme fixer benötigter Nahrungsmengen ist nicht realistisch.
Sie ist von Individuum zu Individuum verschieden und variiert zeitlich und in Abhängigkeit von der Wetterlage und Nahrungsqualität.
Statt auf die Gesamtnahrungsmenge kommt es darauf an, dass täglich (oder zumindest innerhalb kurzer Zeiträume) ausreichend Nahrung vorhanden ist, ohne dass die Gesundheit darunter leidet.
- Nicht jede Nahrung ist gleich gut.
Leckerbissen werden, je nach individueller Veranlagung und Hunger, rasch verzehrt oder für ein späteres Festmahl aufgehoben.
Solche Unterschiede in den Vorgehensweisen können sich später als entscheidend erweisen.
- Zusammenhänge zwischen Nahrungsangebot, Überleben und Fortpflanzungsfähigkeit sind viel zu einfach dargestellt.
Ein Individuum könnte zur Sicherung der Fortpflanzungsfähigkeit verschwenderisch mit Vorräten umgehen und das Risiko in Kauf nehmen, dass die Vorräte nicht ausreichen.
Schließlich werden zu Winterende nur die kräftigsten Eichhörnchenmännchen ihre Gene weitergeben können.
Ein anderes Individuum wird dagegen das eigene Überleben vor die Fortpflanzungsfähigkeit stellen.
- Der Lebensraum von Eichhörnchen muss berücksichtigt werden.
Nahrungsangebote, Gefahrenquellen und Versteckmöglichkeiten sind in städtischen Parks ganz anders gelagert als in tiefen Wäldern.
Je weniger Wegstrecken am Boden zurückgelegt werden müssen, desto weniger Angriffspunkte für Fressfeinde werden geboten.
- Fixe Anteile an (wieder)gefundenen Vorräten sind nicht realistisch.
Die Fähigkeit zum Finden von Vorräten hängt etwa vom Gesundheitszustand ab.
Wer andere Eichhörnchen beim Anlegen von Vorratslagern beobachtet hat, wird deren Vorräte eher finden.
Kluge Eichhörnchen, die sich beobachtet fühlen, können die Beobachter aber auch bewusst in die Irre führen.
- Es reicht nicht, Gruppen von Eichhörnchen gemeinsam zu simulieren.
Jedes einzelne Eichhörnchen soll individuell simuliert werden.
Die Handlungen jedes Individuums (Vorräte anlegen, Vorräte suchen, etc.) sollen innerhalb vorgegebener Grenzen zufallsgesteuert simuliert werden.
Dabei ist zu berücksichtigen, dass Eichhörnchen die Umgebung wahrnehmen (z.B. werden beobachtet), sich Ereignisse merken (z.B. wo Vorräte angelegt, wo jemanden beobachtet), in gewissen Bereichen aus Erfahrungen lernen und sich an Änderungen im Umfeld anpassen können.
Nur so sind Interaktionen zwischen Individuen einigermaßen realitätsnah zu simulieren.
Der Aufwand ist jedoch hoch:
Einerseits muss komplexes, zustandsbehaftetes Verhalten einzelner Eichhörnchen zusammen mit vielen unterschiedlichen Interaktionen detailgetreu simuliert werden, andererseits gewinnen Simulationsläufe durch die Zufallskomponenten erst durch eine sehr große Anzahl simulierter Eichhörnchen an Aussagekraft.
- Jedes Eichhörnchen zeigt charakteristische Verhaltensmuster, die Individuen voneinander unterscheidbar machen und die teilweise von den Eltern (hauptsächlich der Mutter) gelernt, zu einem anderen Teil aber zufällig angenommen werden.
- Überleben und Fortpflanzung sind zwar die wichtigsten, aber nicht die einzigen Lebensziele von Eichhörnchen.
Weitere Ziele sind die Abgrenzung und der Ausbau von Revieren, die Erreichung und Erhaltung der Dominanz gegenüber Artgenossen sowie die Steigerung des Komforts durch möglichst viele und bequeme Kobel.
Das sollte in die Simulation eingehen.
- Es geht nicht nur um Eichhörnchen, da diese Tiere in ein komplexes Ökosystem integriert sind.
Durch vergessene Vorratslager werden beispielsweise Bäume gepflanzt, die wiederum den Lebensraum der Eichhörnchen zu einem guten Teil prägen.
Nicht nur andere Eichhörnchen plündern Vorräte, sondern auch viele weitere Tiere, die z.B. durch ihre Anwesenheit mögliche Fressfeinde ablenken.
Fressfeinde sind nicht nur eine Gefahrenquelle, sondern sorgen z.B. durch Elimination kranker Tiere dafür, dass sich Krankheitserreger nicht ungehindert ausbreiten.
Trotz der Komplexität des Ökosystems soll es in einer realitätsnahen Simulation abgebildet werden.
- Eigentlich wird ein System zur Simulation von Ökosystemen benötigt.
Eichhörnchen stellen darin nur eine von vielen verschiedenen Arten dar.
Jede Art lässt sich im Idealfall durch Setzen geeigneter Parameter konfigurieren.
Auf diese Weise sind Interaktionen zwischen ganz verschiedenen Arten relativ leicht darstellbar, und die Simulation gewinnt an Realität.
Trotz der möglichen Vielfalt an Lebewesen sollen Eichhörnchen besonders genau simuliert werden.
- Der Sinn des ganzen Unterfangens besteht darin, den Eichhörnchen bestimmte Verhaltensweisen zu empfehlen (oder bei Bedarf auch vorzuschreiben) um ihre Lebenssituation zu verbessern.
Es soll daher auch möglich sein zu simulieren, wie sich bestimmte Empfehlungen längerfristig auswirken.
Da sich Eichhörnchen solchen Empfehlungen stur widersetzen könnten, soll auch bestimmter Widerstand gegen Empfehlungen simulierbar sein.
Auch verschiedene Strategien zur Durchsetzung von Empfehlungen oder Vorschriften sollen simulierbar sein.
- Es wird gemunkelt, dass es Naturschutzverbänden und dem Nagetierzuchtverein gar nicht um Details der Simulation eines Ökosystems geht, sondern um mögliche gesellschaftliche und politische Konsequenzen, die ihnen ein Dorn im Auge sein könnten.
Um entsprechenden Argumentationen besser den Wind aus den Segeln nehmen zu können wird empfohlen, die Simulation gleich so allgemein anzulegen, dass damit nicht nur Ökosysteme mit Eichhörnchen, sondern auch gesellschaftliche und politische Systeme mit Verbänden, Vereinen und menschlichen Individuen simulierbar sind.
Ziele wie Nahrungs- bzw. Einkommenssicherung, Fortpflanzungstrieb, Revierverhalten, Machterlangung und -erhaltung sowie Komfortsteigerung unterscheiden sich ohnehin nicht wesentlich von denen von Eichhörnchen.
- Simulationsergebnisse müssen genau und nachvollziehbar dargestellt werden.
Eine Tabelle mit jährichen Veränderungen der Eichhörnchenzahl wird den Anforderungen nicht mehr gerecht.
Es ist zu bezweifeln, dass die Darstellung in Form nur eines Textes ausreichen kann.
Viel eher wird es notwendig sein, Darstellungen auf mehreren Granularitätsebenen zur Verfügung zu haben – von Zusammenfassungen der wichtigsten statistischen Parameter und Annahmen bis zur genauen Nachverfolgung aller Aktivitäten und Wahrnehmungen eines einzelnen Eichhörnchens sowie dem zeitlichen Verlauf eines bestimmten Umwelteinflusses.
Ändern und erweitern Sie Ihre Lösung von Aufgabe 1 entsprechend.
Konzentrieren Sie sich wieder nur auf den Kern des Programms (ohne Benutzerschnittstelle) sowie das Testprogramm.
Der Kern soll einen möglichst großen Teil der vom Verein für ein selbstbestimmtes Eichhörnchenleben benötigten Funktionalität abdecken, aber keinerlei Eingabe von der Tastatur oder Ausgabe auf den Bildschirm machen.
Das Testprogramm soll mittels java Test von Aufgabe1-3 aus aufrufbar sein und die selbst gewählte Funktionalität überprüfen.
Tests sollen ohne Benutzerinteraktion ablaufen, sodass Aufrufer keine Testfälle auswählen oder Testdaten eintippen müssen.
Ergebnisse sollen (in nachvollziehbarer und verständlicher Form) am Bildschirm ausgegeben werden.
Neben dem Testprogramm soll die Klasse Test.java als Kommentar die Grobstruktur und den (geplanten) Funktionsumfang der Lösung zusammenfassen sowie eine kurze, aber verständliche Beschreibung der Aufteilung der Arbeiten auf die einzelnen Gruppenmitglieder enthalten – wer hat was gemacht.
Abgaben
Eine Besonderheit dieser Aufgabe liegt darin, dass es (bedingt durch den langen Zeitraum aufgrund der Feiertage) drei Abgabetermine gibt.
Zum Zeitpunkt der ersten Abgabe (Montag, 24.10.) soll die Klasse
Test.java als Kommentar schon die geplante Grobstruktur und den geplanten Funktionsumfang zusammenfassen sowie eine Beschreibung der geplanten Aufteilung der Arbeiten auf die einzelnen Gruppenmitglieder enthalten.
Weitere Teile der Lösung dürfen natürlich schon vorhanden sein, müssen aber nicht.
Tutor(inn)en werden sich
Test.java ansehen und bei Bedarf Änderungen verlangen bzw. Unterstützung anbieten.
Zum Zeitpunkt der zweiten Abgabe (Montag, 31.10.) soll die Lösung schon zumindest etwa zur Hälfte fertig sein.
Sollten Tutor(inn)en zur Ansicht gelangen, dass Lösungsansätze noch sehr unvollständig sind oder große strukturelle Mängel aufweisen, werden sie darauf hinweisen, die Behebung der Mängel noch vor dem letzten Abgabetermin verlangen und Unterstützung anbieten.
Zur dritten Abgabe (Mittwoch, 9.11.) muss die Lösung fertig sein.
Wie die Aufgabe zu lösen ist:
Die oben aufgezählten Vorschläge zur Verbesserung der Simulation sind nur als Anhaltspunkte gedacht.
Sie können auch andere sinnvoll erscheinende Verbesserungen machen und einzelne Punkte weglassen bzw. 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) etwa elf Stunden (das ist die doppelte Zeit, die zur Lösung einer durchschnittlichen Aufgabe angenommen wird) 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.
Überschätzen Sie sich nicht.
Erstellen Sie ein Konzept, von dem Sie annehmen, dass Sie die Arbeiten zeitlich sicher schaffen.
Wenn das Konzept Ihrer Tutorin oder Ihrem Tutor nach der ersten Abgabe 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.
Niemand schreibt Ihnen vor, 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.