Componentware/Wissen und Erfahrung wiederverwenden

Entwurfsmuster helfen die Komplexität von OO-Systemen meistern

15.12.2000
Der Einsatz von Frameworks in der kommerziellen Softwareentwicklung ist immer noch die Ausnahme. Bis heute gibt es keine allgemeinen Methoden für diesen fortschrittlichen objektorientierten Programmieransatz. Doch nun tauchen zunehmend Entwurfsmuster - die guten alten Patterns - wieder auf, um die Frameworks aktiv zu unterstützen. Alexander Scheb* führt in das Thema ein.

Je größer die Mengen und komplexen Beziehungen zwischen Klassen und Objekten werden, desto schwieriger wird es, einzelne test- und wartbare Einheiten zu isolieren. Vor diesem Hintergrund gibt es seit längerem Versuche, objektorientierte Software so zu entwerfen und zu organisieren, dass sie wieder überschaubarer, verständlicher und leichter zu warten wird. Ein immer populärer werdender Ansatz ist die Verwendung so genannter Entwurfsmuster (Patterns). Diese stellen die Abstraktion von Erfahrungswissen über die Lösung eines Problems dar, das immer wieder in leichten Abwandlungen in der Praxis vorkommt.

Ein Entwurfsmuster konzentriert sich auf die Gemeinsamkeiten einer Gruppe von Problemen und den Kern der Lösung, was die Wiederverwendung von Code-Fragmenten in neuen und bestehenden Anwendungen erheblich erleichtern soll. Anders als bei der traditionellen Programmierung geht es hier nicht um die Entwicklung einzelner Klassen eines Systems, sondern um die Konfiguration mehrerer Klassen. Vor allem bei gleichartigen und wiederkehrenden Entwurfsproblemen sollten Entwurfsmuster hinzugezogen werden. Sie dürfen allerdings nicht mit fertig implementierten Klassen oder Klassenschablonen verwechselt werden. Vielmehr beschreiben sie ein Konzept zur Implementierung von Klassen mit den Beziehungen und Abhängigkeiten untereinander, um ein grundsätzliches Problem in möglicherweise völlig unterschiedlichen Anwendungsgebieten der objektorientierten OO-Entwicklung in den Griff zu bekommen. Verwendete Datentypen und Funktionen können deshalb auch in konkreten Implementierungen völlig anders aussehen und lauten.

Entwurfsmuster werden normalerweise mit Hilfe von Pattern-Sprachen definiert. Sie enthalten wichtige Begriffe der Architektur, einschließlich bereits entwickelter Lösungsmodelle, und abstrahieren das Expertenwissen um die Lösung eines gewissen Problems, das immer wieder in leichten Abwandlungen vorkommt (Beispiele unter: http://hillside.net/patterns/EgPatterns.html). In der OO-Entwicklung sind sie Bestandteil so genannter Frameworks. Diese liefern eine wiederverwendbare, physische Architektur für ein konkretes Softwaresystem, während Entwurfsmuster logische Konzepte sind, die zur Verfeinerung der Implementierung dienen und sich für immer neue Systeme einsetzen lassen. Ein Framework enthält normalerweise verschiedene Arten von Entwurfsmustern; es kann als ein komplexes System aus kommunizierenden Mustern angesehen werden. Die Literatur unterscheidet hierbei beispielsweise zwischen "Conceptual Patterns", die sich in ihrer Beschreibung an den Konzepten und Begriffen einer Anwendungsdomäne orientieren, und "Design Patterns", die Design-Konstrukte wie beispielsweise Objekte, Klassen, Vererbung oder Aggregation nutzen. Zudem spricht man von "Programming Patterns", wenn diese mit Hilfe von Sprachkonstrukten beschrieben werden.

Es ist mittlerweile üblich, dass Entwurfsmuster bei der Dokumentation des Entwicklungsprozesses verwendet und von einigen der führenden objektorientierten Softwareentwurfsnotationen sowie durch diverse Entwicklungsumgebungen unterstützt beziehungsweise komplettiert werden. Ein erfreulicher Trend ist auch die Generierung von Sourcecode auf der Basis von Entwurfsmustern. Für die Zukunft ist zu erwarten, dass nicht die Entwicklung von Softwarekomponenten dominieren wird, sondern der Einsatz spezieller Entwurfsmuster. Für dieses Vorhaben muss aber ein gemeinsames Vokabular aller Entwurfsmuster-Bezeichnungen gefunden werden, um sie auch in anderen Softwareprojekten wiederverwenden zu können. Weil Entwurfsmuster auch das Wissen der im Betrieb beschäftigten Mitarbeiter umfassen, ist die Erweiterbarkeit unverzichtbar. Entwurfsmuster sollten für die Wiederverwendung von Code herangezogen werden, weil sie es ermöglichen, vom Wissen und den Erfahrungen anderer Leute zu profitieren. Zudem helfen sie, die Lösung primärer Entwicklungsprobleme zu erleichtern und sorgen für einen gemeinsamen Kommunikationsstandard. Wenn also ein Pattern gefunden wurde, sollte es unbedingt dokumentiert werden, um ihn anderen Entwicklern verfügbar zu machen. Diese werden es ihnen später danken.

*Alexander Scheb ist freier Entwickler und Journalist in St. Augustin.

ANGEKLICKTEntwurfsmuster sollten für die Wiederverwendung von Code herangezogen werden, weil sie es ermöglichen, vom Wissen und den Erfahrungen anderer Leute zu profitieren, Zeit und Arbeit bei der Lösung primärer Entwicklungsprobleme sparen helfen und für einen gemeinsamen Kommunikationsstandard sorgen. Als Teil von Frameworks halten sie das abstrahierte Erfahrungswissen der Entwickler über die Lösung eines Problems fest, das immer wieder in leichten Abwandlungen in der Praxis vorkommt.

Informationen- Doug Lea: "Patterns-Discussion FAQ" http://g.oswego.edu/dl/pd-FAQ/pd-FAQ.html

- Doug Lea: "Christopher Alexander: An Introduction for Object-Oriented Designers" http://gee.cs.oswego.edu/dl/ca/ca/ca.html

- Dirk Riehle und Heinz Zullighoven: "Understanding and Using Patterns in Software Development" http://www.riehle.org/1996/TAPOS-96-Survey.html

- John Vlissides: "Patterns: The Top 10 Misconceptions" http://www.sigs.com/publications/docs/objm/9703/9703.vlissides.html

- "Pattern Definitions" http://hillside.net/patterns/definition.htm

- Steve Berczuk: "Finding solutions through pattern languages" http://world.std.com/berczuk/pubs/Dec94ieee.html

- Linda Rising: "Design Patterns: Elements of Reusable Architectures" http://www.agcs.com/techpapers/patterns.htm

- Design Patterns Tutorial http://www.csc.calpoly.edu/dbutler/tutorials/winter96/patterns

- Doug Schmidt: "Pattern Writer''s Workshop Tutorial" http://www.cs.wustl.edu/schmidt/writersworkshop.html

- Ward Cunningham: "Tips for Writing Pattern Languages" http://c2.com/cgi/wiki?TipsForWritingPatternLanguages

- Richard Gabriel: "Developing Patterns Studies" http://www.infoworld.com/cgi-bin/displayArchives.pl?dt_iwe05-97_72.htm Quelle: Brad Appleton

Abb: Die Auswahl und Verwaltung von Patterns sollte fest in die IT-Organisation integriert werden. Quelle: Scheb