Frank PientkaInnovation und Technologie

Eine Viererbande und ihre 23 Muster

Die Frage, wie Software-Entwicklung gelingen kann, beschäftigt die Branche schon seit ihren Anfängen. Dabei sind auf unterschiedlichen Ebenen Bücher entstanden, wie zum Beispiel die mehrbändige Sammlung von Algorithmen und Datenstrukturen „The Art of Computer Programming“. Erst mit dem Aufkommen der objektorientierten Programmierung stellte sich die Frage, wie Software designed wird. So ist es nicht verwunderlich, dass inspiriert durch das Werk „A Timeless Way of Building“ des Gebäudearchitekturtheoretikers Christopher Alexander die Idee entstand, Lösungsmuster für immer wiederkehrende Problemstellungen in der Software-Entwicklung mit einer einheitlichen Mustersprache zu beschreiben und zu kategorisieren. Im Portland Pattern Repository wurden diese Muster in einem extra dafür geschaffenen C2-WikiWikiWeb dokumentiert. So ist das erste und älteste Wiki-System entstanden. Die beiden einflussreichen Entwickler Kent Beck und Ward Cunningham riefen zu einem Austausch eine Konferenz für „Pattern Languages of Programming (PLoP)“ ins Leben.

Dort war im Oktober 1994 die Geburtsstunde des Buches „Design Patterns. Elements of Reusable Object-Oriented Software“ der Autoren Erich Gamma, Richard Helm, Ralph Johnson und John Vlissides – inzwischen nur noch als Gang of Four (GoF) abgekürzt. Die darin enthaltenen 23 Entwurfsmuster sind in die Bereiche Erzeugungsmuster, Strukturmuster und Verhaltensmuster unterteilt. Neben einem eindeutigen Namen werden der Zweck und die Struktur des Musters, Ähnlichkeiten zu verwandten Mustern und (Hinter-)Gründe für den Einsatz des Musters beschrieben. Zusätzlich wird mit einem einfachen UML-Diagramm und einem Beispielcode in C++ ihre Umsetzung beschrieben. Damit ist es relativ einfach möglich, diese Lösung bei geeigneten Randbedingungen umzusetzen.

Diese Lösungen haben auch Eingang in das Design von Programmiersprachen gefunden, so dass sich deren Namen dort in Klassen- oder Methodennamen wiederfinden (z. B. Factory-Methode, Singleton, Proxy, Bridge, Adapter, Builder, Strategy oder Facade) oder einfach nur in der Programmdokumentation ein Verweis auf die Seite mit dem Muster in der englischen Ausgabe des Buchs gemacht wird, wie z. B. „GoF:175 für das Decorator-Musters“.

Einige Muster können auch miteinander kombiniert werden. Hier finden sich in dem beliebten Test-Framework JUnit einige sehr schöne Beispiele. Wichtig bei der Erstellung von Mustern ist, dass diese nicht erfunden, sondern in bestehenden Lösungen bereits umgesetzt und gefunden werden. Außerdem sollten Muster nicht blind 1:1 übernommen werden, sondern immer für die spezifische Problemstellung angepasst werden.

Ein bekannter Klassiker ist das MVC-Muster (Model View Controller), das seit Smalltalk für das Design von Oberflächen verwendet wird. Die Viererbande hat mit ihrem Buch „Design Patterns“ nicht nur eine Flut von weiteren Musterbüchern ausgelöst, wie zur „Pattern Oriented Software Architecture“, „Analysis Patterns“ oder „Enterprise Integration Patterns“. Bei falscher oder unbedachter Anwendung der Muster kann es sogar zu negativen Effekten führen, so dass man hier von Antimustern spricht, die inzwischen als eigene Kategorie erfasst werden. Bei der großen Anzahl der Muster wird es immer schwieriger, die echten „Goldkörner“ zu finden. Trotzdem wurde mit den Entwurfsmustern eine neue Art der Abstraktion erreicht, um Software-Systeme zu entwerfen, zu strukturieren und Entwurfsentscheidungen nachvollziehbar zu dokumentieren und zu kommunizieren. Deswegen sind solche kanonisierten „Best Practices“-Musterkataloge heute, wie vor 20 Jahren, wertvoll.

Weitere Infos:
Entwurfsmuster
Patternindex

Schlagwörter: ,