1 Die rekursive Datenstruktur Liste 1 2 Trennung















- Slides: 15
1. Die rekursive Datenstruktur Liste 1. 2 Trennung von Struktur und Inhalt Die Warteschlange soll anstelle von Objekten der Klasse Patient Objekte der Klasse Taxi oder einer anderen Klasse verwalten. Dazu sind in der Klasse Warteschlange einige Änderungen nötig. Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 2 Trennung von Struktur und Inhalt 1
Es wäre dehalb besser, die Klasse Warteschlange unabhängig von der Klasse der zu verwaltenden Objekte zu modellieren. Man nennt dies Trennung von Struktur und Inhalt. Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 2 Trennung von Struktur und Inhalt 2
Die Struktur wird mit einer Klasse Knoten umgesetzt. Die Klasse Knoten verwaltet unabhängig davon den Inhalt. hat als Nachfolger > hat als Anfang > 0. . 1 Warteschlange hat als Ende > 0. . 1 Knoten 0. . 1 verwaltet > 1 Patient Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 2 Trennung von Struktur und Inhalt 3
Übung 1 Implementieren einer Warteschlange mit Trennung von Struktur und Inhalt Ändere die Implemetierung der Warteschlange nach dem Klassendiagramm ab. Teste das Programm und versuche, die Klasse Patient durch die Klasse Taxi zu ersetzen. Welche entscheidenden Nachteile hat die Modellierung immer noch? Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 2 Trennung von Struktur und Inhalt 4
Verbesserung der Trennung von Struktur und Inhalt Um bequemer andere Datentypen (als in unserem Bsp. Patient) in der Liste zu verwalten, sollen die Knoten nur die Schnittstelle DATENELEMENT verwalten. Dies kann man in Java mit einem Interface umsetzen. Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 2 Trennung von Struktur und Inhalt 5
Wiederholung und Vertiefung: Vererbung in Java Durch Vererbung kann man eine Hierarchie zwischen verschiedenen Klassen modellieren: Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 2 Trennung von Struktur und Inhalt 6
Wiederholung und Vertiefung: Vererbung in Java In Java wird die Vererbung durch den Zusatz extends realisiert: public class Schueler extends Person { // Zusaetzliche Attribute int schuleintritt; Person erziehungsberechtigter; // Konstruktoren public Schueler () { Person erziehungsberechtiger = new Person(); } public Schueler (String name, String adresse, int tag, int monat, int jahr, String name_eb) { super(name, adresse, tag, monat, jahr); schuleintritt = 2001; Person erziehungsberechtiger = new Person(); erziehungsberechtigter. name = name_eb; erziehungsberechtigter. adresse = adresse; } } // Zusaetzliche Methoden public void aenderung_erziehungsberechtigung (String name_eb) { erziehungsberechtigter. name = name_eb; } Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 2 Trennung von Struktur und Inhalt 7
Wiederholung und Vertiefung: Vererbung in Java Beim Implementieren der Superklasse ist oft noch nicht bekannt, wie bestimmte Methoden in den Unterklassen konkret definiert sein sollen. Für diese Situation gibt es das Konzept der abstrakten Klassen: Abstrakte Klassen dürfen Methoden enthalten, die entweder nicht oder nur unvollständig implementiert sind. Solche Methoden heißen abstrakte Methoden. Von abstrakten Klassen können keine Objekte erzeugt werden. Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 2 Trennung von Struktur und Inhalt 8
Wiederholung und Vertiefung: Vererbung in Java public abstract class Figur { // Attribute double rahmendicke; String farbe; // Konstruktoren //. . . ; // Methoden public abstract double berechne_flaeche () ; } public class Kreis extends Figur { // Definition der Kreiszahl als Konstante private final double PI = 3. 1415; // Zusaetzliche Attribute double radius; // Konstruktoren //. . . ; // Zusaetzliche Methoden void gib_radius () { return radius; } // Vollstaendig implementierte Methoden der abstrakten Superklasse public double berechne_flaeche () { return PI * radius; } } Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 2 Trennung von Struktur und Inhalt 9
Wiederholung und Vertiefung: Vererbung in Java Eine Schnittstelle (Interface) bietet eine etwas andere Möglichkeit der Abstraktion: Eine Schnittstelle oder ein Interface ist eine abstrakte Klasse, die ausschließlich abstrakte Methoden spezifiziert. Sie enthält einen Bauplan für Methoden, die in Klassen, welche die Schnittstelle anbieten sollen, implementiert werden müssen. Zusätzlich ist innerhalb der Klasse die Definition von Konstanten möglich. Eine Schnittstelle besitzt folglich eine Menge von abstrakten Methoden, aber keine Attribute. Eine Klasse kann nun eine Schnittstelle implementieren, d. h. die von der Schnittstellen vordefinierten Methoden implementieren. Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 2 Trennung von Struktur und Inhalt 10
Wiederholung und Vertiefung: Vererbung in Java Syntax in Java: public interface Datenelement{ public void information. Ausgeben(); } public class Patient implements Datenelement{ //. . . public void information. Ausgeben(){ System. out. print(name +" "); } } Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 2 Trennung von Struktur und Inhalt 11
Übung 2 Teste die Beispiele zum Thema Vererbung, abstrakten Klasse und Interface Ordner: Loesungen/1_1_Die_rekursive_Datenstruktur_Liste/ 1_2_Trennung_von_Struktur_und_Inhalt/Vererbung_und_Schnittstellen Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 2 Trennung von Struktur und Inhalt 12
Übung 3 Implementieren einer Warteschlange mit verbesserter Trennung von Struktur und Inhalt Ändere die Implemetierung der Warteschlange nach dem Klassendiagramm ab. Teste das Programm und versuche erneut, die Klasse Patient durch die Klasse Taxi zu ersetzen. Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 2 Trennung von Struktur und Inhalt 13
Übung 4 Implementieren einer Klasse Wort mithilfe einer Liste Zeichenketten werden in Java durch die Klasse String dargestellt. In dieser Übung soll stattdessen eine Klasse Wort implementiert werden, deren Objekte als einfach verkettete Listen von Objekten der Klasse Zeichen verwaltet werden. Die Klasse Wort soll die folgenden Methoden enthalten: int wortlaenge. Geben() Zeichen erstes. Zeichen. Geben() Zeichen zeichen. Geben(int position) void zeichen. Hinten. Einfuegen(Zeichen inhalt) void zeichen. Vorne. Loeschen() void wort. Ausgeben() Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 2 Trennung von Struktur und Inhalt 14
Übung 5* Verwenden der Javaklasse Array. List Für die Datenstruktur Liste stehen in Java verschiedene Klassen zur Verfügung: Array. List und Vector arbeiten dabei allerdings intern mit einem Array. Linked. List dagegen als eine zweifach verkettete Liste umgesetzt, d. h. die Knoten haben Referenzen auf den Vorgänger und den Nachfolger. Informiere dich über diese Klassen auf der offiziellen Javadokumentation (gib „java api“ in eine Suchmaschine ein) oder in den Handbüchern. Schreibe eine Klasse Patienten. Liste, in der ein Objekt der Klasse Array. List mit der Referenzklasse Patient verwaltet wird. Implementiere dann einige Methoden (hinten. Einfuegen, vorne. Einfuegen, ende. Entfernen, anfang. Entfernen, liste. Ausgeben, . . . ) mithilfe der Verwendung der Methoden von Array. List. Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 2 Trennung von Struktur und Inhalt 15