Outils :Vous avez un site web ? Un blog ?
Technorati reactions rencontre |
Entwurfsmuster (engl. design patterns) sind bewährte Lösungs-Schablonen für wiederkehrende Entwurfsprobleme in Softwarearchitektur und Softwareentwicklung. 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. Aber auch außerhalb der Informatik finden Entwurfsmuster immer mehr Eingang.
Inhaltsverzeichnis |
Der Architekt Christopher Alexander hatte in einer auf Vitruv zurückgehenden Tradition in den 1970er Jahren eine Sammlung von Entwurfsmustern zusammengestellt.[1] 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.
Ein gutes Muster sollte
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.
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.
Die folgende Tabelle von Entwurfsmustern enthält Entwurfsmuster der Viererbande, sowie anderer Kataloge:
| Erzeugende Muster | Strukturelle Muster | Verhaltensmuster | Weitere Muster |
|---|---|---|---|
| Abstract Factory (Abstrakte Fabrik) | Adapter | Chain of Responsibility (Zuständigkeitskette) | Business Delegate |
| Builder (Erbauer) | Composite (Kompositum) | Command (Kommando) | Data Access Object |
| Factory Method (Fabrikmethode) | Bridge (Brücke) | Interpreter | Data Transfer Object (Datentransferobjekt) |
| Prototype (Prototyp) | Decorator (Dekorierer) | Iterator | Dependency Injection |
| Singleton (Einzelstück) | Facade (Fassade) | Mediator (Vermittler) | Inversion of Control |
| Flyweight (Fliegengewicht) | Memento | Model View Controller | |
| Proxy (Stellvertreter) | Null Object (Nullobjekt) | Model View Presenter | |
| Observer (Beobachter) | Plugin | ||
| State (Zustand) | Fluent Interface | ||
| Strategy (Strategie) | |||
| Template Method (Schablonenmethode) | |||
| Visitor (Besucher) |
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. 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:
Wo Entwurfsmuster in der Software-Entwicklung allgemein übliche und bekannte Lösungsansätze sind, um Probleme zu lösen, so sind Anti-Patterns Negativ-Beispiele von bereits durchgeführten Lösungen, die Hinweise darauf geben, welche Fehler vermieden werden sollten.
Nachdem bei der Software-Entwicklung 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.