design patterns - philipps-universität marburgswt/ss13/sq/files/folien13… · das...

22
Design Patterns 5. Juni 2013

Upload: others

Post on 16-Jun-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Design Patterns - Philipps-Universität Marburgswt/ss13/sq/files/Folien13… · Das Decorator-Pattern kann Objekt während der Laufzeit mit neuem Verhalten versehen. Mehrere Dekorierungen

Design Patterns

5. Juni 2013

Page 2: Design Patterns - Philipps-Universität Marburgswt/ss13/sq/files/Folien13… · Das Decorator-Pattern kann Objekt während der Laufzeit mit neuem Verhalten versehen. Mehrere Dekorierungen

Taentzer Softwarequalität 2013 128

Überblick

Was sind Design Patterns? Welche Design Patterns gibt es? Wann sollte man Design Patterns einsetzen? Refactoring und Design Patterns: Welchen

Zusammenhang gibt es hier?

Page 3: Design Patterns - Philipps-Universität Marburgswt/ss13/sq/files/Folien13… · Das Decorator-Pattern kann Objekt während der Laufzeit mit neuem Verhalten versehen. Mehrere Dekorierungen

Taentzer Softwarequalität 2013 129

Was sind Design Patterns? Muster, die sich im Softwareentwurf bewährt haben Gute Design Patterns entstammen direkt der Praxis. Antwort auf wiederkehrende Probleme im SW-Entwurf kein fertiges Stück Code, das direkt in eigenen Code

gesetzt werden kann eher eine Art Schablone für die Lösung eines Problems

Kritik: Design Patterns müssen immer wieder neu implementiert werden.

Literatur: E.Gamma, R. Helm, R. Johnson, J. Vlissides: Design Patterns:

Elements of Reusable Object-Oriented Software(ISBN 0-201-63361-2), http://en.wikipedia.org/wiki/Design_Patterns_(book)

Page 4: Design Patterns - Philipps-Universität Marburgswt/ss13/sq/files/Folien13… · Das Decorator-Pattern kann Objekt während der Laufzeit mit neuem Verhalten versehen. Mehrere Dekorierungen

Sinn und Zweck von Design Patterns Zwecke:

Stärkere Modularisierung von Software Integration von unabhängig entwickelten Komponenten Variantenmanagement: Gemeinsamkeiten von Objekten

herauskehren, sodass verschiedene Objekte gleich behandelt werden können

Arten: Erzeugungsmuster: Factory, Singleton, etc. Strukturmuster: Adapter, Decorator, Fassade, Composite,

Proxy, etc. Verhaltensmuster: Observer, Visitor, Iterator, Strategy, etc.

Taentzer Softwarequalität 2013 130

Page 5: Design Patterns - Philipps-Universität Marburgswt/ss13/sq/files/Folien13… · Das Decorator-Pattern kann Objekt während der Laufzeit mit neuem Verhalten versehen. Mehrere Dekorierungen

Taentzer Softwarequalität 2013 131

Design Patterns zum Entkoppeln

Module: gruppiere Komponenten (z.B. Klassen) in ein Modul (z.B. Paket), entwirf Schnittstellen

Abstract Data Type:verstecke Datenstrukturen hinter stabilen Schnittstellen

Repository: erstelle eine zentrale Datenstruktur mit Schnittstellen zu verschiedenen Clients

Layers: verstecke Basis-funktionalität in unteren Schichten, Benutzt-beziehung muss azyklisch sein

Facade: erstelle eine einfache (spezialisierte) Schnittstelle auf Basis einer umfangreichen (allgemeinen)

Proxy: erstelle oder lösche ungeplante Funktionalitäten in transparenter Weise

Visitor: füge neue Funktionalität einer stabilen Klassenhierarchie hinzu

Iterator: durchlaufe eine Gruppe von Objekten, ohne in die Gruppenstruktur zu schauen

Ziel: Software stärker modularisieren

Page 6: Design Patterns - Philipps-Universität Marburgswt/ss13/sq/files/Folien13… · Das Decorator-Pattern kann Objekt während der Laufzeit mit neuem Verhalten versehen. Mehrere Dekorierungen

Taentzer Softwarequalität 2013 132

Facade Pattern

Szenario: Eine Softwarekomponente ist sehr komplex. Deshalb: Bau einer Fassade, hinter der die Komplexität

versteckt wird. Beispiel: Implementierung des UML-Metamodells

Paket 1

Paket 2

Paket 3

FassadeClient1

Client2

benutztdelegiert

Page 7: Design Patterns - Philipps-Universität Marburgswt/ss13/sq/files/Folien13… · Das Decorator-Pattern kann Objekt während der Laufzeit mit neuem Verhalten versehen. Mehrere Dekorierungen

Taentzer Softwarequalität 2013 133

Proxy Pattern

Proxy als Schnittstelle zu einem anderen Ding typisches Beispiel: ein Remote-Proxy

