Übung 09: OOP und dynamische Datenstrukturen

Werbung
Übung 09: OOP und dynamische Datenstrukturen
Abgabetermin: 10. 1. 2006
Name:
Gruppe:
Matrikelnummer:
G1 (Löberbauer) †
Aufgabe
Aufgabe 09.1
G2 (Prähofer)
†
G3 (Prähofer)
†
Punkte
gelöst
abzugeben schriftlich
abzugeben
elektronisch
Korr.
12
†
Beschreibung in Prosa
Java-Programm
†
Java-Programm
†
Pkte
Java-Programm
Testspezifikation und
Ergebnisse
Aufgabe 09.2
12
†
Beschreibung in Prosa
Java-Programm
Testfälle und Ergebnisse
Aufgabe 09.1: Dynamische Datenstrukturen
Gegeben seien folgende zwei Klassen List und Node zur Repräsentation von einfach-verketteten linearen
Listen mit int-Werten:
class List {
Node head; // first node in list
public List() { … }
…
} // List
class Node {
int val; // value in node
Node next; // next node in list
public Node(int v) {…}
public Node(int v, Node n) {…}
…
} // Node
Vervollständigen Sie die beiden Konstruktoren und implementieren Sie in der Klasse List folgende Methoden:
-
void prepend(int val): fügt den Wert val vorne in die Liste ein,
-
void append(int val): fügt den Wert val hinten in die Liste ein,
-
boolean sorted(): stellt fest, ob die Werte der Knoten der Liste aufsteigend sortiert sind,
-
void insert(int val): fügt den Wert val in eine sortierte Liste an der richtigen Stelle ein, sodass die
neue Liste wieder sortiert ist,
-
delete(int val): Löscht den Wert val aus der Liste. Bei mehrfachem Vorkommen des Wertes sollen
alle Knoten mit Wert val aus der Liste gelöscht werden,
-
String toString(): liefert eine Zeichenkette mit den Werten der Knoten, durch Beistriche voneinander
getrennt,
-
List duplicate(): liefert ein Duplikat der Liste (auch alle Knoten der Liste werden dupliziert) und
-
void merge(List l): fügt in die sortierte Liste (this) alle Knoten der sortierten Liste l sortiert ein und
entfernt diese aus der Liste l, sodass die Liste l nach dem Aufruf der Methode merge leer ist.
Testen Sie Ihre Methoden ausführlich, auch für Fehlerfälle. Stellen Sie dazu eine ausführliche Testspezifikation
auf.
Aufgabe 09.2: Familienstammbaum
Realisieren Sie ein Programmsystem zum Aufbau und zur Repräsentation eines Familienstammbaums. Dazu
implementieren Sie folgende Klassen:
-
Person sei eine abstrakte Basisklasse, in der die Gemeinsamkeiten von männlichen und weiblichen
Personen implementiert sind
-
Male ist die Klasse der männlichen Personen
-
Female sei die Klasse der weiblichen Personen
Realisieren Sie Beziehungen zwischen Personen mittels Objektreferenzen (bzw. mittels Arrays von
Referenzen). Die folgende Abbildung zeigt die Klassen mit den Beziehungen zwischen den Objekten. Dabei
bedeutet [min,max], dass zu mindestens min und höchstens max Objekten eine Beziehung besteht (d.h. es ist
angenommen, dass eine Person höchstens 20 Kinder hat und es ist weiters möglich, dass zu einer Person der
Vater und die Mutter nicht gesetzt sind).
[0,20] children
Person
[0,1] mother
father [0,1]
Male
[0,1]
husband
wife
[0,1]
Female
Um den Stammbaum aufzubauen und zu verändern, implementieren Sie Methoden für:
-
das Heiraten eines Mannes und einer Frau, wobei dadurch Mann und Frau durch Objektreferenzen
miteinander verbunden werden
-
eine Frau bekommt ein männliches oder ein weibliches Kind, wobei der Ehemann Vater wird.
Erlauben Sie Abfragen über die familiären Beziehungen, z.B. Kind-Eltern, Ehepartner, Geschwister etc.
Implementieren Sie dazu Methoden für Abfragen im Stammbaum, wie z.B. Female getMother(), Person[]
getChildren, Male getWife(), Person[] getSiblings() etc.
Implementieren Sie Methoden String getName() und String toString(), um auf den Namen und eine
Beschreibung einer Person zu erhalten. Verwenden Sie bei toString die Möglichkeit mit super() die
Methode der Basisklasse aufzurufen.
Implementieren Sie geeignete Konstruktoren für die Klassen. Verwenden Sie dabei die Möglichkeit mit this()
einen anderen Konstruktor der selben Klasse und mit super() einen Konstruktor der Basisklasse aufzurufen.
Testen Sie Ihr Programm, indem Sie in der main-Methode einen Stammbaum aufbauen, dann Abfragen
durchführen und die Ergebnisse auf der Konsole ausgeben (d.h. Sie brauchen keinen Benutzerdialog
schreiben).
Hinweise:
-
Überlegen Sie genau, welche Variablen und welche Methoden in welchen Klassen am besten implementiert
werden.
-
Sie brauchen keine weiteren Sonderfälle, wie z.B. unehelicher Kinder oder gleichgeschlechtliche Ehepaare,
berücksichtigen.
Herunterladen