Entwurfsmuster in Java

Ähnliche Dokumente
Design Patterns II. Der Design Muster Katalog. Prof. Dr. Nikolaus Wulff

Entwurfsmuster Martin Fesser 00IN

Überblick FBC SNW Zusammenfassung. Entwurfsmuster. Eine Einführung. Botond Draskoczy. Marcus Vitruvius Pollio

Lukas Klich. Projektgruppe SHUTTLE. Seminar: Entwurfsmuster Lukas Klich/Projektgruppe SHUTTLE Seite: 1. Entwurfsmuster

Entwurfsprinzip. Entwurfsprinzip

Verhaltensmuster. Entwurfsmuster - Design Patterns. HAW Hamburg Fakultät Technik und Informatik Department Informations- und Elektrotechnik

Structural Patterns. B. Sc. Andreas Meißner

Inhaltsverzeichnis. Vorwort Geleitwort von Grady Booch Einleitung... 23

Strategy & Decorator Pattern

Entwurfsmuster. Marc Monecke

Objektorientierte und Funktionale Programmierung SS 2014

Tutorium Softwaretechnik I

Design-Patterns-Katalog

Entwurfsmuster - Iterator

Software Engineering. 7. Entwurfsmuster

Entwurfsmuster (Design Patterns)

Praxisbuch Objektorientierung

Tutorium Softwaretechnik I

Effizientes Programmieren

Auf einen Blick. 1 Einleitung Die Basis der Objektorientierung Die Prinzipien des objektorientierten Entwurfs...

Design Patterns. (Software-Architektur) Prof. Dr. Oliver Braun. Letzte Änderung: :12. Design Patterns 1/26

Design Patterns. 3. Juni 2015

Creational Patterns. Seminar Software-Entwurf. Thomas Liro WS 2004/05.

Matthias Geirhos. Entwurfsmuster. Das umfassende Handbuch. Rheinwerk. Computing

Design Patterns. OO-GetTogether. Volker Michels

Objektorientierte Programmierung

Einführung in die Informatik II

Entwurfsmuster Design Patterns by Erich Gamma et al.

Wahlpflichtfach Design Pattern

Software-Architektur. Design Patterns. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München

Objektorientierte Systementwicklung

Entwurfsmuster Entkopplungs-, Varianten- und Zustandsmuster

Entwurfsmuster. Tao Zhang Technische Universität München Lehrstuhl für Angewandete Softwaretechnik

14 Design Patterns Einführung 14.2 Composite Pattern

PHP OOP, Design Patterns und UML. Marco Skulschus

Entwurfsmuster. Die Entwurfsmuster Observer, State und Singleton am Beispiel einer Digital-Uhr

Decorator Pattern. Analyse- und Design-Pattern CAS SWE FS14. Roland Müller Samuel Schärer

Software-Entwurfsmuster (weitere) A01 OOP. Software-Entwurfsmuster (weitere)

Deutsche Ausgabe. Die Kraft von C# voll ausschöpfen! C# 3.0. Entwurfsmuster. Judith Bishop. O Reilly. Deutsche Übersetzung von Thomas Demmig

Software Engineering II (IB) Design Patterns

Model-View-Controller

Programmiertechnik II WS 2017/18

Programmiertechnik II SS Fakultät Informatik Bachelor Angewandte Informatik

Entwurfsmuster - Iterator & Composite

Entwurfsmuster. Tutorium 7 iloveswt.de Fabian I. Miltenberger INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION (IPD)

Universität Bremen. Entwurfsmuster. Thomas Röfer. Wettbewerb Motivation Erzeugende Muster Strukturelle Muster Verhaltensmuster

Ein Entwurfsmuster der GoF. vorgestellt von. Sigrid Weil 16. Januar 2008

Observer Chain of Responsibility Mediator

Software Engineering II (IB) Design Patterns

Vorlesung Programmieren. Software Design. Software Design. Entwurfsmuster

Vorlesung Programmieren

