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