Entwurfsmuster
Ein Entwurfsmuster (englisch: design pattern) beschreibt eine in der Praxis erfolgreiche Lösung für ein mehr oder weniger häufig auftretendes Entwurfsproblem und stellt damit eine wiederverwendbare Vorlage zur Problemlösung dar. Entstanden ist der Ausdruck in der Architektur, von wo er für die Softwareentwicklung übernommen wurde.
Der Architekt Christopher Alexander hatte in den 1970er Jahren eine Sammlung von Entwurfsmustern zusammengestellt. Hier hat sich diese Idee jedoch bei weitem nicht so verbreitet wie später in der Softwareentwicklung.
Erich Gamma promovierte Mitte der neunziger Jahre an der Universität Zürich über die Übertragung dieser Methode auf die Softwareentwicklung. Im Anschluss ging er in die Vereinigten Staaten von Amerika, wo er zusammen mit Richard Helm, Ralph Johnson und John Vlissides das Buch Design Patterns - Elements of Reusable Object-Oriented Software herausbrachte. Diese vier Autoren werden manchmal mit dem Spitznamen "Gang of Four" (Viererbande, kurz "GoF") bedacht. GoF wird gelegentlich auch als Verweis für besagtes Buch verwendet.
Die Beschreibung eines Entwurfsmusters folgt dem folgenden Schema:
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.
Moderne (insbesondere von Grund auf Objektorientierung unterstützende) Hochsprachen unterstützen einige der gängigen Entwurfsmuster bereits mit bestimmten Sprachmitteln, so dass man sich in der Praxis vor allem bei der Nutzung moderner Sprachen im Prozess der objektorientierten Analyse (OOA) und des objektorientierten Designs (OOD) der Entwurfsmuster bedient, die dort u.U. noch immer implementierungsneutral in der Unified Modelling Language (UML) angewendet werden.
Nach GoF werden Muster in drei Kategorien eingeteilt, die nach der Wirkung des jeweiligen Musters unterscheiden. Die erste Gruppe von Mustern bezieht sich auf die Erzeugung von Objekten. So kann man etwa die Anzahl von erzeugten Objekten einer Klasse kontrollieren wollen, oder man will den konkreten Typ der erzeugten Objekte - abhängig von den jeweiligen Bedingungen - anpassen. Die zweite Gruppe liefert Muster, welche eine Vereinfachung der Struktur zwischen Klassen ermöglichen sollen. Komplexe Beziehungsgeflechte können beispielsweise über vermittelnde Klassen oder Schnittstellen logisch vereinfacht werden. Die dritte Gruppe von Mustern betrifft das Verhalten der Klassen. Hierbei handelt es sich um die größte Gruppe von Mustern. Sie beziehen sich auf die Zusammenarbeit und den Nachrichtenaustausch von Klassen.
Erzeugungsmuster beschreiben Vorgehensmodelle zur Erzeugung von Objekten.
Die Arbeiten von Gamma haben viele Autoren zu weiteren Veröffentlichungen über Entwurfsmuster angeregt. Ein weiteres bekanntes Muster ist:
Architektur
Softwareentwicklung
Der primäre Nutzen eines Entwurfsmusters liegt in der Beschreibung einer Lösung für eine bestimmte Klasse von Problemen. Weiterer Nutzen ergibt sich aus der Tatsache, dass jedes Muster einen Namen hat. Dies vereinfacht die Diskussion unter Softwareentwicklern, da man abstrahiert über eine Softwarestruktur sprechen kann. So sind Entwurfsmuster zunächst einmal unabhängig von der konkreten Programmiersprache.Grundlegende Muster nach GoF
Erzeugungsmuster (Creational Patterns)
Strukturmuster (Structural Patterns)
Verhaltensmuster (Behavioral Patterns)
Andere Entwurfsmuster
Der Gedanke der Muster hat inzwischen auch in anderen Bereichen der Informatik zu weiteren Veröffentlichungen geführt:
Literatur
Siehe auch: Prototyp (Technik)