Warum Design Patterns für die Softwareentwicklung wichtig sind

Schon im Rahmen meiner Diplomarbeit habe ich mich mit der Pattern-Theorie von Christopher Alexander beschäftigt und diese auf die Web-Kommunikation von Unternehmen angewandt. Es hätte den Umfang der Arbeit gesprengt, detailliert auf andere als den originären Pattern-Anwendungsbereich der Architektur einzugehen – dies möchte ich nun nachholen.

Bei einer Recherche über die Pattern-Theorie und deren Anwendungsgebiete kommt man an der Softwareentwicklung nicht vorbei. Dort erfüllen Design Patterns mehrere wichtige Funktionen und dienen dazu, die Arbeit von Entwicklern zu erleichtern. Als „novice“ auf diesem Gebiet habe ich mir das Buch „Design Patterns“ der „Gang of Four“ (GoF) vorgenommen und begonnen, mich einzulesen (übrigens auch für Leute, die sich nicht mit Softwareentwicklung beschäftigen, empfehlenswert und verständlich – zumindest abschnittsweise!).

Das Buch beschäftigt sich mit „design patterns that describe simple and elegant solutions to specific problems in object-oriented software design“. Sinn und Zweck ist es, die Rolle von Design Patterns bei der Generierung und Gestaltung komplexer Systeme zu erklären. Weiters stellt die GoF auch einen Katalog von 23 Patterns zur Verfügung, welche direkt von Entwicklern einsetzbar sind. Dabei legen sie auf die Feststellung Wert, dass es sich dabei nicht um eine taxative Aufzählung handelt, sondern um eine sich ständig verändernde und weiterentwickelnde Sammlung.
Die für mich interessantesten Erkenntnisse sind folgende:

Reusability and Flexibility
Designs in der Softwareentwicklung müssen auf spezifische und aktuelle Probleme eingehen, aber auch auf zukünftige Probleme und Notwendigkeiten muss geachtet werden. Denn eine wichtige Voraussetzung für erfolgreiches Design ist, dass es „reusable and flexible“ ist.
Design Patterns benennen, erklären und bewerten wichtige und wiederkehrende Designs in der Softwareentwicklung. Es geht darum, bereits gemachte Erfahrungen in einer abstrahierten Form zur Verfügung zu stellen, die für die Menschen hilfreich und nutzenstiftend ist.

Die GoF beschreiben Design Patterns als „descriptions of communicating objects and classes that are customized to solve a general design problem in a particular context“.

Konserviertes Wissen
Design Patterns enthalten Lösungen für bereits früher aufgetauchte Probleme, die im Laufe der Zeit entwickelt wurden und auf die im betreffenden Kontext immer wieder zurückgegriffen werden kann. In den Entwurfsmustern ist schnell abrufbares Wissen konserviert; es ist nicht nötig, den Problemlösungsprozess wieder bei Null zu starten. Dabei handelt es sich häufig um implizites Wissen, welches erfahrene Softwareentwickler unbewusst bei ihrer täglichen Arbeit einsetzen. Experten sind deshalb Experten, weil sie immer wieder bereits bekannte Lösungen anwenden. Die Entwurfsmuster machen dieses Know-how explizit und beschreiben es im Detail. So sind Design Patterns vor allem für „Neulinge“ hilfreich.

Praxisbezug und Abstraktion
Prozesse der praktischen Tätigkeit der Softwareentwicklung werden durch und in Patterns abstrahiert und damit im jeweiligen Kontext allgemeingültig gemacht. Hier zeigt sich der enge Praxisbezug, welcher von großer Bedeutung in allen Anwendungsgebieten des Pattern-Konzepts ist. Meist werden aus praktischen Beispielen Gesetzmäßigkeiten oder „Regeln“ abgeleitet, detailliert beschrieben und „in die Pattern-Form gegossen“.
Viele Softwareentwickler kennen eine große Zahl an Design Patterns, allerdings nur in Form von existierenden Systemen – hier sind wir wieder beim Punkt des impliziten Wissens. Durch die Abstraktion dieses Wissens entstehen Design Patterns, die auch von Entwicklern anwendbar sind, die bisher noch keine praktischen Erfahrungen im jeweiligen Bereich gemacht haben.

Veränderung des Vokabulars
Weiters vereinfachen Design Patterns in der Softwareentwicklung die Kommunikation über fachliche Inhalte. Statt ein Problem, einen Prozess oder einen Zustand erklären zu müssen, wird einfach der Name eines spezifischen Patterns herangezogen. Teilen die Beteiligten den Sinn und die Bedeutung dieses Begriffs, teilen sie auch das Wissen darüber, was damit gemeint ist. Es ist also nicht mehr nötig, lange inhaltliche Erklärungen zu liefern – die Kommunikation wird durch die Entwurfsmuster und die ihnen immanenten Bedeutungen schneller, einfacher und weniger störungsanfällig.

„Design patterns provide a common vocabulary for designers to use to communicate, document, and explore design alternatives. Design patterns make a system seem less complex by letting you talk about it at a higher level of abstraction than that of a design notation or programming language. Design patterns raise the level at which you design and discuss design with your colleagues.“

(Hier sehe ich nebenbei bemerkt eine bedeutende Schnittstelle zur Ethnomethodologie, welche im Zusammenhang mit dem Projekt WLL für mich interessant ist.)

Patterns als Lernhilfe in der Softwareentwicklung
Wie gesagt sind Design Patterns besonders für solche Entwickler hilfreich, die noch keinen großen Erfahrungsschatz haben, da sie für häufig auftretende Designprobleme in spezifischen Kontexten konkrete Lösungen bieten. Durch die Kenntnis von Design Patterns ist es einerseits leichter, bestehende Systeme zu verstehen. Andererseits helfen die Entwurfsmuster natürlich auch bei der Entwicklung eigener Systeme. Die Reduktion von Komplexität steht hier im Vordergrund.

Erstes Fazit
Insgesamt ist dies nun mein erstes persönliches Fazit über die Funktionen von Design Patterns in der Softwareentwicklung: Wie bereits im Rahmen meiner Diplomarbeit stelle ich fest, dass Patterns eine gute Möglichkeit sind, flexible und dennoch allgemeingültige „Regeln“ zu erstellen. Durch die Abstrahierung von praktischen Gegebenheiten und Beispielen werden Patterns entwickelt, die wiederum durch ihre Anwendung Komplexität reduzieren. So können auch Anfänger auf die Erfahrungen von Profis zurückgreifen. Dies wird dadurch noch unterstützt, dass in der Softwareentwicklung keine außerordentlichen Programmierkompetenzen zur Implementierung von Patterns nötig sind. Und gegenüber Ad-hoc-Lösungen muss natürlich in der Softwareentwicklung der Vorteil der Flexibilität und Wiederverwendbarkeit von Systemen hervorgehoben werden: Durch Design Patterns werden Designs flexibler, modular (baukastenartig), wiederverwendbar und verstehbar – was auch Sinn und Zweck objektorientierter Software ist.

Literaturhinweis:
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Design Patterns. Elements of Reusable Object-Oriented Software. Addison Wesley 1995. ISBN 0-201-63361-2.

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s