Ein Objekt liegt auf einer anderen Maschine. Das Remote-Proxy ist die Schnittstelle zum entfernt liegenden Objekt.

:Client :MyProxy :RemoteSubject

Page 8: Design Patterns - Philipps-Universität Marburgswt/ss13/sq/files/Folien13… · Das Decorator-Pattern kann Objekt während der Laufzeit mit neuem Verhalten versehen. Mehrere Dekorierungen

Taentzer Softwarequalität 2013 134

Proxy Pattern Client kommuniziert nur über eine Schnittstelle mit dem Proxy

bzw. realen Subjekt.

Client<<interface>>

Subjectaction()

Proxyaction()

RealSubjectaction()

Page 9: Design Patterns - Philipps-Universität Marburgswt/ss13/sq/files/Folien13… · Das Decorator-Pattern kann Objekt während der Laufzeit mit neuem Verhalten versehen. Mehrere Dekorierungen

Taentzer Softwarequalität 2013 135

Design Patterns zur Integration

Adapter: konvertiere eine Schnittstelle in eine andere Pipes and Filters: schicke Daten durch eine Reihe

von Transformationen Propagator: leite Informationen durch ein Netzwerk

von abhängigen Objekten spezieller Propagator: Observer: Untere Objekte

benachrichtigen obere über Änderungen.

Ziel: Integration von unabhängig entwickelten Komponenten

Page 10: Design Patterns - Philipps-Universität Marburgswt/ss13/sq/files/Folien13… · Das Decorator-Pattern kann Objekt während der Laufzeit mit neuem Verhalten versehen. Mehrere Dekorierungen

Taentzer Softwarequalität 2013 136

Observer Pattern

Wirkungsweise: attach(): Observer anmelden detach(): Observer

abmelden notify(): Observer

benachrichtigen for all o:Observer {

o.update() }

Eigenschaften: Broadcast-Benachrichtigung Objekte niederer Schichten

können mit Objekten höherer Schichten kommunizieren, ohne die Schichtung zu verletzen.

Subjectvoid attach()void detach()void notify()

Observer

void update()

0..*

Page 11: Design Patterns - Philipps-Universität Marburgswt/ss13/sq/files/Folien13… · Das Decorator-Pattern kann Objekt während der Laufzeit mit neuem Verhalten versehen. Mehrere Dekorierungen

Taentzer Softwarequalität 2013 137

Design Patterns zum Variantenmanagement

Superclass: ziehe Gemein-samkeiten von Objekten in eine gemeinsame Ober-klasse

Strategy: erstelle eine gemeinsame Schnittstelle für verschiedene Varianten von Algorithmen

Delegation: leite Aufgaben von Klasse A an Klasse B weiter

Composite: behandle Teil-Ganzes-Hierarchien, atomare und komponierte Objekte werden gleichartig behandelt

(Abstract) Factory: bündele die Erzeugung von zusam-mengehörigen Objekten in einer Klasse

Decorator Pattern: füge zusätzliche Funktionalität während der Laufzeit zu

Ziel: Gemeinsamkeiten von Objekten werden herausgekehrt, sodassverschiedene Objekte gleich behandelt werden können.

Page 12: Design Patterns - Philipps-Universität Marburgswt/ss13/sq/files/Folien13… · Das Decorator-Pattern kann Objekt während der Laufzeit mit neuem Verhalten versehen. Mehrere Dekorierungen

Taentzer Softwarequalität 2013 138

Delegation Pattern

Ein Objekt zeigt Funktionalität nach außen, die es intern an andere delegiert.

Kritik an der Einführung dieses Patterns?

Stackpush()pop()

Listadd()remove()

Client

Page 13: Design Patterns - Philipps-Universität Marburgswt/ss13/sq/files/Folien13… · Das Decorator-Pattern kann Objekt während der Laufzeit mit neuem Verhalten versehen. Mehrere Dekorierungen

Problem: Strukturierung von graphischen Elementen

Text und Graphiken sollen in derselben Weise behandelt werden.

Komplexe und simple Strukturen sollen möglichst gleich implementiert werden.

Verschiedene Varianten von Graphiken sollen integriert werden können.

Taentzer Softwarequalität 2013 139

Page 14: Design Patterns - Philipps-Universität Marburgswt/ss13/sq/files/Folien13… · Das Decorator-Pattern kann Objekt während der Laufzeit mit neuem Verhalten versehen. Mehrere Dekorierungen

Taentzer Softwarequalität 2013 140

Composite Pattern

Einzelne Instanzen und Gruppen von Instanzen können gleich behandelt werden.

Component

Atomic Composite

Graphics

Primitive Composite

Circle Rectangle Polygon

Beispiel:

Page 15: Design Patterns - Philipps-Universität Marburgswt/ss13/sq/files/Folien13… · Das Decorator-Pattern kann Objekt während der Laufzeit mit neuem Verhalten versehen. Mehrere Dekorierungen

