Metapatterns

 

"We introduce the term metapatterns for a set of design patterns that describes how to construct frameworks independent of a specific domain."

[Pree, 1994]

Die Metapatterns nach Wolfang Pree können, wie die Entwurfsmuster nach Gamma et al., für die Konstruktion von Frameworks eingesetzt werden. Im Unterschied zum zuvor vorgestellten Entwurfsmusterkatalog, wird hier noch mehr Wert auf Anwendungsunabhängigkeit gelegt. Pree erkennt die Entwurfsmuster nach Gamma et al. als zu Anwendungsbezogen. Anwendungsbezogene Entwurfsmuster werden von ihm als framework example desing pattern bezeichnet, zu denen ein Großteil der Gamma Entwurfsmuster zählen sollen.

Pree faßt die in den Entwurfsmustern enthaltenen Konzepte zur Objektinteraktion zu sieben Mustern zusammen, den sogenannten Metapatterns. Die sieben Metapattern dienen somit zur Konstruktion und Beschreibung der zuvor dargestellten Entwurfsmuster und sollen diese auf einer anderen Beschreibungsebene ergänzen. "... metapatterns turn out to be an elegant and powerful approach that can be applied to categorize and describe any framework example design pattern on a metalevel." [Pree, 1994, S. 105]

Besonders intensiv befaßt sich Pree mit dem dynamischen Verbinden von Klassen ( composition metapattern ) oder Muster zum Entwurf von Schnittstellen und Interaktionen. Solche Strukturen treten im Entwurfsmusterkatalog nach Gamma et al. immer wieder auf, wie z.B. im bereits erwähnten Strategy Muster im Abschnitt 3.4, wo es um die dynamische Bindung verschiedener Algorithmen geht. Bei der Entwicklung von Frameworks dienen diese Strukturen dazu die benötigten Brücken zwischen den vorgegebenen Bereichen und den variablen, benutzerdefinierten Bereichen zu schlagen. Im folgenden wird das 1:N Connection Metapattern kurz vorgestellt.

1:N Connection metapattern

Das Metapattern 1:N Connection basiert auf zwei Klassen, der Template -Klasse und der Hook -Klasse (siehe Abbildung 18). Eine Template -Klasse enthält Methoden, die beispielsweise einen Algorithmus in Form von abstrakten Operationen definieren der auf verschiedenen Datentypen arbeiten kann.

Abbildung 18: Metapattern 1:N Connection

Eine Hook -Klasse enthält dann die Methoden mit denen konkret der Algorithmus für einen bestimmten Datentyp implementiert werden kann, d.h.eine Hook -Klasse parameterisiert eine Templateklasse. Beim 1:N Connection Metapattern werden N Hook -Klassen mit genau einer Template -Klasse verbunden.

Abbildung 19: Anwendung des Metapatterns 1:N Connection

Die Metapattern können als eine Art wiederverwendbarer Verbindungsstrukturen innerhalb von objektorientierten Softwarearchitekturen allgemeiner Art angesehen werden. Dies sind Vorlagen für häufig auftretende und meist nicht triviale Probleme der Objektinteraktion. Mit ihnen können umfangreiche Softwarearchitekturen zusammengesetzt werden. Allerdings sind sie nicht so intuitiv wie andere Entwurfsmuster. Da sie grundsätzlich in keinen speziellen Anwendungskontext stehen, ist ihre Verwendungsmöglichkeit nicht immer direkt einzusehen. Daher werden die Metapattern bei Pree im Rahmen der Entwurfsmuster nach Gamma angewendet. Das Metapattern 1:N Connection wird im Zusammenhang mit dem Publisher/Subscriber bzw. Observer Entwurfsmuster verwendet [Gamma, 1995]. Abbildung 19 stellt dar, wie es mit den Klassen und Methoden des Entwurfsmusters zusammenarbeitet.

Metapatterns finden Anwendung in anderen, spezielleren Entwurfsmustern bzw.in Frameworks. Somit tragen sie dazu bei gute und wiederverwendbare Frameworks und Softwarearchitekturen zu erstellen. Aufgrund der häufig geringen anwenderspezifischen Anpassungen bei der Verwendung von Frameworks, ist der Gewinn durch die Wiederverwendung relativ hoch zu bewerten.