Sebastian Grahn Sebastian Kühn

Slides:



Advertisements
Ähnliche Präsentationen
Strategie (Strategy / Policy) Ein objektbasiertes Verhaltensmuster Stephan Munkelt, Stefan Salzmann - 03IN.
Advertisements

Abstrakte Klassen Basisklassen sollten in der Regel sehr allgemein sein. Oft ist es nicht notwendig, dass Objekte dieser generellen Basisklassen angelegt.
Objektorientierte Programmierung
Harald Köbler Software Design Patterns Prototype.
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Frame-Logik Eine Einführung Andreas Glausch.
Lineare Suche Divide-and-Conquer-Suche Kombinationssuche
Design Patterns- Entwurfsmuster
Objektorientierter Entwurf (OOD) Übersicht
Sortieren mit Binären Bäumen
Java: Objektorientierte Programmierung
FH-Hof Java Packages Richard Göbel. FH-Hof Das Modulkonzept für Java Packages dienen zur Strukturierung größerer Java- Programme Ein Package kann: eigene.
Java: Grundlagen der Objektorientierung
DOM (Document Object Model)
Klassenvariable (auch Klassendaten bzw. statische Attribute genannt) und statische Methoden.
Objekte und Arbeitsspeicher
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27 – Kürzeste Wege) Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 – Kürzeste Wege) T. Lauer.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 5 Polymorphismus Sommersemester 2003 Lars Bernard.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Fliegengewicht Ein objektbasiertes Strukturmuster.
Das Strukturmuster Kompositum von C. Günther, T. Hammerschmidt und D. Kuhn.
Einführung in die OOP in Java
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.
Abstrakter Datentyp in C++ I - Klasse -
-LABORPRAKTIKUM- SOMMERSEMESTER 2005
Entwurfsmuster – Iterator
Command Pattern Karola Schäuble,
Abstrakte Klassen DVG
DVG Einführung in Java1 Einführung in JAVA.
Entwurfsmuster EDV Entwurfsmuster.
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
Abstrakte Klassen, Interface
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
Weiteres Programm Studium des Breitendurchlaufs Hierzu
Bestimmung des ggT zweier Zahlen
Klassen und Schnittstellen Klasse: Definiert Zustandsraum ihrer Instanzen vollständig (Implementierung der Struktur, soweit Voraussetzung für die Methoden-
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Objektorientierte Modellierung
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Prof. Dr. Gerhard Schmidt pres. by H.-J. Steffens Software Engineering SS 2009Folie 1 Objektmodellierung Objekte und Klassen Ein Objekt ist ein Exemplar.
Die Persistenzschicht
Entwurfs- und Implementationsdiagramme
Einführung in die Programmierung
Interpreter Seminar Entwurfsmuster Tobias Webelsiep
Efficient Alias Set Analysis Using SSA Form Proseminar Programmanalyse WS 11/12 André Hunke.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Testtechniken-Praktikum WS 2005/06 1 Testen mit Mock- Objekten Andreas Höfer Dr. Matthias Müller.
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
RelationentheorieObjektorientierte Datenbanken  AIFB SS C++-ODL (1/6) Erweiterung des deklarativen Teils einer C++-Klasse Datentypen d_String,
Java-Kurs Übung Besprechung der Hausaufgabe
Einführung in die Programmierung mit Java
IT2 – WS 2005/20061Nov 14, 2005 Visibility  public: Sichtbar in allen Paketen  protected: Sichtbar innerhalb des Pakets und in den Unterklassen  (default,
-LABORPRAKTIKUM- SOMMERSEMESTER 2005
-LABORPRAKTIKUM- SOMMERSEMESTER 2005
Folie 1 Jan-Peter Schmidt Matthias Teske -Fernstudium Informatik- -Matrikel LABORPRAKTIKUM- SOMMERSEMESTER 2005 „Umsetzung von Pattern“ Muster:
Abstrakte Klassen und das Interface-Konzept
Strategy Pattern Teachlet Autor: Sven Wende Replay durch Stephan Schwake Konzepte objektorientierter Programmiersprachen, SS 2006.
Vortrag Einführung in AspectJ. Gliederung 1 Einleitung 2 Querschnittsfunktionalitäten in AspectJ 2.1 Sprachelemente 3 Beispiel 4 Join Point Modell 5 Weaving.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
1. Die rekursive Datenstruktur Liste 1.5 Das Entwurfsmuster Kompositum
1. Die rekursive Datenstruktur Liste 1
Implementieren von Klassen
 Präsentation transkript:

Sebastian Grahn Sebastian Kühn Besucher Muster Sebastian Grahn Sebastian Kühn

Gliederung Zweck Anwendbarkeit Struktur Teilnehmer Interaktionen Vor- & Nachteile Implementierung Beispiele Bekannte Verwendung Verwandte Muster

1. Zweck Kapselung einer auf Elementen einer Objektstruktur auszuführenden Operation Ermöglicht Definition neuer Operationen ohne Klassen der von ihr bearbeiteten Elemente zu verändern

2. Anwendbarkeit Das Besuchermuster kann verwendet werden, wenn: viele unterschiedliche, nicht verwandte Operationen auf einer Objektstruktur realisiert werden sollen. sich die Klassen der Objektstruktur nicht verändern. häufig neue Operationen auf der Objektstruktur integriert werden müssen. ein Algorithmus über die Klassen einer Objektstrukur verteilt arbeitet, aber zentral verwaltet werden soll.

3. Struktur

4. Teilnehmer (I) Besucher : KonkreterBesucher : definiert für jede Klasse konkreter Elemente eine Besuchsfunktion kann unter Verwendung der konkreten Schnittstelle auf das Element zugreifen KonkreterBesucher : implementiert in Besucherklasse deklarierte Besuchsfunktionen jede Besuchsfunktion ist ein Fragment des Algorithmus für die gesamte Objektstruktur lokaler Zustand als Kontext für den Algorithmus (enthält häufig Ergebnisse)

4. Teilnehmer (II) Element : KonkretesElement : definiert eine Schnittstelle zum Empfang eines Besuchers (NimmEntgegen-Operation) KonkretesElement : implementiert den Empfang eines Besuchers (NimmEntgegen-Operation)

4. Teilnehmer (III) ObjektStruktur : Kann seine Elemente aufzählen Evtl. abstrakte Schnittstelle, die Besucher erlaubt Elemente zu besuchen Kann Kompositionsmuster oder Behälter (Liste oder Menge) sein

5. Interaktionen (I) Klient erzeugt KonkretesBesucher-Objekt und traversiert Objektstruktur, wobei es jedes Element mit Besucher besucht Wenn Element besucht wird, ruft es die seiner Klasse entsprechenden Operationen auf und übergibt sich selbst als Argument damit Besucher auf Zustand zugreifen kann

5. Interaktion (II)

6. Vor- & Nachteile Vorteile : Nachteile : Neue Operationen lassen sich leicht durch die Definition neuer Besucher hinzufügen Verwandte Operationen werden im Besucher zentral verwaltet und von besucherfremden Operationen getrennt Besucher können über mehreren Klassenhierarchien arbeiten Nachteile : Neue Klassen konkreter Elemente erfordern Erweiterungen in allen Besuchern

7. Implementierung (I) Besucherklasse class Besucher { puplic: virtual void BesucheElementA(ElementA*); virtual void BesucheElementB(ElementB*); //und so weiter für die anderen konkreten //Elementklassen protected: Besucher(); };

7. Implementierung (II) Konkrete Elementklassen class Element { puplic: virtual ~Element(); virtual void NimmEntgegen(Besucher&) = 0; protected: Element(); };

7. Implementierung (III) class ElementA : puplic Element { ElementA(); virtual void NimmEntgegen(Besucher& Besucher) { besucher.BesucheElementA(this); }; class ElementB : puplic Element { ElementB(); besucher.BesucheElementB(this);

7. Implementierung (IV) Implementierungsaspekt (I) Double-Dispatch ausgeführte Operation hängt von Art der Anfrage und den Typen zweier Empfänger ab NimmEntgegen hängt ab vom Typ des Besucher und dem des Elements  Verwendung Double-Dispatch ( z.B. CLOS) Single-Dispatch (Zur Erläuterung) ausgeführte Operation hängt von Namen der Anfrage und Typ des Empfängers ab (z.B. C++)

7. Implementierung (V) Implementierungsaspekt (II) Zuständigkeit für Traversierung Besucher muss jedes Element der Objektstruktur besuchen Zuständigkeit der Traversierung an 3 Stellen möglich: in Objektstruktur, im Besucher oder in einem Iterator (siehe Vortrag) Häufig in Objektstruktur durch einfache Iteration über Elemente (Behälter) In Besucher wenn komplexe Traversierung, die von Ergebnissen von Operationsaufrufen abhängt

8. Beispiel Virtuelles Reisebüro - verschiedene Busreisen, Ferienhäuser und Mietwagen mit Beschreibung, Preiskategorie (Sommer/Winter), Bilder und technische Daten - Preise der Kategorien sind in einem Preismodul gespeichert - die Klassen für Busreisen, Ferienhäuser, Mietwagen und Preismodul enthalten Schnittstelle zum Empfang eines Besuchers - ein Kunde stellt eine Reise zusammen

Kunde möchte Gesamtpreis erfahren: Ein Besucher besucht die interessierenden Objekte mit Hilfe eines Zählers und fragt die jeweilige Kategorie ab Zuletzt berechnet er im Preismodul mit Hilfe seiner lokal gesammelten Informationen den Gesamtpreis Kunde will Reise buchen: - Ein anderer Besucher erstellt Reisebestellung… dazu besucht er alle, den Kunden interessierenden Objekte… Sein lokaler Zustand besteht aus einem Dokument, dass er gemäß der Informationen der Objekte gestaltet - Beim besuch des Preismoduls ergänzt er die Preise dazu

9. Bekannte Verwendungen Smalltalk80-Übersetzer Besucherklasse : ProgramNode-Enumerator Hauptsächlich zur Analyse von Quelltexten IRIS-Inventor [Str93] Entwicklung von 3D-Anwendungen Hierarchie von Knoten (geometrische Objekte oder Attribut eines geom. Objekts) Besucher : Actions Zur Auswertung, zur Ereignisbehandlung, zum Suchen, zum Speichern und zum Bestimmen von Begrenzungsrahmen

10. Verwandte Muster Kompositionsmuster Interpreter Um Operationen auf eine mit Hilfe des Kompositionsmusters definierte Struktur anzuwenden Interpreter Die Interpretation einer Objektstruktur als ein Interpreter auszuführen

ende Vielen Dank für Ihre Aufmerksamkeit... ... Und einen angenehmen Feierabend.

Zusatz (I) Public Class Busreise { … void nimmentgegen(Besucher b) { b.Busreisebesucher(this); } } public Class Ferienhaeuser … Void nimmentgegen (Besucher b) { b.Ferienhausbesucher(this); } } public Class Mietwagen { … void nimmentgegen (Besucher b) { b.Mietwagenbesucher(this); } }

Zusatz (II) public Class Besucher { Void Busreisbesucher(Busreise b); Void Ferienhausbesucher(Ferienhaus f); Void Mietwagenbesucher(Mietwagen m); } Public Class Gesamtpreisbesucher implements Besucher { Gesamtpreisbesucher(); int GibGesamtPreis(); int gesamt=0; Void Busreisebesucher(busreise b) { gesamt += b.getPreis(); } Void Ferienhausbesucher(Ferienhaus f) { gesamt += f.getPreis(); } Void Mietwagenbesucher(Mietwagen m) { gesamt += m.getPreis(); }