Design Patterns

Werbung
Design Patterns
Design Patterns
(Software Entwurfsmuster)
Object Oriented Programming
Christian El Salloum
"Each pattern describes a problem which occurs over
and over again in our environment, and then describes
the core of the solution to that problem, in such a way
that you can use this solution a million times over,
without ever doing it the same way twice"
[Christopher Alexander]
Ein gutes Entwurfsmuster ...
Essentielle Elemente
löst ein bestimmtes Problem
bietet ein erprobtes Konzept
geht über das Offensichtliche hinaus
zeigt Beziehungen auf, die tiefer gehende Strukturen
eines Systems umfassen
• bindet den Benutzer in den Entwurfsprozess ein
(menschliche Komponente)
• Name
– Hebt die Abstraktionsebene auf eine höher Stufe
– Teil des Vokabulars eines Designers
• Problem
– Beschreibt wann das Muster anzuwenden ist
– Beschreibt Problem + Kontext
• Lösung
– Beschreibung auf einer Abstrakten Ebene
• Konsequenz
– Resultate
– Vor- und Nachteile
Prinzipien für Re-usable OO Design
Factory Method (Virtual Constructor)
• Programm to an interface, not to an implemenation
– Versuche wenn möglich das Interface der abstrakten
Klasse zu verwenden
• Zweck: Definition einer Schnittstelle zur Objekterzeugung
• Anwendungsgebiete:
– Die erzeugende Klasse kann die Klasse der zu erzeugenden
Objekte nicht antizipieren
– Unterklassen sollen bestimmen welche Objekte erzeugt
werden
– Delegation von Aufgaben and Hilfs-Subklassen, und
Lokalisierung der richtigen Subklasse
•
•
•
•
• Favor object composition over class inheritance
– Stärkere Kapselung
– (Umstrittenes Prinzip)
Factory Method: Beispiel
Factory Method: Struktur
aus [1]
Factory Method: Code Beispiel
Factory Method: Eigenschaften
• Erhöhte Flexibilität
– Applikationen können leichter erweitert werden
• Verknüpfung von parallelen Klassenhierarchien
– Creator-Hierarchie mit Produkt-Hierarchie
• Oft wird dabei eine große Anzahl von Unterklassen
erzeugt
aus [1]
Prototype
Prototyp: Beispiel
• Spezifikation der Art eines Objektes durch eine prototypische Instanz,
und Erzeugen eines neuen Objektes durch Kopieren des Prototyps
• Anwendungsgebiete:
– Art eines Objektes erst zur Laufzeit
– Creator-Klassenhierarchie parallel zu Produkt-Klassenhierarchie
(Factory Method) soll vermieden werden
– Wenn Instanzen einer Klasse einen von nur wenigen Zuständen
haben können
Æ Kopieren des Prototyps im gewünschten Zustand einfacher als
Konstruktoraufruf
aus [1]
Prototype: Struktur
Prototype: Eigenschaften
•
•
•
•
•
Verstecken von konkreten Produkt-Klassen vor Anwendern
Hinzufügen und Entfernen von Produktklassen zur Laufzeit
Spezifizieren neuer Objekte durch Ändern von Werten
Spezifizieren neuer Objekte durch Ändern der Struktur
Reduced subclassing
– Keine parallele Creator Klassenhierarchie
• Konfiguration einer Applikation mittels dynamisch
geladener Klassen
Decorator (Wrapper)
Decorator: Beispiel
• Gibt Objekten dynamisch neue Verantwortlichkeiten
• Alternative zur Vererbung
• Anwendungsgebiete:
– Dynamisches Hinzufügen von Verantwortlichkeiten
ohne Beeinflussung anderer Objekte
– Verantwortlichkeiten, die entzogen werden können
– Wenn Erweiterung durch Vererbung unpraktisch
• Bei zu vielen Kombinationen von unabhängigen
Erweiterungen
aus [1]
Decorator: Struktur
Decorator: Eigenschaften
• Mehr Flexibilität als statische Vererbung
• Vermeidet Klassen die mit Eigenschaften überladen sind,
durch inkrementelles Hinzufügen von Funktionalität
• Ein „Decorator“ und seine „Component“ sind nicht
identisch
• Oft viele kleine Objekte
– Schwer zu debuggen
Proxy (Surrogate)
Proxy: Beispiel
• Platzhalter für Objekt, kontrolliert Zugriffe
• Anwendungsgebiete
– Remote Proxy (lokaler Repräsentant für ein Objekt in einem
anderen Namensraum)
– Virtual Proxy (erzeugt „teure“ Objekte erst bei Bedarf)
– Protection Proxy (erlaubt Zugriffskontrolle)
– Smart Reference (ersetzt den bloßen Zeiger und führt zusätzliche
Aktionen bei einem Zugriff aus)
•
•
•
•
Reference Counting
Laden persistenter Objekte beim ersten Zugriff
Caching
Verhindern mehrerer gleichzeitiger Zugriffe (Locks)
aus [1]
Proxy: Struktur
Proxy Eigenschaften
• Ein Remote Proxy kann die Tatsache verbergen, dass
ein Objekt in einem anderen Namensraum liegt
• Ein Virtual Proxy kann Optimierungen durchführen
(z.B. Create-on-demand)
• Proxies erlauben zusätzliche organisatorische
Tätigkeiten bei einem Objektzugriff
Empfolene Literatur
[1]
Design Patterns. Elements of Reusable Object-Oriented Software
Erich Gamma, Richard Helm, Ralph E. Johnson
[2]
Patterns Kurzbeschreibung Universität Rostock, Lehrstuhl für
Softwaretechnik:
http://wwwswt.informatik.unirostock.de/deutsch/Infothek/Entwurfsmuster/patterns/index.html
Ende
Vielen Dank für Ihre Aufmerksamkeit
23
24
Herunterladen