Objektorientierte Programmierung
LVA 185.162, VL 2.0, 2007 W
| Ausgabe: | 13.12.2007 |
| reguläre Abgabe: | 10.01.2008, 12:45 Uhr |
| nachträgliche Abgabe: | 17.01.2008, 12:45 Uhr |
7
/ \
4 8
/ \ \
2 5 11
Definieren Sie ein Interface KeyType
, das die Methoden less
and
equal
unterstützt.
Entwickeln Sie eine generische Klasse BinTree
für einen binäreren
Suchbaum mit einem Schlüssel eines Untertyps von KeyType
, die in
einem Knoten den Schlüssel und (nicht als Teil des Schlüssels) einen
Zähler speichert. Die Klasse BinTree
bzw. die Knoten müssen den
gleichzeitigen Zugriff mehrerer Threads sicher ermöglichen. Methoden
für folgende Aufgaben werden benötigt:
insert, die einen Knoten in den Baum einfügt und den Zähler auf 1 setzt, falls der Knoten mit dem Schlüssel noch nicht existiert, und andernfalls den Zähler um 1 erhöht.
delete, die den Zähler um 1 erniedrigt (falls der Knoten mit dem Schlüssel existiert und der Zähler größer als 1 ist), die den Knoten entfernt (falls der Knoten mit dem Schlüssel existiert und der Zähler gleich 1 ist) und anderfalls keine Aktion durchführt.
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. Bitte achten Sie darauf, dass
der Test nach kurzer Zeit terminiert. Zumindest die folgenden
Überprüfungen sind durchzuführen:
BinTreemit mindestens zwei selbstdefinierten Klassen, die ganze Zahlen und Zeichenketten (Strings) darstellen.
BinTreemit vier Threads, die Knoten in den Baum einfügen, und gleichzeitig zwei Threads, die Knoten vom Baum entfernen. Jeder Thread soll zumindest 10.000 Einfüge- oder Löschoperationen mit 100 unterschiedlichen Schlüsseln durchführen. Geben Sie für jeden Einfügethread getrennt aus, wie viele Einfügeoperationen ausgeführt wurden und wie oft dabei nur der Zähler erhöht wurde. Geben Sie für jeden Löschthread getrennt aus, wie viele Löschoperationen ausgeführt wurden, wie oft dabei Knoten nicht im Baum enthalten waren und wie oft nur der Zähler erniedrigt wurde.
Punkteabzüge gibt es, wie bereits üblich, auch für unnötigen (oder unnötig komplexen) Code, mangelhafte Zusicherungen und falsche Sichtbarkeit.
Gruppe/Aufgabe8. 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/Aufgabe8.