Wahlpflichtfach Design Pattern

Entwurfsmuster Entkopplungs-, Varianten- und Zustandsmuster

Objektorientierte Entwurfsmuster

Entwurfsmuster. Entwurfsmuster (Design Patterns), Visitor-, Singleton, Decorator-, Observer-Pattern. Objektterminierte Listen

Lehrbuch der Objektmodellierung

Design Patterns. 5. Juni 2013

Analyse und Modellierung von Informationssystemen

Zweck: sequentieller Zugriff auf Elemente eines Aggregats

Analyse und Modellierung von Informationssystemen

Software-Architektur Design Patterns

Softwaretechnik. Prof. Dr. Rainer Koschke. Fachbereich Mathematik und Informatik Arbeitsgruppe Softwaretechnik Universität Bremen

Head First Design Patterns. FALLBEISPIEL: SimUDuck

Einführung in die objektorientierte Programmierung

3. Entwurfsmuster zur Entkopplung von Modulen

Analyse und Modellierung von Informationssystemen

Objektorientierte Programmierung (OOP)

Übung 11: Klausurvorbereitung. Übung 11. Prüfungsvorbereitung Software Engineering WS16/17 Philipp Seltmann

Structural Pattern: Decorator & Bridge

Behavioral Patterns. Seminar Software-Entwurf WS 04/05. Przemyslaw Dul

Software-Entwurfsmuster

