Objektorientierte Entwurfsmuster Claus Lewerentz Brandenburgische Technische Universität Cottbus Fraunhofer FIRST/SWQlab Cottbus Fraunhofer Institut Rechnerarchitektur und Softwaretechnik 12.05.2005, Software-Systemtechnik, BTU Cottbus 1
Qualitätskriterien und oo Entwurfsprinzipien Software-Entwurf: Konstruktion eines Software-Produkts Realisierung der funktionalen Anforderungen mit vorhandenen und neuen Komponenten Erreichen von inneren Qualitätseigenschaften des Produkts. leichte Anpassbarkeit, Erweiterbarkeit Verstehbarkeit, Wiederverwendbarkeit,... Strukturiertheit viele unterschiedliche Entwurfsprobleme müssen gelöst werden arbeitsteilige kooperative Entwicklungsprozesse (Kommunikation!) mit objektorientierten Ansätzen ist das leicht...... (wird uns gesagt :-)... aber wie geht das systematisch? 12.05.2005, Software-Systemtechnik, BTU Cottbus 2
Qualitätskriterien und oo Entwurfsprinzipien /2 objektorientierte Modellierungs-/Programmiersprachen bieten Konzepte/Mechanismen zur Konstruktion von großen Programmen Bündelung Kapselung Abstraktion Komposition Vererbung... bekannte Entwurfsprinzipien zur Verwendung der Konzepte Einsatz von Vererbung (Klassen- vs. Schnittstellenvererbung) Schaffen und Nutzen von abstrakten Schnittstellen Vererbung vs. Komposition vs. parametrische Typen Delegation Kopplung, Kohäsion... 12.05.2005, Software-Systemtechnik, BTU Cottbus 3
Das Rad wird immer wieder neu erfunden... Was ist gutes Design? bewährte Lösungen Experten-/Erfahrungswissen Wie findet man bewährte Entwurfsstrukturen?... wie beschreibt man sie?... wie erlernt man sie? Architekt Christopher Alexander (Oregon Group): The Timeless Way of Building (A Quality Without Name) A Language of Patterns (1977) 12.05.2005, Software-Systemtechnik, BTU Cottbus 4
Bauarchitektur: Beispiel für eine klassische gute Lösung Arkaden 12.05.2005, Software-Systemtechnik, BTU Cottbus 5
Entwurfsmuster systematische Erfassung bewährter Lösungen für spezifische, wiederkehrende Entwurfsprobleme Benennung und Beschreibung von Problemlösungen Problem (als Feld von widerstreitenden Kräften) typische gute Lösung Auswirkungen, Effekte dieser Lösung Entwurfssprache verbesserte Kommunikation über Entwürfe Vermittlung und Wiederverwendung von Entwurfswissen 12.05.2005, Software-Systemtechnik, BTU Cottbus 6
Schema zur Beschreibung von Mustern 1. Mustername (Kategorie) 2. Zweck (was macht das Muster?, Grundprinzip, Entwurfsprobleme) 3. Synonyme 4. Motivation 5. Anwendbarkeit 6. Lösung (Struktur, Teilnehmer, Interaktion) 7. Diskussion / Konsequenzen 8. Implementierung (Impl. Ideen, Beispiel, sprachspez. Hinweise) 9. bekannte Verwendungen 10.verwandte Muster 12.05.2005, Software-Systemtechnik, BTU Cottbus 7
Beispiel für ein Muster: Zustand 1. Name Zustand, state (objektbasiertes Verhaltensmuster) 2. Zweck Modellierung von zustandsabhängigen Operationen Nutzung von Abstraktion für Zustand, polymorphe Methoden 3. Synonyme 4. Motivation Verhalten eines Systems (Methodenaufrufe) zustandsabhängig. klassische Lösung: Zustandsvariable (Aufzählungstyp) operation() { switch Zustand case A:... break case B:... break } 12.05.2005, Software-Systemtechnik, BTU Cottbus 8
Beispiel für ein Muster: Zustand /2 Lösung durch Zustandsobjekte 12.05.2005, Software-Systemtechnik, BTU Cottbus 9
Beispiel für ein Muster: Zustand /3 5. Anwendbarkeit Wirkung einer Methode hängt von Zustand des Objekts ab. Verhalten muss zur Laufzeit in Abhängigkeit vom Zustand geändert werden Methoden einer Klasse haben große mehrteilige Bedingungsanweisungen, die vom Objektzustand (Zustandsattribut) abhängen. 6. Lösung Struktur 12.05.2005, Software-Systemtechnik, BTU Cottbus 10
Beispiel für ein Muster: Zustand /4 Teilnehmer: Kontext definiert die für die Klienten relevante Schnittstelle, verwaltet Exemplar einer konkreten Zustandsklasse Zustand definiert die Schnittstelle zur Kapselung des mit einem bestimmten Zustand des Kontextobjekts verbundenen Verhaltens konkreter Zustand (jede Unterklasse von Zustand) implementiert das Verhalten des Kontextobjekts in einem spezifischen Zustand. Interaktion: Kontextobjekt delegiert die zustandsspezifischen Operationen an das aktuelle konkrete Zustandsobjekt Übergabe der Kontextinformation (ggf. das vollständige Kontextobjekt an das zustandsobjekt übergeben) nach Ausführung der zustandsspez. Operation muß Zustandsobjekt des Kontextobjekts aktualisiert werden 12.05.2005, Software-Systemtechnik, BTU Cottbus 11
Beispiel für ein Muster: Zustand /5 7. Diskussion + Lokalisierung von zustandsspezifischem Verhalten + Zustandsstruktur wird explizit modelliert - viele Klassen - Erzeugung von vielen Objekten, polymorphe Aufrufe 8. Implementierung offen, wie Zustandsübergang realisiert erzeugen, zerstören von Zustandsobjekten 9. bekannte Verwendung drag/drop bei interaktiven Programmen 10.verwandte Muster Fliegengewicht, Einzelexemplar,... 12.05.2005, Software-Systemtechnik, BTU Cottbus 12
Beispiel für ein Muster: Abstrakte Fabrik Problem: Erzeugung von Familien verwandter oder von einander abhängiger Objekte (Mitglieder einer Produktfamilie), ohne ihre konkreten Klassen an jeder Erzeugungsstelle zu benennen. Konfiguration eines Systems mit unterschiedlichen Produktfamilien Lösung: Abstraktionen für die unterschiedlichen Produkttypen schaffen Erzeugungsoperationen in speziellen Erzeugungsklassen für jede Produktfamilie bündeln. abstrakte Erzeugungsklasse (Fabrik) für alle Produkttypen definieren. 12.05.2005, Software-Systemtechnik, BTU Cottbus 13
Beispiel für ein Muster: Abstrakte Fabrik /2 12.05.2005, Software-Systemtechnik, BTU Cottbus 14
Musterkataloge und Mustersprachen Detaillierungsebenen Konzeptuelle Muster anwendungsspezifisch (domain specific patterns) Metaphern Architekturmuster fundamentale Systemstrukturen oo Entwurfsmuster Standardkonstruktionen für Klassen, Komponenten,.. Programmiermuster (Idiome) Standardkonstruktionen auf Programmiersprachenebene Umfangreiche Sammlungen / Kataloge von Mustern Klassifikationen, Systematisierung von Mustern 12.05.2005, Software-Systemtechnik, BTU Cottbus 15
Beispiel: Musterkatalog GOF-Buch 23 Muster in 3 Kategorien: Erzeugungsmuster (5) Strukturierungsmuster (7) Verhaltensmuster (11) 12.05.2005, Software-Systemtechnik, BTU Cottbus 16
Zusammenhänge zwischen Entwurfsmustern (Ausschnitt) 12.05.2005, Software-Systemtechnik, BTU Cottbus 17
Anwendung von Entwurfsmustern Ziele: Vereinfachung von Architekturen durch den Einsatz von Standard- Konstruktionen Disziplin Erreichen von Qualitätszielen mögliche Anpassungen, Erweiterungen in Architekturen a priori abschätzen, vorsorglich für Variabilität sorgen Prozess: schrittweise Reorganisation einer existierenden Architektur durch Analyse und den Einsatz von Mustern zur Transformation Hotspot-Analyse, Refactoring 12.05.2005, Software-Systemtechnik, BTU Cottbus 18
Effekte der Entwurfsmuster GOF-Buch hat eine starke Design Pattern -Bewegung ausgelöst Beschreibung von Architekturen im Muster-Stil gemeinsame Definition und Diskussion von Mustern Mustersammlungen Entwurfsmuster sind heute Standard-Lehrstoff in der Softwaretechnik-Ausbildung Standard-Repertoire an Begrifflichkeiten für komplexe Entwurfsstrukturen Entwicklung von Design-/Architektursprachen zunehmend Bibliotheken, die mit Standardmustern konstruiert sind, und Werkzeugunterstützung für die Anwendung von Mustern. 12.05.2005, Software-Systemtechnik, BTU Cottbus 19
Resümee die Pattern-Bewegung hat dem Thema Software-Architektur wesentliche Impulse und Dynamik gegeben. Entwurfsmuster stellen ein brauchbares Hilfsmittel zur Definition komplexer Teilstrukturen in Architekturen dar. Denken in größeren, komplexen Einheiten Disziplin im Umgang mit objektorientierten Basiskonzepten gutes Kommunikationsmittel für Entwickler Entwurfsmuster sind ein guter Startpunkt für die Entwicklung von abstrakteren Entwurfssprachen mit standardisierten Umsetzungen in Code. Muster sind keine einfache Universal-Lösung für alle Entwurfsprobleme 12.05.2005, Software-Systemtechnik, BTU Cottbus 20