1. Die rekursive Datenstruktur Liste 1 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
Man nennt dies Trennung von Struktur und Inhalt. 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
Die Struktur wird mit einer Klasse Knoten umgesetzt. Die Klasse Knoten verwaltet unabhängig davon den Inhalt. Warteschlange Knoten hat als Anfang > 0..1 hat als Ende > 0..1 hat als Nachfolger > 0..1 Patient verwaltet > 1 Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1.2 Trennung von Struktur und Inhalt
Ü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
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
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
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
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
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 * radius; } } Wiederholung und Vertiefung: Vererbung in Java Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1.2 Trennung von Struktur und Inhalt
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
Wiederholung und Vertiefung: Vererbung in Java Syntax in Java: public interface Datenelement{ public void informationAusgeben(); } public class Patient implements Datenelement{ //... public void informationAusgeben(){ System.out.print(name +" "); Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1.2 Trennung von Struktur und Inhalt
Übung 2 Teste die Beispiele zum Themea 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
Ü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
Ü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 wortlaengeGeben() Zeichen erstesZeichenGeben() Zeichen zeichenGeben(int position) void zeichenHintenEinfuegen(Zeichen inhalt) void zeichenVorneEinfuegen(Zeichen inhalt) void zeichenVorneLoeschen() void wortAusgeben() Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1.2 Trennung von Struktur und Inhalt
Übung 5* Verwenden der Javaklasse ArrayList Für die Datenstruktur Liste stehen in Java verschiedene Klassen zur Verfügung. Eine dieser Klassen ist ArrayList. Informiere dich über diese Klasse auf der offiziellen Javadokumentation (gib „java api“ in eine Suchmaschine ein) oder in den Handbüchern. Schreibe eine Klasse PatientenListe, in der einObjekt der Klasse ArrayList mit der Referenzklasse Patient verwaltet wird. Implementiere dann einige Methoden (hintenEinfuegen, vorneEinfuegen, endeEntfernen, anfangEntfernen, listeAusgeben,...) mithilfe der Verwendung der Methoden von ArrayList. Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1.2 Trennung von Struktur und Inhalt