1. Die rekursive Datenstruktur Liste 1.5 Das Entwurfsmuster Kompositum

Slides:



Advertisements
Ähnliche Präsentationen
Objektorientierte Programmierung
Advertisements

Kritische Betrachtung
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Java: Grundlagen der Objektorientierung
Polymorphie (Vielgestaltigkeit)
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 – Kürzeste Wege) T. Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
Einfügen am Ende der Liste Vorher: Nachher:. Einfügen am Ende der Liste //Klasse Knoten public Knoten hintenEinfuegen(Datenelement dneu) { nachfolger.
Die Methode public Knoten einfuegenVor (Datenelement dNeu, Datenelement dVergleich) public Knoten einfuegenVor(Datenelement dNeu, Datenelement dVergleich){
DVG Klassen und Objekte
Weiteres Programm Studium des Breitendurchlaufs Hierzu
Informatikunterricht mit Java
Einfach verkettete Listen (OOP)
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
2. Die rekursive Datenstruktur Baum 2
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Einführung in die Programmiersprache C 4
1.2 Trennung von Struktur und Inhalt
1.5 Das Entwurfsmuster Kompositum
Die Methode public Datenelement getEnde (Datenelement d) Ziel: //Klasse Knoten public Datenelement getEnde(Datenelement d){ return nachfolger.getEnde(inhalt);
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Thomas Hilpold: Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger.
Informatik Datenstruktur Graph 3.3 Durchlaufen von Graphen
Programmiervorkurs WS 2014/15 Instanzmethoden
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Diskrete Mathe II Übung IKG - Übung Diskrete Mathe II – Jörg Schmittwilken 2 Übung5 Prüft, ob sich folgende Segmente schneiden: –P1(1/7) P2(3/1)
Java-Kurs Übung Besprechung der Hausaufgabe
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
Binärbäume.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Eine Vokabelschlange. Schlangen in Anwendungsprogrammen Die Piktogramme von Personen, mit denen wir ursprünglich die Datenstruktur Schlange eingeführt.
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
Anforderungen an die neue Datenstruktur
Das Entwurfsmuster Model-View-Controller
Anforderungen an die neue Datenstruktur
Konstruktoren.
Zwei Denkansätze zur Klasse Schlange
Java-Kurs Übung Grafik in Java - das Abstract Windowing Toolkit
Der Abschluss einer Schlange
November 18 Informatik Kurse
1. Die rekursive Datenstruktur Liste 1.3 Rekursive Funktionen
2. Die rekursive Datenstruktur Baum 2.1 Von der Liste zum Baum
1. Die rekursive Datenstruktur Liste 1
2. Die rekursive Datenstruktur Baum 2.2 Suchen und Einfügen
Datenstrukturen und Softwareentwicklung
Implementieren von Klassen
Felder in der Informatik
3. Die Datenstruktur Graph 3.3 Durchlaufen von Graphen
3. Die Datenstruktur Graph 3.2 Repräsentation von Graphen
1. Die rekursive Datenstruktur Liste 1.6 Die Datenstruktur Stapel
Grundkurs Informatik 11-13
2.4 Durchlaufen von Bäumen
1. Die rekursive Datenstruktur Liste 1
Informatik Softwareentwicklung – 4.3 Entwurfsmuster
2. Die rekursive Datenstruktur Baum 2.3 Baum und Kompositum
 Präsentation transkript:

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

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

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

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

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

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

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

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

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

Beispiel: int laengeGeben() Liste Knoten Abschluss Informatik 11 - 1. Die rekursive Datenstruktur Liste – 1.5 Das Entwurfsmuster Kompositum

Ü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 11 - 1. Die rekursive Datenstruktur Liste - 1.5 Das Entwurfsmuster Kompositum

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 11 - 1. Die rekursive Datenstruktur Liste - 1.5 Das Entwurfsmuster Kompositum

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 11 - 1. Die rekursive Datenstruktur Liste - 1.5 Das Entwurfsmuster Kompositum

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. 38 - 40 (dort heißt die Methode EndeGeben). Veranschaulichung: getEnde.pdf Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1.5 Das Entwurfsmuster Kompositum

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 11 - 1. Die rekursive Datenstruktur Liste - 1.5 Das Entwurfsmuster Kompositum

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 11 - 1. Die rekursive Datenstruktur Liste - 1.5 Das Entwurfsmuster Kompositum