Entwurfsmuster

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 21. September 2016 um 14:51 Uhr durch Trustable (Diskussion | Beiträge) (Änderungen von 185.30.146.36 (Diskussion) auf die letzte Version von JFKCom zurückgesetzt). Sie kann sich erheblich von der aktuellen Version unterscheiden.
Zur Navigation springen Zur Suche springen

Entwurfsmuster (englisch design patterns) sind bewährte Lösungsschablonen für wiederkehrende Entwurfsprobleme sowohl in der Architektur als auch in der Softwarearchitektur und -entwicklung. Sie stellen damit eine wiederverwendbare Vorlage zur Problemlösung dar, die in einem bestimmten Zusammenhang einsetzbar ist. In den letzten Jahren hat der Ansatz der Entwurfsmuster auch zunehmendes Interesse im Bereich der Mensch-Computer-Interaktion gefunden. Ursprünglich wurde der Begriff in der Architektur von Christopher Alexander verwendet.[1]

Arten von Entwurfsmustern

Beispiel eines Entwurfsmusters in UML (hier das Entwurfsmuster „Prototyp“)

Es gibt unterschiedliche Typen von Entwurfsmustern. Ursprünglich wurden folgende Typen unterschieden:[2]

Erzeugungsmuster (englisch creational patterns)
Dienen der Erzeugung von Objekten. Sie entkoppeln die Konstruktion eines Objekts von seiner Repräsentation. Die Objekterzeugung wird gekapselt und ausgelagert, um den Kontext der Objekterzeugung unabhängig von der konkreten Implementierung zu halten, gemäß der Regel: „Programmiere auf die Schnittstelle, nicht auf die Implementierung!“
Strukturmuster (englisch structural patterns)
Erleichtern den Entwurf von Software durch vorgefertigte Schablonen für Beziehungen zwischen Klassen.
Verhaltensmuster (englisch behavioral patterns)
Modellieren komplexes Verhalten der Software und erhöhen damit die Flexibilität der Software hinsichtlich ihres Verhaltens.

Später kamen noch weitere Typen für diejenigen Entwurfsmuster, die in keine der drei genannten Typen passten, hinzu. Darunter beispielsweise

Muster für objektrelationale Abbildung
Dienen der Ablage und des Zugriffes von Objekten und deren Beziehungen in einer relationalen Datenbank.[3]

Geschichte

Der Architekt Christopher Alexander hatte in einer auf Vitruv zurückgehenden Tradition zwischen 1977 und 1979 eine Sammlung von Entwurfsmustern zusammengestellt.[4] Die Hauptaufgabe dieser Muster ist es, die Bewohner der zu bauenden Strukturen in den Entwurfsprozess einzubinden. Der Ansatz für Entwurfsmuster wurde von Alexander bereits 1964 in Notes on the synthesis of form dargestellt. In der Architektur hat sich diese Idee jedoch bei weitem nicht so verbreitet wie später in der Softwareentwicklung.

Kent Beck und Ward Cunningham griffen 1987 die Ideen Alexanders aus der Architektur auf und entwickelten Entwurfsmuster für die Erstellung von grafischen Benutzeroberflächen in Smalltalk. Ein Jahr später begann Erich Gamma mit seiner Promotion an der Universität Zürich über die generelle Übertragung dieser Methode auf die Softwareentwicklung. Parallel dazu arbeitete James Coplien in den Jahren 1989 bis 1991 an musterähnlichen Idiomen für C++ und veröffentlichte 1991 sein Buch Advanced C++ Idioms.

Erich Gamma beendete im selben Jahr seine Promotion und ging im Anschluss in die Vereinigten Staaten. Dort brachte er 1994 zusammen mit Richard Helm, Ralph Johnson und John Vlissides das Buch Design Patterns – Elements of Reusable Object-Oriented Software heraus, in dem 23 Entwurfsmuster beschrieben sind. Diese vier Autoren sind unter Entwicklern auch unter ihrem Spitznamen Gang of Four (Viererbande, kurz GoF) bekannt und verhalfen mit ihrem Buch den Entwurfsmustern zu ihrem Durchbruch. Gelegentlich wird GoF auch als Verweis für das besagte Buch verwendet. Anders als Alexander, der seine Muster vor allem für Laien geschrieben hat, richten sich die GoF-Muster an Softwareentwickler und nicht an Benutzer.

Anforderungen und Nutzen

