Entwurfsmuster (Design Pattern) ETIS SS05
Gliederung Motivation Pattern allgemein Proxy-Pattern Zusammenfassung 2
Motivation I Wie gut sind eure Programme strukturiert? Wartbarkeit? - Verständlichkeit (für euch, für andere, bei wachsender Komplexität)? Wiederverwendbarkeit? Effizienz? Dauert es lange, gute Lösungen zu finden? Greift ihr auf gute Lösungen immer wieder zurück? Wie merkt ihr euch gute Lösungen? Könntet ihr eure Lösung problemlos weitergeben? Wäre es gut, Erfahrungen von Experten nutzen zu können? 3
Motivation II Wie sind Probleme (Lesbarkeit, Wiederverwendbarkeit, Wartbarkeit) lösbar? Geeigneter Entwurf Pattern halten erfolgreiche Lösungen (von Experten) fest Vermitteln bewährte Entwürfe (d.h. Entwurfs- und nicht Implementierungswiederverwendung) Keine trivialen Probleme Vermeiden das Rad neu zu erfinden Auswirkungen Einfache, leichter verständliche Entwürfe + Dokumentation Schnelle, kostengünstige Software-Entwicklung Bessere Verständigung im Softwareentwicklungsprozess 4
Pattern I Was sind Pattern? (Ch. Alexander) Beschreibung im Entwurfskontext häufig auftretenden Problems Erläuterung des Kerns der Lösung dieses Problems Lösung beliebig oft anwendbar, aber i.d.r. nicht 2x gleich Grundlegende Elemente (Gamma et al.) Mustername (Stichwort) Problemabschnitt (Problem, Anwendbarkeit, Kontext) Lösungsabschnitt (Entwurfelemente, Beziehungen, Interaktionen) Konsequenzabschnitt (Vor- und Nachteile) 5
Pattern II Verschiedenste Anwendungsbereiche z.b. Architektur, Pädagogik, Informatik (verteilte Systeme, UIs) Unterschiedlichen Abstraktionsebenen Architekturmuster Softwaresysteme durch Subsysteme strukturiert z.b. MVC, Broker, Layers Entwurfsmuster Verfeinerung Subsysteme oder deren Beziehungen z.b. Proxy, abstrakte Fabrik, Kompositium Idiome Aspekte des Entwurfs in bestimmter Programmiersprache z.b. Singleton in C++, Smalltalk 6
Kombinierbar Pattern III Konkrete Fabrik oft als Singleton implementiert Broker-Pattern benutzt Proxys + Bridge in Katalogen abgelegt Sammlung von Mustern (oft zu einem Thema) in strukturiertem, im Katalog einheitlichen, Format beschrieben Stellt auch Vernetzungen, Verwandtschaften der Pattern untereinander dar 7
Klassifizierung Proxy-Pattern I Objektorientiertes Strukturmuster Name: Proxy Zweck: Kontrolle des Zugriffs auf ein Objekt mittels vorgelagerten Stellvertreterobjektes Auch bekannt als Surrogat 8
Proxy-Pattern - Motivation I Volle Kosten der Objekt-Erzeugung + Objekt-Initialisierung verzögern, bis Objekt tatsächlich genutzt z.b. BildProxy Laden von Bildern in Dokumenten teuer Proxy als Platzhalter für Bild verwenden Bild-Objekte erst auf Verlangen erzeugt Beispiel: Mögliche BildProxies Eigentliches Bild 9
Proxy-Pattern - Motivation II DokumentEditor Grafik zeichne() gibausmasse() lade() if (bild == null){ bild = lade(); } bild.zeichne(); Bild BildProxy bildimp ausmasse zeichne() gibausmasse() lade() bild dateiname ausmasse zeichne() gibausmasse() lade() if (bild == null){ return ausmasse; } else { return bild.gibausmasse(); } 10
Proxy-Pattern - Anwendbarkeit Remote-Proxy Lokaler Stellvertreter für Objekt in anderem Adressraum z.b. RMI, Corba, Virtuelles Proxy Teure Objekte auf Verlangen erzeugt z.b. Bildproxy Schutzproxy Zugriffskontrolle auf Originalobjekte z.b. KernelProxy Smart-Reference Ersatz für einfachen Zeiger, der zusätzliche Aktionen ausführt z.b. Test vor Zugriff auf Objekt, ob gelockt 11
Proxy-Pattern - Struktur Klient Subjekt operation() EchtesSubjekt operation() echtessubjekt Proxy operation() echtessubjekt.operation(); 12
Proxy-Pattern - Teilnehmer Proxy Referenz auf EchtesSubjekt, d.h. hat Zugriff darauf Bietet identische Schnittstelle zu Subjekt, d.h. einsetzbar für EchtesSubjekt Kontrolliert Zugriff auf EchtesSubjekt Spezifische Zuständigkeiten (abhängig von der Art) Remote-Proxies: Anfragen, Argumente kodieren + an EchtesSubjekt in anderem Adressraum senden Virtuelle Proxies: Zugriff verzögern durch Zwischenspeichern zusätzlicher Informationen über EchtesSubjekt Schutzproxies: Test, ob Aufrufer notwendige Zugriffsrechte besitzt Subjekt gemeinsame Schnittstelle für EchtesSubjekt und Proxy, d.h. Proxy dort nutzbar, wo EchtesSubjekt erwartet EchtesSubjekt eigentliches, durch Proxy repräsentiertes, Objekt 13
Interaktionen Proxy-Pattern Interaktionen + Konsequenzen Wenn angebracht, leitet Proxy Befehle an EchtesSubjekt weiter Konsequenzen Führt Ebene der Indirektion bei Objektzugriff ein Remote-Proxy versteckt Tatsache, dass Objekt in anderem Adressraum Virtuelles Proxy kann Optimierungen ausführen z.b. Objekterzeugung auf Verlangen Schutzproxies + Smart-References ermöglichen Durchführung zusätzlicher Verwaltungsaufgaben bei Objektzugriff 14
Proxy-Pattern - Implementierung public interface Subject { } public void berechne(); public class EchtesSubject extends Subject { public void berechne() { //schwierige lange dauernde //Berechnung } } public class Proxy implements Subject { private EchtesSubject esub; } protected void lade() { if (esub == null) esub = new EchtesSubject(); } public void berechne() { lade(); esub.berechne(); } 15
Proxy-Pattern Verwendung + Verwandte Muster Bekannte Verwendungen RMI, Corba, Kernelproxies Verwandte Muster Adapter Adapter bietet andere Schnittstelle zum Objekt, das es anpasst Proxy bietet selbe Schnittstelle wie Subjekt Dekorierer Können ähnliche Implementierung wie Proxies haben Verfolgen anderen Zweck (Dekorierer erweitert Objekt um Zuständigkeiten, Proxy kontrolliert Zugriff auf Objekt) 16
Zusammenfassung Entwurfsmuster erfassen Erfahrungswissen, d.h. bewährte Lösungen, in strukturierter, leicht verständlicher Form Vermeiden das Rad wieder zu erfinden Verbessern Wartung, Wiederverwendung, Verständlichkeit von Software Ermöglichen relativ einfaches Weitergeben von Erfahrungswissen Stellen einheitliches Vokabular dar Unterliegen ständigen Verbesserungen Probleme: Trotz allem: Lernaufwand relativ hoch Bei Wahl eines guten Pattern in falschem Kontext: Verschlechterung des Entwurfes 17
Literatur Gamma, E., Helm, R., Jonson, R., Vlissides, J., Entwurfsmuster, Addison-Wesley, Bonn, 1996 Buschmann, F., Meunier, R., Pattern orientierte Software Architektur, Addison-Wesley, Bonn, 1998 18