Design Pattern
Ein Design Pattern (deutsch Entwufsmuster) beschreibt eine bewährte Schablone für ein Entwurfsproblem. Es stellt damit eine wiederverwendbare Vorlage zur Problemlösung dar. Entstanden ist der Ausdruck in der Architektur, von der er für die Softwareentwicklung übernommen wurde. In den letzten Jahren hat der Ansatz der Entwurfsmuster auch zunehmendes Interesse im Bereich der Mensch-Computer-Interaktion gefunden.
Ein gutes Muster sollte
- ein oder mehrere Probleme lösen,
- ein erprobtes Konzept bieten,
- über das rein Offensichtliche hinausgehen,
- den Benutzer in den Entwurfsprozess einbinden,
- Beziehungen aufzeigen, die tiefergehende Strukturen und Mechanismen eines Systems umfassen.
Entwurfsmuster beinhalten Referenzen auf andere Muster. Mithilfe dieser ist es möglich, Mustersprachen zu entwickeln.
Inhaltsverzeichnis
Geschichte
Der Architekt Christopher Alexander hatte in den 1970er Jahren eine Sammlung von Entwurfsmustern zusammengestellt. Die Hauptaufgabe dieser Muster ist es, die Bewohner der zu bauenden Strukturen in den Entwurfsprozess einzubinden. 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 Benutzungsschnittstellen 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 1995 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 Programmierer und nicht an Benutzer.
Nutzen
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.
Andere Arten von Mustern
Die Arbeiten der Gang of Four 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 u.a. zusammengesetzte Muster, wie das Model-View-Controller-Muster (MVC).
Beispiele für Muster, welche keine Entwurfsmuster sind:
- Analysemuster charakterisieren typische Fälle der Anforderungsanalyse.
- Architekturmuster beschreiben typische Software-Architekturen.
- Idiom (Softwaretechnik) 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."
Einteilung
Die meisten Entwurfsmuster lassen sich in 3 Kategorien einteilen:
- Erzeugung - Entkopplung der Erzeugung/Instanzierung von Objekten
- Verhalten - Entkopplung der Wechselwirkung zwischen Klassen/Objekten
- Struktur - Zumsammensetzung von Klassen/Objekten zu größeren Strukturen
Eine andere Art der Einteilung ist nach Klassen und Objekten:
- Klassenmuster - Beziehungen der Klassen, die über Vererbung beschrieben sind
- Objektmuster - Dynamische Beziehungen der Objekte durch Komposition
Antimuster
Wo Entwurfsmuster in der Software-Entwicklung allgemein übliche und bekannte Lösungsansätze sind, um Probleme zu lösen, so sind Anti-Pattern Negativ-Beispiele von bereits durchgeführten Lösungen, die Hinweise darauf geben, wie die Aufgabenstellung besser gelöst werden könnte und sollte.
Nachdem bei der Software-Entwicklung immer mehr von positiven Erfahrung 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.
Literatur
- Erich Gamma, Richard Helm, Ralph E. Johnson: Entwurfsmuster. Elemente wiederverwendbarer objektorientierter Software, Addison Wesley in Pearson Education Deutschland, 2004, ISBN 3-8273-2199-9
- Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Design Patterns. Elements of Reusable Object-Oriented Software. Addison Wesley, 1995, ISBN 0-201-63361-2
- 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
- Jan Borchers: A Pattern Approach to Interaction Design. John Wiley & Sons, Chichester 2001, ISBN 0-471-49828-9
- Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad, Michael Stal: Pattern-orientierte Softwarearchitektur. Ein Pattern-System. Addison-Wesley-Longman, Bonn 1998, ISBN 3-8273-1282-5
- James O. Coplien: Advanced C++ Programming Styles and Idioms. Addison Wesley, 1991, ISBN 0-2015-4855-0
- Martin Fowler, David Rice, Matthew Foemmel: Patterns für Enterprise Application-Architekturen. Mitp-Verlag, 2003, ISBN 3-82661-378-3
- Douglas Schmidt, Michael Stal, Hans Rohnert, Frank Buschmann: Pattern-orientierte Softwarearchitektur. Muster für nebenläufige und vernetzte Objekte. dpunkt, Heidelberg 2002, ISBN 3-89864-142-2
- Eric Freeman, Elisabeth Freeman, Kathy Sierra, Bert Bates: Entwurfsmuster von Kopf bis Fuß. O'Reilly, 2005, ISBN 3-89721-421-0
- Klaus Quibeldey-Cirkel: Entwurfsmuster. Design Patterns in der objektorientierten Softwaretechnik Springer, 1999, ISBN 3-540-65825-4
- Brandon Goldfedder: Entwurfsmuster einsetzen Addison-Wesley, 2002, ISBN 3-8273-1983-8
Weblinks
- Der Artikel von Beck und Cunningham (Englisch)
- Das Wikiprinzip aus dem Blickwinkel der Entwurfsmusteransatzes erklärt (Englisch)
- Core Java 2 EE Patterns
- The Design Patterns Java Companion
Dieser Beitrag stammt in seiner ersten oder einer späteren Version der deutschsprachigen Wikipedia. Er ist dort unter Entwurfsmuster zu finden, die Liste der bisherigen Autoren befindet sich in der Versionsliste. |