Ein gutes Muster sollte

  • ein oder mehrere Probleme lösen,
  • ein erprobtes Konzept bieten,
  • auf realen Designs basieren,
  • über das rein Offensichtliche hinausgehen,
  • den Benutzer in den Entwurfsprozess einbinden,
  • Beziehungen aufzeigen, die tiefergehende Strukturen und Mechanismen eines Systems umfassen.

Entwurfsmuster beinhalten in der Regel Referenzen auf andere Muster. Mithilfe dieser ist es möglich, Mustersprachen zu entwickeln.

Der primäre Nutzen eines Entwurfsmusters liegt in der Beschreibung einer Lösung für eine bestimmte Klasse von Entwurfsproblemen. Weiterer Nutzen ergibt sich aus der Tatsache, dass jedes Muster einen Namen hat. Dies vereinfacht die Diskussion unter Entwicklern, da man abstrakt über eine Struktur sprechen kann. So sind etwa Software-Entwurfsmuster – im Gegensatz zu Idiomen – zunächst einmal unabhängig von der konkreten Programmiersprache.

Wenn der Einsatz von Entwurfsmustern dokumentiert wird, ergibt sich ein weiterer Nutzen dadurch, dass durch die Beschreibung des Musters ein Bezug zur dort vorhandenen Diskussion des Problemkontextes und der Vor- und Nachteile der Lösung hergestellt wird.

Nachteile

Der erfolgreiche Einsatz von Entwurfsmustern in der Vergangenheit kann dazu verleiten, die Entwurfsmuster als Wunderwaffe und Garant für gutes Design anzusehen. Unerfahrene Entwickler können geneigt sein, möglichst viele bekannte Muster zu verwenden, und dabei übersehen, dass in ihrem Fall vielleicht eine elegantere Lösung ohne den Einsatz von Mustern möglich wäre. Entwurfsmuster garantieren nicht, dass der Entwurf gut ist. Insofern ist die Anwendung zu vieler oder ungeeigneter Entwurfsmuster ein Antimuster.

Musterkataloge

Entwurfsmuster werden üblicherweise nach dem Vorbild der Bücher von Christopher Alexander und der Viererbande in sogenannten Musterkatalogen (engl. „Design Pattern Catalog“) gesammelt. Diese beschreiben die einzelnen Muster katalogartig anhand ihrer Eigenschaften. Diese Eigenschaften sind beispielsweise beim Buch Design Patterns – Elements of Reusable Object-Oriented Software folgende: Aufgabe, Andere Namen, Motivation, Anwendbarkeit, Struktur, Teilnehmer, Kollaborationen, Konsequenzen, Implementierung, Beispielcode, Bekannte Verwendungen, verwandte Muster.

Neben dem Entwurfsmusterkatalog der Viererbande gibt es eine Reihe weiterer Kataloge. Zu diesen zählen die Bücher Patterns of Enterprise Application Architecture, Pattern-Oriented Software Architecture, Volume 1, A System of Patterns, Refactoring To Patterns sowie die Core J2EE Patterns. Siehe Abschnitt Literatur.

Liste von Mustern

Die folgende Tabelle von Entwurfsmustern enthält Entwurfsmuster der Viererbande (rot eingefärbt), funktionale Verhaltensmuster von Stuart Sierra (blau eingefärbt) sowie andere Entwurfsmuster aus anderen Katalogen. Die ersten drei Spalten stellen die Teilmengen dar, in die die Entwurfsmuster im Buch Design Patterns kategorisiert wurden. Die vierte Spalte enthält Muster für die objektrelationale Abbildung die insbesondere von Martin Fowler geprägt wurden (grün eingefärbt).[3] Die fünfte Spalte enthält solche Muster, die sich keiner der ersten vier Spalten zuordnen lassen. Sie ist nicht vollständig.

