1 / 18

Entwurfsmuster (Design Pattern)

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?

davin
Download Presentation

Entwurfsmuster (Design Pattern)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Entwurfsmuster (Design Pattern) ETIS SS05

  2. Gliederung • Motivation • Pattern allgemein • Proxy-Pattern • Zusammenfassung Pattern

  3. 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

  4. 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

  5. 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

  6. 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

  7. 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

  8. Proxy-Pattern I • Klassifizierung • Objektorientiertes Strukturmuster • Name: • Proxy • Zweck: • Kontrolle des Zugriffs auf ein Objekt mittels vorgelagerten Stellvertreterobjektes • Auch bekannt als • Surrogat Pattern

  9. 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

  10. 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

  11. 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

  12. Proxy-Pattern - Struktur Client Subjekt operation() … EchtesSubjekt Proxy … echtesSubjekt.operation(); … operation() … operation() … echtesSubjekt Pattern

  13. 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

  14. 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

  15. 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

  16. 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

  17. 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

  18. 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

More Related