1 Die rekursive Datenstruktur Liste 1 5 Das

  • Slides: 16
Download presentation
1. Die rekursive Datenstruktur Liste 1. 5 Das Entwurfsmuster Kompositum Bei den Methoden für

1. Die rekursive Datenstruktur Liste 1. 5 Das Entwurfsmuster Kompositum Bei den Methoden für die Datenstruktur Liste muss die leere Liste im Allgemeinen gesondert behandelt werden. Ebenso erfordert der letzte Knoten mit dem Nachfolger null einen eigenen Fall. Beispiel 1: int laenge. Geben() Liste Knoten Informatik 11 - 1. Die rekursive Datenstruktur Liste – 1. 5 Das Entwurfsmuster Kompositum 1

Beispiel 2: void hinten. Einfuegen(Datenelement d. Neu) Liste Knoten Informatik 11 - 1. Die

Beispiel 2: void hinten. Einfuegen(Datenelement d. Neu) Liste Knoten Informatik 11 - 1. Die rekursive Datenstruktur Liste – 1. 5 Das Entwurfsmuster Kompositum 2

Um dies in Modellierung und Implementierung übersichtlicher zu gestalten, hat es sich bewährt, eine

Um dies in Modellierung und Implementierung übersichtlicher zu gestalten, hat es sich bewährt, eine eigene Klasse Abschluss zu definieren, die keinen Nachfolger hat und kein Datenelement referenziert, sondern nur das Ende der Liste verwaltet. Objektdiagramm für die bisherige Modellierung Objektdiagramm für die Modellierung mit der Klasse ABSCHLUSS Informatik 11 - 1. Die rekursive Datenstruktur Liste – 1. 5 Das Entwurfsmuster Kompositum 3

Abschluss und Knoten sind Unterklassen einer Klasse Listenelement, welche nur die gemeinsamen Methodennamen auflistet.

Abschluss und Knoten sind Unterklassen einer Klasse Listenelement, welche nur die gemeinsamen Methodennamen auflistet. Aus diesem Grund ist es sinnvoll, Listenelement als abstrakte Klasse zu modellieren. Informatik 11 - 1. Die rekursive Datenstruktur Liste – 1. 5 Das Entwurfsmuster Kompositum 4

Abschluss und Knoten stellen nach außen die selben Methoden zur Verfügung, die sich im

Abschluss und Knoten stellen nach außen die selben Methoden zur Verfügung, die sich im Quelltext jedoch unterscheiden können. Dies bezeichnet man als Polymorphismus , ein wesentliches Charakteristikum der Objektorientierung. Informatik 11 - 1. Die rekursive Datenstruktur Liste – 1. 5 Das Entwurfsmuster Kompositum 5

Der dargestellte Teil des Klassendiagramms ist eine Umsetzung eines Entwurfsmuster (Design Pattern). Es trägt

Der dargestellte Teil des Klassendiagramms ist eine Umsetzung eines Entwurfsmuster (Design Pattern). Es trägt den Namen Kompositum (Composite Pattern). Entwurfsmuster spielen in der Softwareentwicklung eine sehr wichtige Rolle. In allgemeiner Form hat das Composite Pattern folgende Struktur: Informatik 11 - 1. Die rekursive Datenstruktur Liste – 1. 5 Das Entwurfsmuster Kompositum 6

Anwendungsbeispiele: Komponente Kompositum Einzelkomponente Oberflächenelement Window Button Verzeichniselement Verzeichnis Datei Listenelement Knoten Abschluss Informatik

Anwendungsbeispiele: Komponente Kompositum Einzelkomponente Oberflächenelement Window Button Verzeichniselement Verzeichnis Datei Listenelement Knoten Abschluss Informatik 11 - 1. Die rekursive Datenstruktur Liste – 1. 5 Das Entwurfsmuster Kompositum 7

Klassendiagramm: Informatik 11 - 1. Die rekursive Datenstruktur Liste – 1. 5 Das Entwurfsmuster

Klassendiagramm: Informatik 11 - 1. Die rekursive Datenstruktur Liste – 1. 5 Das Entwurfsmuster Kompositum 8

Die abstrakte Klasse Listenelement: Informatik 11 - 1. Die rekursive Datenstruktur Liste – 1.

Die abstrakte Klasse Listenelement: Informatik 11 - 1. Die rekursive Datenstruktur Liste – 1. 5 Das Entwurfsmuster Kompositum 9

Beispiel: int laenge. Geben() Liste Knoten Abschluss Informatik 11 - 1. Die rekursive Datenstruktur

Beispiel: int laenge. Geben() Liste Knoten Abschluss Informatik 11 - 1. Die rekursive Datenstruktur Liste – 1. 5 Das Entwurfsmuster Kompositum 10

Übung Verwende als Gerüst das Blue. J-Projekt liste_mit_abschluss und führe die notwendigen Änderungen durch.