Problem: Verschiedene Formatierungen derselben Struktur

Eine Formatierung erzeugt eine spezielle Instanz einer Struktur.

Entkopple die Formatierung von der Struktur

Taentzer Softwarequalität 2013 141

Page 16: Design Patterns - Philipps-Universität Marburgswt/ss13/sq/files/Folien13… · Das Decorator-Pattern kann Objekt während der Laufzeit mit neuem Verhalten versehen. Mehrere Dekorierungen

Strategy Pattern

Kapselung einer Familie von Algorithmen durch eine Schnittstelle

Beispiel:

Taentzer Softwarequalität 2013 142

Structure FormatingStrategy

TreeFormat XMLFormat GraphicalFormat

Page 17: Design Patterns - Philipps-Universität Marburgswt/ss13/sq/files/Folien13… · Das Decorator-Pattern kann Objekt während der Laufzeit mit neuem Verhalten versehen. Mehrere Dekorierungen

Problem: Verschönerung der Benutzerschnittstelle

Mögliche Verschönerungen für einen ListView: Trenner zwischen Einträgen Scroll Bar, um lange Listen anzuzeigen Ein Suchfeld

Probleme: Das Benutzerschnittstellenobjekt soll über die

Verschönerungen nichts wissen. Explosion von Klassen vermeiden: Eine Lösung durch

Vererbung würde eine Unterklasse per Kombination von Verschönerungen erzeugen.

Taentzer Softwarequalität 2013 143

Page 18: Design Patterns - Philipps-Universität Marburgswt/ss13/sq/files/Folien13… · Das Decorator-Pattern kann Objekt während der Laufzeit mit neuem Verhalten versehen. Mehrere Dekorierungen

Decorator Pattern

Das Pattern kann einem Objekt weitere Funktionalität hinzufügen.

Alternative zur Vererbung: Unterklassen fügen

Funktionalität während der Übersetzung zu.

Das Decorator-Pattern kann Objekt während der Laufzeit mit neuem Verhalten versehen.

Mehrere Dekorierungen sind möglich.

Taentzer Softwarequalität 2013 144

Page 19: Design Patterns - Philipps-Universität Marburgswt/ss13/sq/files/Folien13… · Das Decorator-Pattern kann Objekt während der Laufzeit mit neuem Verhalten versehen. Mehrere Dekorierungen

Taentzer Softwarequalität 2013 145

Weitere interessante Design Patterns

Command: separate Komposition eines Kommandos vor Ausführung, Standardfunktionalität wie Undo/Redo

Singleton: Instanziierung einer Klasse durch nur ein Objekt

Memento: Speichere den Inhalt eines Objekts zeitweise so, dass die Speichermethode gewechselt werden kann.

Page 20: Design Patterns - Philipps-Universität Marburgswt/ss13/sq/files/Folien13… · Das Decorator-Pattern kann Objekt während der Laufzeit mit neuem Verhalten versehen. Mehrere Dekorierungen

Taentzer Softwarequalität 2013 146

Wesentliches zusammengesetztes Design Pattern: Model-View-Controller Ziel: mehrere Sichten auf gemeinsamen Daten

Schichtenbildung: Observer Pattern View-Objekte können andere View-Objekte enthalten:

Composite Pattern Controller wählt View: Strategy Pattern

Model

View1

View2

View3

Controller1

Controller2

Controller3

Page 21: Design Patterns - Philipps-Universität Marburgswt/ss13/sq/files/Folien13… · Das Decorator-Pattern kann Objekt während der Laufzeit mit neuem Verhalten versehen. Mehrere Dekorierungen

Taentzer Softwarequalität 2013 147

Design Patterns und Refactoring

Refactoring, um Design Patterns in die eigene Anwendung zu integrieren Joshua Kerievsky, Refactoring To Patterns,

Addison Wesley, 2004 Refactoring To Patterns Catalog:

http://industriallogic.com/xp/refactoring/catalog.html Auffinden von Anti-Patterns und Ersetzen durch

Design Patterns Anti Patterns Catalog:

http://c2.com/cgi/wiki?AntiPatternsCatalog Wie weit geht dieses Verfahren?

Page 22: Design Patterns - Philipps-Universität Marburgswt/ss13/sq/files/Folien13… · Das Decorator-Pattern kann Objekt während der Laufzeit mit neuem Verhalten versehen. Mehrere Dekorierungen

Taentzer Softwarequalität 2013 148

Zusammenfassung

Design Patterns kondensieren das Wissen von erfahrenen Softwareentwicklern.

Design Patterns tragen konstruktiv zur Qualitäts-sicherung bei.

Refactoring to Patterns ist der Versuch, ein Design systematisch zu verbessern. Bad Smells → Refactorings → Design Patterns

kaum Werkzeugunterstützung: frühzeitige Einführung von Design Patterns z.B. PatternBox