Erzeugungsmuster (Creational Design Patterns) Strukturmuster (Structural Design Patterns) Verhaltensmuster (Behavioral Design Patterns) Muster für objektrelationale Abbildung Weitere Muster
abstrakte Fabrik (abstract factory pattern) Adapter (adapter pattern) Beobachter (observer pattern) Data Mapper Business Delegate
Einzelstück (singleton pattern) Brücke (bridge pattern) Besucher (visitor pattern) Data Access Object Dependency Injection
Erbauer (builder pattern) Container (container pattern) Interceptor (interceptor pattern) Datentransferobjekt (data transfer object) Extension Interface
Fabrikmethode (factory method pattern) Dekorierer (decorator pattern) Interpreter (interpreter pattern) Table Data Gateway Fluent Interface
Multiton (multiton pattern) Fassade (facade pattern) Iterator (iterator pattern) Row Data Gateway Inversion of Control
Prototyp (prototype pattern) Fliegengewicht (flyweight pattern) Kommando (command pattern) Active Record Model View Controller (MVC)
  Kompositum (composite pattern) Memento (memento pattern) Unit of Work Model View Presenter (MVP)
  Stellvertreter (proxy pattern) Nullobjekt (Null Object pattern) Identity Map Model View ViewModel (MVVM)
  Half Object Plus Protocol Schablonenmethode (template method pattern) Lazy Loading Transaction Script
  Whole-Part Strategie (strategy pattern) Identity Field Domain Model
    Vermittler (mediator pattern) Dependent Mapping Table Module
    Zustand (state pattern) Embedded Value Service Layer
    Zuständigkeitskette (chain of responsibility) Serialized LOB Page Controller
    State/Event Inheritance Mapper Template View
    Consequences Metadata Mapping Transform View
    Accumulator Query Object Two-Step View
    MapReduce   Application Controller
    Reduce/Combine   Remote Facade
    Rekursive Erweiterung   Locks
    Software Pipelining   Session States
    Prozess Wrapper   Repository
    Token   Value Object
    Page Object   Registry
        Serviceorientierte Architektur (SOA)

Andere Arten von Mustern

Die Arbeiten der Viererbande haben viele Autoren zu weiteren Veröffentlichungen angeregt. Daraus entstand auch die Problematik, dass ein Muster sich nicht mehr ohne weiteres als Entwurfsmuster klassifizieren lässt. Vielmehr gibt es graduelle Unterschiede in der Granularität von Mustern. So wird etwa das Model-View-Controller-Muster (MVC) von einigen als Architekturmuster, von anderen (noch) als Entwurfsmuster betrachtet.

Beispiele für Muster, welche keine Entwurfsmuster sind:

  • Analysemuster charakterisieren typische Fälle der Anforderungsanalyse.
  • Architekturmuster beschreiben typische Softwarearchitekturen.
  • Idiome sind unterhalb der Ebene des Entwurfs bei der Programmierung auftretende Muster.
  • Kommunikationsmuster beziehen sich auf die Kommunikationswege zwischen Personen einer Organisation.
  • Organisationsmuster beschreiben Elemente der Strukturen von Organisationen.
  • Antimuster beschreiben, „wie man es nicht machen sollte.“

Antimuster

Wo Entwurfsmuster in der Software-Entwicklung allgemein übliche und bekannte Lösungsansätze sind, um Probleme zu lösen, so sind Antimuster Negativ-Beispiele von bereits durchgeführten Lösungen, die Hinweise darauf geben, welche Fehler vermieden werden sollten.

Nachdem bei der Softwareentwicklung immer mehr von positiven Erfahrungen von erfolgreich abgeschlossenen Aufgabenstellungen profitiert wurde, konzentrierte man sich auch darauf, die Negativbeispiele, also wiederkehrende Fehler bei der Software-Entwicklung, zu identifizieren und zu dokumentieren.

Siehe auch

Literatur

Weblinks

Wikibooks: Entwurfsmuster – Lern- und Lehrmaterialien

Einzelnachweise

  1. Andreas Zeller: Entwurfsmuster auf st.cs.uni-saarland.de (PDF, S. 2.)
  2. Erich Gamma, Richard Helm, Ralph E. Johnson, John Vlissides: Entwurfsmuster. Elemente wiederverwendbarer objektorientierter Software. Addison Wesley, München 2004, ISBN 3-8273-2199-9 (englisch: Design Patterns. Elements of Reusable Object-Oriented Software.).
  3. a b Martin Fowler: Patterns of Enterprise Application Architecture. Addison-Wesley-Longman, Amsterdam 2002, ISBN 0-321-12742-0.
  4. Christopher Alexander, Sara Ishikawa, Murray Silverstein, Max Jacobson, Ingrid Fiksfahl-King, Shlomo Angel: Eine Muster-Sprache. Städte, Gebäude, Konstruktion. Löcker, Wien 1995, ISBN 3-85409-179-6.