Der Softwareentwickler greift bei häufig auftretenden Entwurfsproblemen auf die sogenannten Entwurfsmuster (design patterns) zurück. Entwurfsmuster bieten bereits erprobte allgemeine Lösungswege, die nur noch an das eigene, konkrete Problem angepasst werden müssen. Die Standardelemente eines Entwurfsmusters sind:
- Ein möglichst selbsterklärender Name des Musters
- Eine Problembeschreibung, die klärt, auf welche Probleme sich das Muster anwenden lässt
- Eine allgemeine Lösungsbeschreibung. Damit das Entwurfsmuster leicht wiederverwendet werden kann, ist die Lösungsbeschreibung nicht konkret, sondern abstrakt gefasst.
- Die Konsequenzen, die das Entwurfsmuster mit sich bringt. Die Vor- und Nachteile eines Musters sind insbesondere in Bezug auf die Speicher- und Zeiteffizienz interessant.
Die Entwurfsmuster haben ihre Ursprünge in der Architektur: Der Architekt Christopher Alexander beschäftigte sich bereits 1964 mit dem Konzept der Entwurfsmuster. In der Softwareentwicklung haben sie seit 1994 an Bedeutung gewonnen, als das Buch Design Patterns – Elements of Reusable Object-Oriented Software von der Gang of Four veröffentlicht wurde. Die Gang of Four, kurz GoF, ist eine unter Programmierern bekannte Gruppe bestehend aus den Informatikern Erich Gamma, Richard Helm, Ralph Johnson und John Vlissides. Die GoF stellte in ihrem Buch zahlreiche typische Muster vor.
Klassifikation von Entwurfsmustern
Entwurfsmuster lassen sich unter zwei Kriterien klassifizieren. Unter dem ersten Kriterium wird betrachtet, welche Beziehungen im Entwurfsmuster behandelt werden. Man unterscheidet zwischen klassenbasierten und objektbasierten Mustern. Erstere behandeln die Beziehungen zwischen Klassen, die durch Vererbung ausgedrückt werden und erst zur Übersetzungszeit zustande kommen. Letztere behandeln die Beziehungen zwischen Objekten. Auch hier wird das Konzept der Vererbung teilweise benutzt; Objekte können anders als Klassen zur Laufzeit geändert werden. Das zweite Kriterium ist der Aufgabenbereich eines Musters: man unterscheidet zwischen Erzeugungsmuster, Strukturmuster und Verhaltensmuster. Erzeugungsmuster (creational patterns) sollen ein System von der Erzeugung, Zusammensetzung und Repräsentation seiner Muster unabhängig machen. Die Strukturmuster (structural patterns) zielen darauf ab, Objekte und Klassen zu größeren Strukturen zusammenzusetzen. Die Verhaltensmuster (behavioral patterns) beschäftigen sich mit der Art und Weise, wie Klassen oder Objekte interagieren.
Alternative I: Die einfache Klassenbibliothek
Eine Klassenbibliothek funktioniert ähnlich wie eine richtige Bibliothek: sie beinhaltet, nach Themenschwerpunkt geordnet, verschiedene vorgeschrieben Klassen, die wiederverwendet werden können. Der Entwickler bedient sich nach eigenem Bedarf aus dem Fundus des Programmcodes. Klassenbibliotheken können unterschiedliche Topologien aufweisen. In der Baumtopologie gibt es eine Wurzelklasse, aus der alle anderen Klassen hervorgehen. Die Waldtopologie besteht aus mehreren Baumhierarchien. Bei der Bausteintopologie besteht die Klassenbibliothek aus Klassen, die voneinander unabhängig sind. Im Gegensatz zum Framework wird dem Entwickler bei einer Klassenbibliothek keine spezifische Anwendungsarchitektur aufgezwungen.
Alternative II: Frameworks
Frameworks stellen dem Entwickler eine spezialisierte Umgebung zur Lösung eines bestimmten Problems zur Verfügung. Der Zweck der Frameworks ist die Wiederverwendung von Entwürfen, im Gegensatz zur Code-Wiederverwendung der Klassenbibliotheken. Typischerweise enthält ein Framework abstrakte Klassen, aus denen der Softwareentwickler eigene Unterklassen definiert. Frameworks sind in einer konkreten Programmiersprache geschrieben. Da kein zusätzlicher Programmieraufwand entsteht, können sie sofort ausgeführt und einfach wiederverwendet werden. Ihr größter Vorteil liegt in der schnelleren Entwicklung von Programmen, wenn man auf Frameworks zurückgreifen kann. Die ähnlichen Strukturen der Programme, die mit dem gleichen Framework entwickelt wurden, vereinfachen zudem die Wartung. Ein Nachteil ist jedoch, dass man in den Anwendungsgebieten dadurch eingeengt ist, dass die Entwurfsparameter und die Architektur der Anwendung bereits festgelegt sind.
Unterschiede zwischen Entwurfsmustern und Frameworks
Entwurfsmuster und Frameworks sind sich in vielerlei Hinsicht ähnlich, unterscheiden sich jedoch gravierend in drei Punkten.
- Entwurfsmuster sind abstrakter als Frameworks. Der Programmcode in einem Muster ist nur beispielhaft und kann nicht eins zu eins übernommen werden. Der Programmcode muss bei Verwendung eines Musters neu implementiert werden.
- Frameworks sind umfangreicher als Entwurfsmuster. In einem Framework sind in der Regel mehrere Entwurfsmuster enthalten.
- Frameworks sind sehr spezialisiert – ein Entwurfsmuster dagegen ist allgemein gehalten und lässt sich auf unterschiedliche Andwendungsbereiche übertragen.