Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

1. Die rekursive Datenstruktur Liste 1.5 Das Entwurfsmuster Kompositum

Ähnliche Präsentationen


Präsentation zum Thema: "1. Die rekursive Datenstruktur Liste 1.5 Das Entwurfsmuster Kompositum"—  Präsentation transkript:

1 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 laengeGeben() Liste Knoten Informatik Die rekursive Datenstruktur Liste – 1.5 Das Entwurfsmuster Kompositum

2 Beispiel 2: void hintenEinfuegen(Datenelement dNeu)
Knoten Liste Informatik Die rekursive Datenstruktur Liste – 1.5 Das Entwurfsmuster Kompositum

3 Um dies in Modellierung und Implementierung übersichtlicher zu gestalten, hat es sich bewährt, eine eigene Klasse Abschluss zu definieren, die kein Datenelement referenziert, sondern nur das Ende der Liste verwaltet.  Informatik Die rekursive Datenstruktur Liste – 1.5 Das Entwurfsmuster Kompositum

4 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 Die rekursive Datenstruktur Liste – 1.5 Das Entwurfsmuster Kompositum

5 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 Die rekursive Datenstruktur Liste – 1.5 Das Entwurfsmuster Kompositum

6 Es trägt den Namen Kompositum (Composite Pattern).
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 Die rekursive Datenstruktur Liste – 1.5 Das Entwurfsmuster Kompositum

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

8 Klassendiagramm: Informatik Die rekursive Datenstruktur Liste – 1.5 Das Entwurfsmuster Kompositum

9 Die abstrakte Klasse Listenelement:
Informatik Die rekursive Datenstruktur Liste – 1.5 Das Entwurfsmuster Kompositum

10 Beispiel: int laengeGeben()
Liste Knoten Abschluss Informatik Die rekursive Datenstruktur Liste – 1.5 Das Entwurfsmuster Kompositum

11 Übung Verwende als Gerüst das BlueJ-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 Die rekursive Datenstruktur Liste Das Entwurfsmuster Kompositum

12 Klasse Liste Konstruktor Liste()
Eine leere Liste besitzt den Abschluss als Anfang. Klasse Abschluss  Methode Knoten hintenEinfuegen(Datenelement dNeu)  Erzeugt einen neuen Knoten mit dem Inhalt dNeu 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 hintenEinfuegen(Datenelement dNeu)  Die Referenz von Nachfolger wird neu gesetzt durch den rekursiven Aufruf der Methode des Nachfolgers. Rückgabewert ist die Referenz auf sich selbst.  Veranschaulichung: hinten_einfuegen.pdf Informatik Die rekursive Datenstruktur Liste Das Entwurfsmuster Kompositum

13 Klasse Abschluss Methode Listenelement getNachfolger()
return this  Klasse Knoten  Methode Listenelement getNachfolger()  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 alleInformationenAusgeben() in Liste: void alleInformationenAusgeben(){ Listenelement aktuell = anfang; do{ aktuell.informationAusgeben(); aktuell = aktuell.getNachfolger(); //dies würde zu aktuell = aktuell.null und dann einer Fehlermeldung führen. } while (aktuell.getInhalt()!=null); System.out.println(); } Informatik Die rekursive Datenstruktur Liste Das Entwurfsmuster Kompositum

14 Klasse Abschluss Methode Datenelement getEnde(Datenelement d)
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 getEnde() einen Rückgabewert und einen Übergabeparameter erhält. Klasse Abschluss  Methode Datenelement getEnde(Datenelement d) return d Klasse Knoten  Methode Datenelement getEnde(Datenelement d)  return nachfolger.getEnde(inhalt)  In der Klasse Liste ruft man die Methode mit anfang.getEnde(null) auf. Vergleiche dazu auch im Buch S (dort heißt die Methode EndeGeben). Veranschaulichung: getEnde.pdf Informatik Die rekursive Datenstruktur Liste Das Entwurfsmuster Kompositum

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

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


Herunterladen ppt "1. Die rekursive Datenstruktur Liste 1.5 Das Entwurfsmuster Kompositum"

Ähnliche Präsentationen


Google-Anzeigen