Objektorientierte Programmierung
LVA 185.162, VL 2.0, 2007 W
| Ausgabe: | 29.11.2007 |
| reguläre Abgabe: | 06.12.2007, 12:45 Uhr |
| nachträgliche Abgabe: | 13.12.2007, 12:45 Uhr |
Die generische Klasse Tree
ähnelt der gleichnamigen Klasse aus Aufgabe 5.
Wie in Aufgabe 5 sind die Typen der Bezeichnungen von Kanten und Knoten durch
Typparameter bestimmt, aber Bezeichnungen für Knoten (nicht von Kanten) müssen
eine Boolesche Methode better
unterstützen. Ein Aufruf von x.better(y)
liefert true
wenn eine Knotenbezeichnung x auf nicht näher bestimmte Weise
besser ist als eine Knotenbezeichnung y. Anders als in Aufgabe 5 kann eine
Kante von einem Knoten mit der Bezeichnung x zu einem mit der Bezeichnung y nur
eingefügt werden, wenn x.better(y)
als Ergebins true
liefert. Die Methode
zum Einfügen von Kanten und Knoten gibt einen Booleschen Wert zurück, der
besagt, ob Kante und Knoten eingefügt wurden.
Das (vermutlich generische) Interface Better
beschreibt die Boolesche Methode
better
, die in Tree
benötigt wird.
Instanzen des Typs Computer
bieten Methoden zur Abfrage einiger Kennzahlen
von Computern. Benötigt werden Informationen zu Hauptspeicher- und
Festplattengrößen sowie zur Laufzeit eines bestimmten (nicht näher bekannten)
Programms. Die Methode better
vergleicht zwei Computer und liefert true
,
wenn this
in mindestens einer abfragbaren Kennzahl besser und in keiner
Kennzahl schlechter ist als das Argument von better
. Zusätzliche, nur in
Untertypen von Computer
abfragbare Kennzahlen gehen nicht in better
ein.
Folgende Untertypen von Computer
werden benötigt: Laptop
erlaubt zusätzlich
die Abfrage der Bildschirmgröße und der Batterielaufzeit, und Server
unterstützt die Abfrage des Stromverbrauchs.
Wie in Aufgabe 5 soll es, außer auf die hier und in Aufgabe 5 beschriebenen
Methoden sowie Standardmethoden wie equals
und toString
, keinerlei
Zugriffsmöglichkeiten von außen geben, auch nicht von Unterklassen aus oder zu
Testzwecken.
Die Klassen ISTree
und CTree
aus der 5. Aufgabe werden in der 6. Aufgabe
nicht benötigt und sollen weggelassen 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. Die durchzuführenden Überprüfungen sind
vorgegeben und in der gegebenen Reihenfolge durchzuführen:
Treemit mehreren Ebenen (das heißt, der Baum soll neben dem Wurzelknoten und den Blattknoten auch innere Knoten enthalten), wobei Bezeichnungen von Kanten vom Typ
Laptopund jene von Knoten vom Typ
Serversind. Dieselben Bezeichnungen von Knoten und Kanten können auch mehrfach im Baum vorkommen. Versuchen Sie auch Kanten einzufügen, die nicht erlaubt sind.
Tree, wobei Bezeichnungen von Kanten vom Typ
Serverund jene von Knoten vom Typ
Computersind. Die Bezeichnung des Wurzelknotens entspricht der des in Punkt 1 erzeugten Baumes. Die restliche Struktur des Baums ähnelt der des in Punkt 1 erzeugten Baumes, wobei jedoch Bezeichnungen von Knoten und Kanten vertauscht sind. Das heißt, wenn es im in Punkt 1 erzeugten Baum eine Kante mit der Bezeichnung x gibt, die auf einen Knoten mit der Bezeichnung y zeigt, dann wird versucht, eine Kante mit der Bezeichnung y einzufügen, die auf einen Knoten mit der Bezeichnung x zeigt. Schlägt dieser Versuch fehl, kann der gesamte Teilbaum, auf den die Kante zeigt, nicht eingefügt werden. Wählen Sie Knoten- und Kantenbezeichnungen so, dass es sowohl erfolgreiche als auch fehlgeschlagene Einfügungsversuche gibt.
instanceof,
getClassund Typumwandlungen (type casts). Die vorgegebenen Testfälle werden ihnen dabei helfen, die häufigsten Fehler in der Lösung dieser Aufgabe selbst zu finden, wenn Sie Warnungen des Compilers ernst nehmen. Achtung: Es gibt häufig verwendete Java-Compiler (vor allem unter Eclipse), die nicht alle Fehler im Zusammenhang mit Generizität richtig erkennen. Testen Sie Ihre Lösung daher bitte rechtzeitig auf der g0.
raw typesbzw.
type erasures, ebenso wie für Verwendungen von
instanceof,
getClassund Typumwandlungen, die dazu dienen, Probleme im Umgang mit Generizität zu verschleiern. Punkteabzüge gibt es, wie bereits üblich, auch für unnötigen (oder unnötig komplexen) Code, mangelhafte Zusicherungen, inkorrekte Untertypbeziehungen, schlechte Verwendung von Sichtbarkeit, sowie fehlende oder nicht der Aufgabenstellung entsprechende Funktionalität.
Gruppe/Aufgabe6. Das Programm soll von diesem Verzeichnis aus durch
java Testaufrufbar sein. Schreiben Sie (abgesehen von geschachtelten Klassen) 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 bei der Beurteilung nicht berücksichtigt. Verzichten Sie auf die Verwendung von Verzeichnissen innerhalb von
Gruppe/Aufgabe6. Stellen Sie sicher, dass ein Aufruf von
javac *.javain
Gruppe/Aufgabe6keine Fehlermeldungen und keine Warnungen, die mit Generizität in Zusammenhang stehen, liefert.