Übung Verwende als Gerüst das Blue. J-Projekt liste_mit_abschluss und führe die notwendigen Änderungen durch. Einige der nötigen Umformungen sind auf den folgenden Seiten ausführlich erläutert: Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 5 Das Entwurfsmuster Kompositum 11

Klasse Liste Konstruktor Liste() Eine leere Liste besitzt den Abschluss als Anfang. Klasse Abschluss

Klasse Liste Konstruktor Liste() Eine leere Liste besitzt den Abschluss als Anfang. Klasse Abschluss Methode Knoten hinten. Einfuegen(Datenelement d. Neu) Erzeugt einen neuen Knoten mit dem Inhalt d. Neu und dem bisherigen Abschluss als Nachfolger. Zurückgegeben wird der neue Knoten, der damit der neue Nachfolger des bisherigen letzten Knotens wird. Klasse Knoten Methode Knoten hinten. Einfuegen(Datenelement d. Neu) Die Referenz von Nachfolger wird neu gesetzt durch den rekursiven Aufruf der Methode des Nachfolgers. Rückgabewert ist die Referenz auf sich selbst. Veranschaulichung: Loesungen/. . . /hinten_einfuegen. pdf Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 5 Das Entwurfsmuster Kompositum 12

Klasse Abschluss Methode Listenelement get. Nachfolger() return this Klasse Knoten Methode Listenelement get. Nachfolger()

Klasse Abschluss Methode Listenelement get. Nachfolger() return this Klasse Knoten Methode Listenelement get. Nachfolger() return nachfolger Die Methode in Abschluss muss hier als Rückgabeobjekt this haben. Der Nachfolger vom Abschluss ist somit der Abschluss selbst. Würde man als Rückgabewert hier null setzen, erhält man Fehlermeldungen, wenn man die Liste ganz durchläuft, wie z. B. bei alle. Informationen. Ausgeben() in Liste: void alle. Informationen. Ausgeben(){ Listenelement aktuell = anfang; do{ aktuell. information. Ausgeben(); aktuell = aktuell. get. Nachfolger(); //dies würde zu aktuell = aktuell. null und dann einer Fehlermeldung führen. } while (aktuell. get. Inhalt()!=null); System. out. println(); } Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 5 Das Entwurfsmuster Kompositum 13

Eine trickreichere Umstrukturierung ist bei den Methoden zur Ausgabe des Inhalts des letzten Knotens

Eine trickreichere Umstrukturierung ist bei den Methoden zur Ausgabe des Inhalts des letzten Knotens notwendig: Bisher konnte man durch die Liste "wandern" und das Ende mit Hilfe der Eigenschaft finden, dass der letzte Knoten keinen Nachfolger hat. Bei der Modellierung mit Abschluss hat aber der letzte Knoten eine Referenz auf den Abschluss, der dann die Aufgabe "Ende geben" übernehmen soll. Der Abschluss benötigt dazu jedoch eine Referenz auf seinen Vorgänger, der ja die gewünschten Daten enthält. Dies realisiert man, indem die Methode get. Ende() einen Rückgabewert und einen Übergabeparameter erhält. Klasse Abschluss Methode Datenelement get. Ende(Datenelement d) return d Klasse Knoten Methode Datenelement get. Ende(Datenelement d) return nachfolger. get. Ende(inhalt) In der Klasse Liste ruft man die Methode mit anfang. get. Ende(null) auf. Vergleiche dazu auch im Buch S. 38 - 40 (dort heißt die Methode Ende. Geben). Veranschaulichung: get. Ende. pdf Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 5 Das Entwurfsmuster Kompositum 14

Klasse Liste Methode Datenelement ende. Entfernen() Bestimme zunächst mithilfe der Methode get. Ende den

Klasse Liste Methode Datenelement ende. Entfernen() Bestimme zunächst mithilfe der Methode get. Ende den Inhalt d des letzten Knotens. anfang = anfang. ende. Entfernen(d) return d Klasse Knoten Methode Datenelement ende. Entfernen(Datenelement d) wenn (inhalt == d) dann return nachfolger sonst nachfolger=nachfolger. ende. Entfernen(d); return this; endewenn Klasse Abschluss Methode Datenelement ende. Entfernen(Datenelement d) return this In welchem Fall benötigt man den Abschluss? Veranschaulichung: ende. Entfernen. pdf Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 5 Das Entwurfsmuster Kompositum 15

Klasse Liste Methode void alle. Informationen. Ausgeben() Das aktuelle Listenelement ist zunächst der Anfang.

Klasse Liste Methode void alle. Informationen. Ausgeben() Das aktuelle Listenelement ist zunächst der Anfang. Solange der Inhalt dieses Elements nicht null ist, wird die Methode information. Ausgeben() aufgerufen und der Nachfolger als aktuelles Listenelement gespeichert. Die Schleife muss mindestens einmal durchlaufen werden. Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 5 Das Entwurfsmuster Kompositum 16