Objektorientierte Programmierung
LVA 185.162, VL 2.0, 2007 W
| Ausgabe: | 22.11.2007 |
| reguläre Abgabe: | 29.11.2007, 12:45 Uhr |
| nachträgliche Abgabe: | 06.12.2007, 12:45 Uhr |
Jede Instanz der Klasse Tree
soll einen Baum (Datenstruktur) mit eindeutig
bestimmter Wurzel darstellen. Von jedem Knoten im Baum können beliebig viele
Kanten ausgehen. Sowohl Knoten als auch Kanten tragen Bezeichnungen. Über
Typparameter ist für Knoten und Kanten getrennt voneinander festlegbar, welche
Typen die Bezeichnungen haben. Die Bezeichnungen brauchen nicht eindeutig zu
sein, das heißt, es kann mehrere Knoten bzw. Kanten mit derselben Bezeichnung
geben. Jeder Baum enthält mindestens einen Knoten (den Wurzelknoten), der im
Konstruktor festgelegt wird. Methoden für folgende Aufgaben werden benötigt:
nextund
hasNext) hat dieser Iterator eine Methode
insertzum Einfügen einer neuen Kante und eines neuen Knotens (deren Bezeichnungen als Argumente übergeben werden). Die neue Kante zeigt auf den neuen Knoten und ist unmittelbar nach der aktuellen Position des Iterators einzufügen, so dass der nächste Aufruf von
nextden Bezeichner der neuen Kante liefert. Wurde
nextnoch nie aufgerufen, dann werden Kante und Knoten ganz am Anfang eingefügt. Liefert
hasNextals Ergebnis
false, dann werden sie ganz am Ende eingefügt. Der Iterator findet die Kanten immer an derselben Position, an der sie eingefügt wurden.
Die Klasse ISTree
soll ein Untertyp von Tree
sein, wobei Bezeichnungen von
Kanten vom Typ String und Bezeichnungen von Knoten vom Typ Integer sind.
Neben den Methoden von Tree
soll eine Methode unterstützt werden, die als
Ergebnis die Summe (vom Typ int) der Bezeichnungen aller Knoten zurückgibt,
auf die eine Kante mit einer als Argument gegebenen Bezeichnung zeigt.
Zwei Instanzen x und y von String werden als gleich betrachtet, wenn
x.equals(y)
als Ergebnis true
liefert. Iteratoren über Knotenbezeichnungen
liefern Instanzen von Tree
als Teilbäume, nicht von ISTree
.
CTree
soll Tree
um eine Methode connected
(mit zwei Argumenten vom Typ
der Bezeichnungen von Knoten) erweitern, die als Ergebnis true
liefert, wenn
es im Baum zwei verschiedene Knoten A und B mit folgenden Eigenschaften gibt,
sonst false
:
connectedist identisch mit der Bezeichnung von A.
connectedist identisch mit der Bezeichnung von B.
CTreesind stets vom Typ
Treeund unterstützen
connectednicht.
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. Unter anderem soll Test
eine generische
Methode copy
bereitstellen, die von einem beliebigen Baum (vom Typ Tree
,
kann tatsächlich auch von einem Untertyp davon sein, wobei Typen von Knoten-
und Kantenbezeichnungen durch Typparameter festgelegt sind) eine Kopie
erstellt. Das Ergebnis ist jedenfalls vom Typ Tree
(und kein Untertyp davon).
Zur Analyse des zu kopierenden Baums und zum Aufbau des neuen Baums sollen
ausschließlich die oben beschriebenen Methoden von Tree
verwendet werden;
die Verwendung von clone
ist verboten. Auch copy
ist zu testen.
Iterator) sondern schreiben Sie diese selbst. Vermeiden Sie unnötigen Code; insbesondere soll Funktionalität, die in einer Oberklasse bereits (in ähnlicher Form) vorhanden ist, in der Unterklasse nicht nochmals implementiert werden. Schreiben Sie alle nötigen Zusicherungen. Vermeiden Sie Kommentare, die keine Zusicherungen darstellen, sowie unklare Zusicherungen. Achten Sie auf die Sichtbarkeit, wobei angenommen wird, dass alle in der Aufgabenstellung angeführten Methoden von außen zugegreifbar sein sollen. Benennen Sie Ihre Klassen so, wie sie in der Aufgabenstellung heißen. Überlegen Sie, ob und wie Sie geschachtelte Klassen in dieser Aufgabe einsetzen können. Vermeiden Sie die Verwendung von Paketen.
Gruppe/Aufgabe5. 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/Aufgabe5. Stellen Sie sicher, dass ein Aufruf von
javac *.javain
Gruppe/Aufgabe5keine Fehlermeldungen und keine Warnungen, die mit Generizität in Zusammenhang stehen, liefert.