Objektorientierte Programmierung
LVA 185.162, VL 2.0, 2009 W

6. Laborübungsaufgabe

Themen:

dynamische Typinformation, homogene Übersetzung von Generizität

Termine:

Ausgabe: 25.11.2009
reguläre Abgabe: 2.12.2009, 13:45 Uhr
nachträgliche Abgabe: 9.12.2009, 13:45 Uhr

Abgabeverzeichnis:

Aufgabe6

Programmaufruf:

java Test

Grundlage:

Skriptum bis Seite 123, Schwerpunkt auf den Abschnitten 3.3.1 bis 3.3.3

Aufgabe

Welche Aufgabe zu lösen ist:

Eine Rinderherde besteht aus beliebig vielen Rindern. Jedes Rind hat einen eindeutigen, unveränderlichen Namen und ist entweder weiblich (Kuh) oder männlich (Stier oder Ochse). Bei einer Kuh ist bekannt, wieviel Liter Milch sie im Durchschnitt pro Tag produziert. Bei einem männlichen Rind ist bekannt, ob es kastriert (ein Ochse) oder unkastriert (ein Stier) ist. Rinder können auch als Arbeitstiere für unterschiedliche, auch wechselnde Arbeiten eingesetzt werden. Es gibt drei Arten von Arbeitstieren: Reittiere (bei ihnen ist die Geschwindigkeit in km/h bekannt, mit der sie einen Reiter mit 60 kg 30 Minuten tragen können), Tragetiere (bei ihnen ist das maximale Gewicht in kg bekannt, das sie 10 Stunden lang tragen können) und Zugtiere (bei ihnen ist die Zeit in h bekannt, die sie einen Pflug ziehen können). Zu einem Zeitpunkt wird ein Rind höchstens für eine Art von Arbeit eingesetzt.

Entwickeln Sie Java-Klassen bzw. Interfaces zur Darstellung von Rindern. Folgende Funktionalität soll unterstützt werden:

Schreiben Sie eine Klasse Herde, die Informationen über eine Rinderherde verwaltet und statistische Auswertungen über diese Herde ermöglicht. Jede Rinderherde wird über eine unveränderliche Nummer identifiziert. Folgende Methoden sollen unterstützt werden:

Die Klasse Test soll die wichtigsten Normal- und Grenzfälle (nicht interaktiv) überprüfen und die Ergebnisse in allgemein verständlicher Form in der Standardausgabe darstellen. Machen Sie unter anderem Folgendes:

Generizität, Arrays und vorgefertigte Container-Klassen dürfen zur Lösung dieser Aufgabe nicht verwendet werden. Vermeiden Sie mehrfach vorkommenden Code für gleiche oder ähnliche Programmteile.

Warum die Aufgabe diese Form hat:

Diese Aufgabenstellung lässt Ihnen mehr Entscheidungsspielraum als die beiden vorangegangenen. Die gleichzeitige Unterscheidung von Kühen, Stieren und Ochsen sowie zwischen unterschiedlichen Arten von Arbeitstieren stellt beispielsweise eine Schwierigkeit dar, für die es mehrere sinnvolle Lösungsansätze gibt. Sie werden irgendeine Form von Container selbst erstellen müssen, wobei die genaue Form und Funktionalität nicht vorgegeben ist. Da Container an mehreren Stellen benötigt werden, wäre die Verwendung von Generizität sinnvoll. Dadurch, dass Sie Generizität nicht verwenden dürfen und trotzdem mehrfache Vorkommen ähnlichen Codes vermeiden sollen, werden Sie gezwungen, Techniken ähnlich denen einzusetzen, die der Compiler zur homogenen Übersetzung von Generizität verwendet. Vermutlich sind Typumwandlungen kaum vermeidbar. Sie sollen dadurch ein tieferes Verständnis des Zusammenhangs zwischen Generizität und Typumwandlungen erreichen.

Was im Hinblick auf die Beurteilung zu beachten ist:

Der Schwerpunkt bei der Beurteilung liegt auf der vernünftigen Verwendung von dynamischer und statischer Typinformation. Kräftige Punkteabzüge gibt es für Punkteabzüge gibt es unter anderem auch für mangelhafte Zusicherungen und falsche Sichtbarkeit.

Wie die Aufgabe zu lösen ist:

