- Open-Closed Principle (OCP) → Updated Open-Closed Principle (OCP')
- Liskov Substitution Principle (LSP) → Updated Substitution Principle (LSP')
Motivation
Im Rahmen der Diskussion des Common-Reuse Prinzips wurde deutlich, dass insbesondere die Forderung, dass alle Typen einer physischen Einheit wiederverwendet werden müssen, zu einer sehr eingeschränkten Anwendbarkeit des Prinzips führt. Die Problematik wird an der folgenden Situation deutlich:Die physische Einheit rechts entspricht hier nicht der Forderung des CRP, da die einzelnen Nutzer jeweils nur eine Teilmenge der Einheit verwenden. Dies ließe sich durch einen feineren Zuschnitt wie folgt beheben:
Dieser Zuschnitt ist aktuell zwar konform mit dem CRP, eine Änderung der Nutzung würde aber sofort wieder einen anderen Zuschnitt erfordern. Häufig sind zudem die konkreten Nutzer und die genutzten Teilmengen der einzelnen Nutzer zur Zeit der Gestaltung der physischen Einheit noch gar nicht bekannt. In solchen Fällen erscheint der Wortlaut des CRP zu absolut.
Muster der Wiederverwendung
Das von Martin formulierte CRP beschreibt gewissermaßen ein ideales Muster der Wiederverwendung: Alle potentiellen Nutzer verwenden (direkt oder indirekt) alle Typen der physischen Einheit. Dieses Muster lässt sich wie folgt veranschaulichen:Ein weiteres Muster, das häufig bei der Verwendung von Bibliotheken mit Utility-Charakter auftritt, sieht wie folgt aus:
Kennzeichen dieses Musters sind:
- Es gibt zahlreiche, ggf. gar unbekannt viele Nutzer.
- Diese Nutzer verwenden jeweils sehr unterschiedliche Teilmengen der physischen Einheit.
- Diese Teilmengen sind nicht notwendigerweise disjunkt.
- Keine der Teilmengen wird deutlich häufiger verwendet als irgend eine andere Teilmenge.
- Die Elemente der physischen Einheit sind strukturell nur schwach kohäsiv.
Ähnlich wie beim Utility Reuse Pattern existieren hier zahlreiche Nutzer, die sehr unterschiedliche, nicht notwendigerweise disjunkte Teilmengen der physischen Einheit verwenden. Eine dieser Teilmengen (hier rötlich eingefärbt) ist jedoch dominant, d. h. sie wird besonders häufig wiederverwendet. In einer solchen Situation wäre es angebracht, die dominante Teilmenge in eine separate physische Einheit zu verlagern:
Die obere Einheit entspricht nun dem Utility Reuse Pattern. Die untere Einheit ist leider noch nicht konform mit dem CRP, da die zwei rechten Nutzer jeweils nur ein Element der Einheit wiederverwenden. Nichtsdestotrotz profitiert insbesondere derjenige Nutzer, der nur die nichtdominanten Teile der ursprünglichen Einheit nutzte, von dieser Aufteilung, da er nun von der umfangreichen dominanten Teilmenge abgekoppelt ist. Dieses Muster ließe sich als Dominant Subset Reuse Pattern bezeichnen.
Neuformulierung des Prinzips
Vorschlag für eine allgemeine Formulierung des Prinzips:Fasst man verschiedene Typen mit dem Ziel der Wiederverwendung zu einer oder mehreren physischen Einheiten zusammen, so sollte die Granularität der physischen Einheiten so gewählt werden, dass jeder Nutzer so wenige unbenutzte Typen wie möglich über die physischen Einheiten referenziert.Versuchen wir, diese Formulierung am Beispiel der obigen Umstrukturierung nachzuvollziehen. Wir zählen dabei aus der Sicht eines jeden Nutzers die Anzahl der unbenutzten Typen.
Die oben vorgeschlagenen Muster dienen dabei der schrittweisen Identifikation der korrekten Granularität, wobei immer im Sinn behalten werden muss, dass hier nur aus der Sicht der Wiederverwendung argumentiert wird. In der Realität werden sich diese Erwägungen mit anderen Kohäsionsbetrachtungen (z. B. struktureller Kohäsion und dem Common Closure Prinzip) überschneiden:
- Man beginnt gedanklich mit einer einzigen, maximal großen Einheit.
- Rekursive Anwendung des Dominant Subset Reuse Pattern: Lässt sich in den (tatsächlichen oder erwarteten) Nutzungsmustern der Einheit die Verwendung dominanter Teilmengen identifizieren, so werden die Teilmengen in separate Einheiten verlagert.
- Ist dies nach Beendigung der Rekursion unter 2. nicht (mehr) möglich, so verbleibt eine phyische Einheit, die dem Utility Reuse Pattern entspricht.
Katalogeintrag
Name, Kurzform | Updated Common Reuse Prinzip |
Synonyme | CRP' |
Beschreibung | Fasst man verschiedene Typen mit dem Ziel der Wiederverwendung zu einer oder mehreren physischen Einheiten zusammen, so sollte die Granularität der physischen Einheiten so gewählt werden, dass jeder Nutzer so wenige unbenutzte Typen wie möglich über die physischen Einheiten referenziert. |
Erläuterung | Siehe oben. |
Beispiel(e) | Siehe oben. |
Historie |
|
Art des Prinzips |
|
Grad der formalen Spezifikation |
|
Vorteile |
|
Nachteil |
|
Übergeordnete Prinzipien | Prinzip der hohen Kohäsion |
Abgleitete Prinzipien | Common-Reuse Prinzip |
Qualitätsmerkmale | Wiederverwendbarkeit (+), Wartbarkeit (+), Änderbarkeit (+) |
Quellen
[Granularity1996] – Granularity, Robert C. Martin, in: IEEE Software. Dezember 1996, S. 4, siehe http://www.objectmentor.com/resources/articles/granularity.pdf[Wampler2007] - Aspect-Oriented Design Principles, Dean Wampler (2007), siehe http://aosd.net/2007/program/industry/I6-AspectDesignPrinciples.pdf