Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Taentzer Softwarequalität 2015 138
Überblick
Was sind Design Patterns? Welche Design Patterns gibt es? Wann sollte man Design Patterns einsetzen?
Taentzer Softwarequalität 2015 139
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)
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: AbstractFactory, Builder, Singleton, etc. Strukturmuster: Adapter, Decorator, Fassade, Composite,
Proxy, etc. Verhaltensmuster: Observer, Visitor, Iterator, Strategy, etc.
Taentzer Softwarequalität 2015 140
Patterns zur Objekterzeugung
Anforderungen: Das Einlesen soll von der eigentlichen Anwendungslogik
getrennt werden. (Warum?) Nutzern einer Komponente sollen keine Implementierungs-
details gezeigt werden. Eine komplexe Objektstruktur soll aus verschiedenen
Formaten einlesbar sein.
Taentzer Softwarequalität 2015 141
Patterns zur Objekterzeugung
Singleton schränkt die Objekterzeugung einer Klasse auf eineInstanz ein.
Prototype erzeugt Objekte durch Klonen einer Vorlage, die anschließend modifiziert werden kann.
Abstract Factory gruppiert zusammengehörige Objekt-Factories und abstrahiert von diesen.
Factory method erzeugt Objekte ohne Spezifikation der erzeugenden Klasse.
Builder konstruiert komplexe Objekte separat von ihrerRepräsentation. Derselbe Konstruktionsprozess kann so auf verschiedene Repräsentationen angewendet werden.
Taentzer Softwarequalität 2015 142
Beispiel: Ausgabe in verschiedenen Formaten
Eine Artikelliste soll im JSON- oder XML-Format ausgegeben werden. Jeder Artikel gehört zu einer Kategorie, hat einen Namen und einen Preis. Es können beliebig viele Kategorien definiert sein.
Taentzer Softwarequalität 2015 143
Beispiel für das Builder Pattern
Processor
process(List<Item> list)
ItemWriter
+ printArticle(Item i)+ printCategory(Item i)+ getResult(): File
JsonWriter XmlWriter
for (item: list) {switch item.typecase ARTICLE:
writer.printArticle(item);case CATEGORY:
writer.printCategory(item);}
writer
Builder Pattern
Builder: Schnittstelle für das Erzeugen von Objekten ConcreteBuilder: Konkrete Implementierung der Objekterzeugung
Taentzer Softwarequalität 2015 144
en.wikipedia.org/wiki/Builder_pattern
Patterns für Variantenmanagement
Anforderungen: Redundanzen in Programmen sollen reduziert werden,
indem Gemeinsamkeiten einer Menge von Objekten herausfaktorisiert und nur an einer Stelle beschrieben werden.
Selektion von konkreten Varianten eventuell erst zur Laufzeit
Welche Arten von Redundanzen können auftreten? Strukturen gleichartiger Objekte Algorithmen mit verschiedenen Varianten
Taentzer Softwarequalität 2015 145
Taentzer Softwarequalität 2015 146
Patterns für Variantenmanagement
Superclass: ziehe Gemein-samkeiten von Objekten in eine gemeinsame Ober-klasse
Delegation: leite Aufgaben von Klasse A an Klasse B weiter
(Abstract) Factory: bündele die Erzeugung von zusam-mengehörigen Objekten in einer Klasse
Composite: behandle Teil-Ganzes-Hierarchien, atomare und komponierte Objekte werden gleichartig behandelt
Strategy: erstelle eine gemeinsame Schnittstelle für verschiedene Varianten von Algorithmen
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.
Taentzer Softwarequalität 2015 147
Delegation Pattern
Ein Objekt zeigt Funktionalität nach außen, die es intern an andere delegiert.
ein grundlegendes Pattern zur Abstraktion von Implementierungen
Stackpush()pop()
Listadd()remove()
Client
Beispiel: Wie kann man einen Stack implementieren?
stack list
Beispiel: Strukturierung von graphischen Oberflächen
Es soll möglich sein, graphische Sichten hierarchisch aufzubauen. Sichten können Gruppen von Sichten enthalten.
Verschiedene Arten von Sichten sollen möglichst flexibel kombinierbar sein.
Taentzer Softwarequalität 2015 148
Taentzer Softwarequalität 2015 149
Beispiel: Strukturierung von graphischen Oberflächen
Einzelne Sichten und Gruppen von Sichten werden möglichst ähnlich behandelt.
View
display()
PrimitiveView ViewGroup
Button TextView StackView ListView
Beispiel für das Composite Pattern
Composite Pattern
Einzelne Instanzen und Gruppen von Instanzen können gleich behandelt werden.
Varianten: Es kann verschiedene Arten
von atomaren Objekten geben: Unterklassen von Atomic
Es kann verschiedene Arten von zusammengesetzten Objekten geben: Unterklassen von Composite
Taentzer Softwarequalität 2015 150
Component
Atomic Composite
Beispiel: Verschiedene Formatierungen derselben Struktur
Eine graphische Oberfläche soll in verschiedenen Sichten spezifiziert werden.
Eine Formatierung erzeugt eine spezielle Instanz einer Struktur.
Taentzer Softwarequalität 2015 151
Beispiel: Verschiedene Formatierungen derselben Struktur
Taentzer Softwarequalität 2015 152
StructureFormatingStrategy
print()
TreeFormat XMLFormat GraphicalFormat
FormatingStrategy strat;switch output.typecase TREE:
strat = new TreeFormat();strat.print();
case XML://….
Beispiel für das Strategy Patternstrat
Strategy Pattern
Entkopple die Formatierung von der Struktur
Kapselung einer Familie von Algorithmen durch eine Schnittstelle
Ein allgemeines Verhalten wird durch konkretes Verhalten spezialisiert.
Taentzer Softwarequalität 2015 153
en.wikipedia.org/wiki/Strategy_pattern
Beispiel: Verschönerung der Benutzerschnittstelle
Mögliche Verschönerungen für einen ListView: Trenner zwischen Einträgen Scroll Bar, um lange Listen anzuzeigen Ein Suchfeld
Anforderungen: 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 2015 154
Beispiel: Verschönerung der Benutzerschnittstelle
Taentzer Softwarequalität 2015 155
ApplicationAbstractListView
draw()
ListView ListDecorator- decoratedListView
ScrollBarDecorator SearchDecorator
AbstractListView lv;lv = new SearchDecorator(
new ScrollBarDecorator(new ListView))
Beispiel für das Decorator Pattern
lv
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 eines Objekts sind möglich.
Verschiedene Reihenfolgen werden berücksichtigt.
Taentzer Softwarequalität 2015 156
en.wikipedia.org/wiki/Decorator_pattern
Taentzer Softwarequalität 2015 157
Zusammenfassung Design Patterns kondensieren das Wissen von
erfahrenen Softwareentwicklern. Design Patterns tragen konstruktiv zur Qualitäts-
sicherung bei. keine nennenswerte Werkzeugunterstützung Links zu Design Patterns
sourcemaking.com/design_patterns Wikipedia-Seiten
Nächste Woche: weitere Design Patterns Refactoring to Patterns