190 likes | 325 Views
Entwurfsmuster (Design Pattern). ETIS SS05. Gliederung. Motivation Pattern allgemein Proxy-Pattern Zusammenfassung. Motivation I. Wie gut sind eure Programme strukturiert? Wartbarkeit ? - Verständlichkeit (für euch, für andere, bei wachsender Komplexität)? Wiederverwendbarkeit?
E N D
Entwurfsmuster (Design Pattern) ETIS SS05
Gliederung • Motivation • Pattern allgemein • Proxy-Pattern • Zusammenfassung Pattern
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? Pattern
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 Pattern
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) Pattern
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 Pattern
Pattern III • Kombinierbar • 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 Pattern
Proxy-Pattern I • Klassifizierung • Objektorientiertes Strukturmuster • Name: • Proxy • Zweck: • Kontrolle des Zugriffs auf ein Objekt mittels vorgelagerten Stellvertreterobjektes • Auch bekannt als • Surrogat Pattern
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: EigentlichesBild Mögliche BildProxies Pattern
Proxy-Pattern - Motivation II DokumentEditor Grafik zeichne() gibAusmasse() lade() if (bild == null){ bild = lade(); } bild.zeichne(); Bild BildProxy bildImp ausmasse zeichne() gibAusmasse() lade() dateiname ausmasse zeichne() gibAusmasse() lade() if (bild == null){ return ausmasse; } else { return bild.gibAusmasse(); } bild Pattern
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 Pattern
Proxy-Pattern - Struktur Client Subjekt operation() … EchtesSubjekt Proxy … echtesSubjekt.operation(); … operation() … operation() … echtesSubjekt Pattern
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 Pattern
Proxy-Pattern – Interaktionen + Konsequenzen • Interaktionen • 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 Pattern
Proxy-Pattern - Implementierung public class EchtesSubject extends Subject { public void berechne() { //schwierige lange dauernde //Berechnung } } public interface Subject { public void berechne(); } • public class Proxy implements Subject { • private EchtesSubject esub; • protected void lade() { • if (esub == null) • esub = new EchtesSubject(); • } • public void berechne() { • lade(); • esub.berechne(); • } • } Pattern
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) Pattern
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 Pattern
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 Pattern