class Mitarbeiter {...} class AussendienstMitarbeiter extends Mitarbeiter {...} class InnendienstMitarbeiter extends Mitarbeiter {...

MVC-Architektur am Beispiel von OLAT

Software Engineering. 10. Entwurfsmuster II. Franz-Josef Elmer, Universität Basel, HS 2015

Entwurfsmuster. Tutorium 17 Fabian Miltenberger INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION (IPD)

Factory Method Pattern

Paket Kommando. Command Command Processor Visitor

Strategie. (Strategy. / Policy) Ein objektbasiertes Verhaltensmuster. Stephan Munkelt, Stefan Salzmann - 03IN

185.A Software-Entwurfsmuster 1 OOP. Software-Entwurfsmuster

Anwendung der Aspektorientierung: Design Patterns

Transkript:

Entwurfsmuster in Java Das Observer- und das Decorator-Pattern Friederike Löwe 13. März 2011

Inhaltsverzeichnis Einleitung Wozu eigentlich Entwurfsmuster? Die Grundlage: Design-Prinzipien Das Decorator-Pattern Das Muster am Beispiel erklärt Dekorierer aus der Praxis: Java I/O Das Observer-Pattern Allgemein: Was ist das Observer-Pattern? Observer in Java Ausblick Wie geht s weiter? Andere Entwurfsmuster Referezen

Einleitung

Wo ist der Unterschied?

Irgendjemand hat deine Probleme schon gelöst. Die meisten Probleme, die einem beim Programmieren begegnen können, hat schon einmal jemand gelöst. Besonders erfolgreiche Lösungsstrategien, die sich für eine bestimmte Art von Problem bewährt haben, wurden als Lösungsmuster gesammelt.

Grundregeln

Entwurfsprinzip Programmiere auf eine Schnittstelle, nicht auf eine Implementierung.

Entwurfsprinzip Identifiziere die Aspekte deiner Anwendung, die sich ändern können und trenne sie von denen, die konstant bleiben.

Entwurfsprinzip Ziehe Komposition der Vererbung vor.

Entwurfsprinzip Strebe bei deinen Entwürfen mit interagierenden Objekten nach lockerer Kopplung.

Entwurfsprinzip Klassen sollten für Erweiterung offen, aber für Veränderung geschlossen sein.

Was sind Entwurfsmuster?

Das Decorator-Pattern

Ein Kaffeehaus... ursprüngliches Bestellsystem

Extras Zum Kaffee kann man verschiedene Zutaten dazu bestellen, wie etwa: heiße Milch Sojamilch Schokolade Milchschaum... Jede dieser Zutaten kostet natürlich extra. Wie kann man das in das Bestellsystem integrieren?

Ein erster Versuch...

Neuer Ansatz!

Problempotential? Preisänderungen bei den Zutaten Bearbeitung von bestehendem Code neue Zutaten neue Methoden in der Superklasse, Ändern der preis()-methode Einführen neuer Getränke Eistee mit Milchschaum?? Was ist, wenn ein Kunde Doppelschoko wünscht? Was noch...?

So geht es: Das Decorator-Muster Ein Getränk wird mit Zutaten dekoriert, z.b bestellt ein Kunde eine dunkle Röstung mit Schoko und Milchschaum. 1. Wir nehmen ein DunkleRöstung-Objekt, 2. dekorieren es mit einem Schoko-Objekt, 3. dekorieren es mit einem Milchschaum-Objekt, 4. rufen die Methode preis() auf und stützen uns auf Delegierung um den Preis für die Zutaten hinzuzufügen.

Ein Getränk mit Dekorieren aufbauen Wir nehmen uns ein DunkleRöstung-Objekt,...

Ein Getränk mit Dekorieren aufbauen...erzeugen uns ein Schoko-Objekt und packen es um DunkleRöstung,...

Ein Getränk mit Dekorieren aufbauen...erstellen einen Milchschaum-Dekorierer und packen Schoko damit ein.

Ein Getränk mit Dekorieren aufbauen: Zwischenstand Dekorierer haben den gleichen Supertyp wie die Objekte, die sie dekorieren. Man kann ein oder mehr Objekte verwenden, um ein Objekt einzupacken. Da der Dekorierer den gleichen Supertyp wie das dekorierte Objekt hat, können wir das dekorierte Objekt an der Stelle des ursprünglichen (jetzt eingepackten) Objekts herumreichen. Der Dekorierer fügt sein eigenes Verhalten hinzu, bevor und/oder nachdem der Aufruf an das dekorierte Objekt delegiert wurde, um die Arbeit abzuschließen. Objekte können jederzeit dekoriert werden. Wir können Objekte also zur Laufzeit dynamisch mit so vielen Dekorierern dekorieren, wie es uns gefällt.

Ein Getränk mit Dekorieren aufbauen

Dekorierer aus der Praxis: Java I/O BufferedInputStream und LineNumerInputStream erweitern beide FilterInputStream, die als abstrakte Dekorierer-Klasse dient.

Java I/O Klassendiagramm BufferedInputStream und LineNumerInputStream erweitern beide FilterInputStream, die als abstrakte Dekorierer-Klasse dient.

Das Observer-Pattern

Das Observer-Muster Das Observer-Muster ermöglicht einem oder mehreren Objekten, automatisch auf die Zustandsänderung eines bestimmten Objekts zu reagieren, um den eigenen Zustand anzupassen.

ein Zeitungsabonement

Das Observer-Muster: Schema Das Observer-Muster definiert eine Eins-zu-viele-Abhängigkeit zwischen Objekten in der Art, dass alle abhängigen Objekte benachrichtigt werden, wenn sich der Zustand des einen Objekts ändert.

Das Observer-Muster: Klassendiagramm

Observable und Observer in Java

Ein Beispiel

Ausblick

Irgendjemand hat also deine Probleme schon gelöst. Am besten nutzt man Entwurfsmuster, indem man sein Gedächtnis mit ihnen füttert und in bestehenden Anwendungen die Stellen erkennt, an denen man sie einsetzten kann. Statt Code-Wiederverwertung bieten Muster Erfahrungs-Wiederverwertung.

Wie finde ich ein passendes Entwurfsmuster? 1. Klassifizierung nach der Aufgabe: Erzeugungsmuster betreffen den Prozess der Objekterzeugung Strukturmuster befassen sich mit der Zusammensetzung von Klassen und Objekten Verhaltensmuster charakterisieren die Art und Weise, in der Klassen und Objekte zusammenarbeiten und Zuständigkeiten aufteilen 2. Klassifizierung nach Gültigkeitsbereich: klassenbasiert (Beziehungen mit Hilfe von Vererbung, statisches Verhalten) objektbasiert (Beziehungen zwischen zusammenarbeitenden Objekten, dynamisch änderbares Verhalten)

Überblick über Entwurfsmuster C O Erzeugermuster Strukturmuster Verhaltensmuster Fabrikmethode Adapter (klassenbasiert) Interpreter Schablonenmethode Abstrakte Fabrik Adapter (objektbasiert) Befehl Erbauer Brücke Beobachter Prototyp Dekorierer Besucher Singleton Fassade Iterator Fliegengewicht Memento Kompositum Strategie Proxy Vermittler Zustand Zuständigkeitskette

Erzeugungsmuster: Fabrikmethode Definiere eine Klassenschnittstelle mit Operationen zum Erzeugen eines Objekts, aber lasse Unterklassen entscheiden, von welcher Klasse das zu erzeugende Objekt ist. Fabrikmethoden ermöglichen es einer Klasse, die Erzeugung von Objekten an eine Unterklasse zu delegieren.

Erzeugungsmuster: Singleton Sichere ab, dass eine Klasse genau ein Exemplar besitzt, und stelle einen globalen Zugriffspunkt darauf bereit.

Strukturmuster: Adapter Passe die Schnittstelle einer Klasse an eine andere von ihren Klienten erwartete Schnittstelle an. Das Adaptermuster lässt Klassen zusammenarbeiten, die wegen inkompatibler Schnittstellen ansonsten dazu nicht in der Lage wären.

Strukturmuster: Dekorierer Erweitere ein Objekt dynamisch um Zuständigkeiten. Dekorierer bieten eine flexible Alternative zur Unterklassenbildung, um die Funktionalität einer Klasse zu erweitern.

Strukturmuster: Fassade Biete eine einheitliche Schnittstelle zu einer Menge von Schnittstellen eines Subsystems. Die Fassadenklasse definiert eine abstrakte Schnittstelle, welche die Verwendung des Subsystems vereinfacht.

Verhaltensmuster: Beobachter Definiere eine 1-zu-n-Abhängigkeit zwischen Objekten, so dass die Änderung des Zustands eines Objekts dazu führt, dass alle abhängigen Objekte benachrichtigt und automatisch aktualisiert werden.

Verhaltensmuster: Iterator Biete eine Möglichkeit, um auf die Elemente eines zusammengesetzten Objekts sequentiell zugreifen zu können, ohne die zugrundeliegende Repräsentation offenzulegen.

Verhaltensmuster: Strategie Definiere eine Familie von Algorithmen, kapsele jeden einzelnen und mache sie austauschbar. Das Strategiemuster ermöglicht es, den Algorithmus unabhängig von ihn nutzenden Klienten zu variieren.

Eine Warnung zum Schluss... Software-Entwürfe sollten so einfach wie möglich sein. Wenn man ein Pattern ausgewählt hat, bleibt die Frage: Bietet mir der Entwurf mit dem Pattern erhebliche Vorteile bezüglich Flexibilität Performance oder Wiederverwertbarkeit? In Zweifelsfällen wählen Sie den einfacheren Weg. Karl Eilebrecht / Gernot Starke

Referezen

Quellen & Literatur I Freeman, Elithabeth und Eric: Head First - Design Patterns O Reilly, Cambridge, 2004 Eilebrecht, Karl und Starke, Gernot: Patterns kompakt: Entwurfsmuster für effektive Software-Entwicklung Spektrum, Heidelberg, 2010 http://dx.doi.org/10.1007/978-3-8274-2526-3 Gamma, Erich et.al: Entwurfsmuster Addison-Wesley, Bonn, 1996

Quellen & Literatur II Ullenboom, Christian: Java ist auch eine Insel Galileo Press, Bonn, 2005