Es wird empfohlen, die Aufgabe zuerst mit Hilfe von Generizität zu lösen und in einem weiteren Schritt eine homogene Übersetzung der Generizität (wie im Skriptum beschrieben) händisch durchzuführen. Durch diese Vorgehensweise erreichen Sie eine statische Überprüfung der Korrektheit vieler Typumwandlungen und vermeiden den unnötigen Verlust an statischer Typsicherheit.

Zur Lösung dieser Aufgabe ist die Verwendung von Typumwandlungen ausdrücklich erlaubt. Versuchen Sie trotzdem, die Anzahl der Typumwandlungen klein zu halten und so viel Typinformation wie möglich statisch vorzugeben. Das hilft Ihnen, die Lösung überschaubar zu halten und einen unnötigen Verlust an statischer Typsicherheit zu vermeiden. Gehen Sie auch möglichst sparsam mit dynamischen Typabfragen und Ausnahmebehandlungen um.

Achten Sie darauf, dass Sie Divisionen durch 0 vermeiden. Führen Sie zumindest einen Testfall ein, bei dem eine statistische Auswertung ohne entsprechende Vorkehrungen eine Exception auslösen würde.

Bedenken Sie, dass es mehrere sinnvolle Lösungsansätze für diese Aufgabe gibt. Wenn Sie einmal einen gangbaren Weg gefunden haben, bleiben Sie dabei, und vermeiden Sie es, zu viele Möglichkeiten auszuprobieren. Das könnte Ihnen viel Zeit kosten, ohne die Lösung zu verbessern.

Die Art der Verwendung eines Rindes als Arbeitstier kann sich im Laufe der Zeit ändern. Am besten stellt man solche Beziehungen über Rollen dar: Für jede Art von Arbeitstier gibt es eine eigene Klasse mit den für die jeweilige Art typischen Daten, und ein gemeinsamer Obertyp ermöglicht den Zugriff auf diese Daten auf einheitliche Weise. In jedem Rind gibt es einen Zeiger auf die aktuelle Art von Arbeitstier (= die Rolle, die das Rind gerade spielt). Wenn sich die Art ändert, braucht nur dieser Zeiger neu gesetzt zu werden. Durch geschickte Auswahl der Methoden einer Rolle sind die meisten Fallunterscheidungen vermeidbar, das heißt, Fallunterscheidungen werden durch dynamisches Binden ersetzt. Es ist überlegenswert, ob z.B. das Geschlecht eines Rindes ebenso als Rolle dargestellt werden soll.

Was im Hinblick auf die Abgabe zu beachten ist:

Verzichten Sie auch bei der Lösung dieser Aufgabe auf die Verwendung von packages und Verzeichnissen innerhalb des Abgabeverzeichnisses Gruppe/Aufgabe6. Schreiben Sie (abgesehen von geschachtelten Klassen) nicht mehr als eine Klasse in jede Datei.
Complang
Puntigam
   Kontakt
   Research
   Lehre
      OOP
      Typsysteme
      EP2
      FOOP
      Prog.spr.
      frühere Lehre
         LVAs 2017 W
         LVAs 2017 S
         LVAs 2016 W
         LVAs 2016 S
         LVAs 2015 W
         LVAs 2015 S
         LVAs 2014 W
         LVAs 2014 S
         LVAs 2013 W
         LVAs 2013 S
         LVAs 2012 W
         LVAs 2012 S
         LVAs 2011 W
         LVAs 2011 S
         LVAs 2010 W
         LVAs 2010 S
         LVAs 2009 W
            OOP
               1. Aufgabe
               2. Aufgabe
               3. Aufgabe
               4. Aufgabe
               5. Aufgabe
               6. Aufgabe
               7. Aufgabe
               8. Aufgabe
               9. Aufgabe
               Cacao
            Typsysteme
         LVAs 2009 S
         LVAs 2008 W
         LVAs 2008 S
         LVAs 2007 W
         LVAs 2007 S
         LVAs 2006 W
         LVAs 2006 S
         LVAs 2005 W
         LVAs 2005 S
         LVAs 2004 W
         LVAs 2004 S
         LVAs 2003 W
   Links
Sitemap
Kontakt
Schnellzugriff:
Tutoren
Skriptum
Folien
vorige Aufgabe
nächste Aufgabe
Fakultät für Informatik
Technische Universität Wien
Anfang | HTML 4.01 | Datenschutzerklärung | letzte Änderung: 2009-11-25 (Puntigam)