Übung Grundlagen der Programmierung WS 2004/05 Übung 9: OOP und Dynamische Datenstrukturen Abgabetermin: 11. 1. 2005 Name: Matrikelnummer: Gruppe: ❏ G1 (Löberbauer) ❏ G2 (Prähofer) Aufgabe Punkte gelöst Aufgabe 09.1 12 Aufgabe 09.2 12 ❏ G3 (Prähofer) abzugeben schriftlich abzugeben elektronisch korr. ❏ Prosabeschreibung, Java-Programm, Testfälle und Testausgabe Java-Programm ❏ ❏ Prosabeschreibung, Java-Programm, Testfälle und Testausgabe Java-Programm ❏ Pkte Aufgabe 9_1: Operationen auf linearen Listen Gegeben seien die Klassen List und Node für Listen von Integers aus der Vorlesung. class List { Node head, tail; public List() { … } … } // List class Node { int val; // value in node Node next; // next node public Node(int v) { … } … } // Node Implementieren Sie folgende Methoden in der Klasse List: public static List readList(String fileName): ist eine static Methode, welche eine Reihe von Integers aus der Datei mit Namen fileName einliest und eine Liste aufbaut. public void print(): gibt die Elemente der Liste auf der Konsole aus public void print(String fileName): schreibt die Elemente der Liste in die Datei mit Namen fileName public List duplicate(): liefert ein Duplikat der Liste (auch alle Knoten der Liste werden dupliziert) public boolean sorted(): stellt fest, ob die Werte der Knoten der Liste aufsteigend sortiert sind public void deleteDuplicates(): entfernt aus einer aufsteigend sortierten Liste die Werte die mehrmals vorkommen (jeder Wert soll nur einmal vorkommen). Achten Sie auf möglichst kurze und schnelle Lösungen. Gehen Sie bei der Lösung folgend vor: 1. Skizzieren Sie die Methoden in Prosa. Fertigen Sie sich zur Verdeutlichung Skizzen der verketteten Knotenstrukturen an (siehe Vorlesung) 2. Implementieren Sie die Klassen und die Methoden in Java 3. Stellen Sie für alle Methoden einen Testplan auf und testen Sie das Programm. Übung Grundlagen der Programmierung WS 2004/05 Aufgabe 9_2: Generische Liste Mittels Vererbung und dynamischer Bindung können generische Datenstrukturen implementiert werden. Eine Liste für beliebige Objekte kann zum Beispiel aus folgenden Knoten aufgebaut werden: class GenericNode { GenericNode next; Object value; } Mit der GenericNode lassen sich beliebige Objekte (Unterklassen von Object) speichern. Die Klasse Object definiert zwei Methoden, die für diese Aufgabe verwendet, bzw. von Unterklassen überschrieben werden sollen: public boolean equals(Object o): prüft dieses Objekt mit dem Objekt o auf Gleichheit. public String toString(): liefert eine String-Repräsentation des Objektes. Realisieren Sie unter Verwendung von GenericNode eine Liste (GenericList), mit folgenden Operationen: public void insertObject(Object o): fügt Objekt o in die Liste ein. Ist das Objekt bereits in der Liste enthalten (Vergleich der Objekte mit equals), soll das Objekt nicht nochmals eingefügt werden, sondern es soll dem value-Feld des Knotens das Objekt o neu zugewiesen werden. public boolean contains(Object o): prüft, ob das Objekt o in der Liste enthalten ist. public int size(): liefert die Anzahl der Elemente. public String toString(): liefert eine String-Repräsentation der Liste, indem die StringRepräsentationen der Elemente durch Leerzeichen getrennt aneinandergereiht werden. public void print(): gibt den Inhalt der Liste auf der Konsole aus (jeder Wert in einer neuen Zeile) Wichtig: Bei den Methoden soll für den Vergleich der Objekte die Methode equals verwendet werden!! Verwenden Sie diese Implementierung dann folgendermaßen: a) Test mit verschiedenen Objekten: Testen Sie die generische Liste, indem Sie in eine Liste Objekte folgender Klassen einfügen: String, java.util.Date, java.lang.Integer. Geben Sie dann den Inhalt der Liste unter Verwendung der Methode print aus. b) Klasse Person, Student und Teacher Schreiben Sie dann eine Basisklasse Person und zwei Unterklassen Student und Teacher wie folgt: Person habe eine SSN (Social Security Number), mit dem jede Person eindeutig identifiziert werden kann. Schreiben Sie eine Methode equals, die Personen dann als gleich erkennt, wenn sie gleiche SSN haben. Implementieren Sie zwei Unterklassen Student und Teacher, die von Person abgeleitet sind und zusätzliche Felder haben (z.B. Studienrichtung für Student und Institut für Teacher) Schreiben Sie eigene Implementierungen von toString für Teacher und Student, die eine entsprechende Beschreibung ausgeben Bauen Sie zu Testzwecken eine Liste mit gemischten Student- und Teacher-Objekten auf und geben Sie den Inhalt der Liste unter Verwendung der Methode print aus. Gehen Sie bei der Lösung folgend vor: 1. Skizzieren Sie Klassen und die Methoden in Prosa. 2. Implementieren Sie die Klassen und Methoden in Java 3. Stellen Sie für alle Methoden einen Testplan auf und testen Sie das Programm.