Die Typen einer physischen Einheit sollten gemeinsam wiederverwendet werden. Wenn man einen Typ einer physischen Einheit wiederverwendet, sollte man alle Typen der physischen Einheit wiederverwenden. (Anglehnt an [Granularity1996]).Mindestens zwei Fragen sollten in diesem Zusammenhang geklärt werden:
- Inwiefern unterscheidet sich das Prinzip vom strukturellen Kohäsionsbegriff?
- Warum fordert das Prinzip, dass alle Typen wiederverwendet werden sollten?
Der strukturelle Kohäsions-Begriff
Kohäsion wird häufig formal in einer Weise definiert, die auf die Intensität der intramodularen Zusammenarbeit abzielt. Je intensiver die Teile eines Moduls zusammenarbeiten, desto enger ist offenbar ihr Zusammenhang, desto stärker ist ihre Kohäsion zu interpretieren. Diese struktuelle Form der Kohäsion kann festgestellt werden, indem die Einheit für sich genommen betrachtet wird, ohne ihre Nutzer zu kennen.Die gelb dargestellte physische Einheit enthält vier Typen, die eng zusammenarbeiten. In einem solchen Fall wäre es unstrittig, dass eine hohe strukturelle Kohäsion der Einheit vorliegt. Typische Kohäsionsmetriken würden einen hohen Kohäsionswert ausweisen. Allerdings spielt Wiederverwendung hier noch keine Rolle.
CRP = strukturelle Kohäsion?
Einige Erläuterungen von Martin deuten darauf hin, dass er eigentlich nur die strukturelle Kohäsion im Sinn hat:"Im allgemeinen arbeiten wiederverwendbare Klassen mit anderen Klassen zusammen, die Teil der wiederverwendbaren Abstraktion sind. (...) In einer solchen Komponente erwarten wir Klassen, die untereinander viele Abhängigkeiten aufweisen." [Martin2002]Wenn man das CRP streng in diesem Sinne interpretiert, hilft die Tatsache der gemeinsamen Wiederverwendung lediglich dabei, physische Einheiten aufzuspüren, die im strukturellen Sinne kohäsiv sind. Die gemeinsame Wiederverwendung ist dann kein zusätzliches Kohäsionskriterium, sondern lediglich ein Hilfsmittel. In diesem Sinne wäre das CRP allerdings kaum mehr wert als das Prinzip der hohen Kohäsion auf der Ebene physischer Einheiten.
Kohäsion durch gemeinsame Wiederverwendung
Die Frage besteht nun darin, ob Wiederverwendung als autonomes Kohäsionskriterium verwendet werden kann.Betrachtet man hier die Intensität der Zusammenarbeit innerhalb des Moduls, so erscheint die Kohäsion eher schwach. Typische Kohäsionsmetriken, die nur die Zahl der Abhängigkeiten innerhalb der Einheit messen, würden für diese Einheit einen geringen Kohäsionswert ausweisen.
Die nutzende Einheit verwendet jedoch drei der vier Typen direkt und das vierte indirekt, somit also alle Typen der physischen Einheit. Der Wortlaut des CRP besagt, dass genau diese gemeinsame Wiederverwendung aller Typen der Einheit ein starkes Argument dafür ist, die Typen auch tatsächlich zu einer physischen Einheit zusammenzufassen. Kämen weitere Nutzer hinzu, die ebenfalls alle Typen der Einheit nutzen, würde das Argument umso stärker. Die gemeinsame Wiederverwendung zeigt in diesem Sinne, dass die Teile eng zusammenhängen, obwohl sie nicht eng zusammenarbeiten. Obwohl keine strukturelle Kohäsion vorliegt, kann die Einheit doch als kohäsiv betrachtet werden.
Unklare Situationen
Nun ist die obige Situation gewissermaßen ein Idealfall, da es zum einen nur eine einzige nutzende Einheit gibt und da zum anderen diese auch tatsächlich alle Typen der genutzten Einheit direkt oder indirekt verwendet. Die folgende Situation ist nicht mehr so klar:Die obere nutzende Einheit verwendet drei von sechs Typen der benutzten Einheit. Die untere verwendet insgesamt vier Typen der benutzten Einheit (drei direkt und einen indirekt). Zudem gibt es ein Typ, der von beiden Nutzern gemeinsam wiederverwendet wird. Es wäre nun denkbar, diese Situation wie folgt aufzuteilen, um wieder mit dem CRP konform zu sein, das ja die Wiederverwendung aller Typen der Einheit fordert:
Für den Augenblick wäre das aus der Sicht des CRP gewissermaßen der ideale Zuschnitt. Sollte aber auch nur eine einzige nutzende Abhängigkeit hinzukommen oder ein weiterer Nutzer eine andere Teilmenge verwenden, müsste auch der Zuschnitt der Einheiten wieder angepasst werden. Das kann sicherlich nicht gewünscht sein. Bei Einheiten, die häufig in Teilmengen ihrer Typen wiederverwendet werden, wäre es zudem unmöglich, einen passenden Zuschnitt zu wählen, da die Schnittmengen der verschiedenen Nutzer nicht wie im obigen Beispiel disjunkt wären.
Tatsächlich hat die Nutzungsweise zahlreicher Bibliotheken genau dieses Muster der Wiederverwendung. Bibliotheken stellen oftmals eine Sammlung von Diensten zur Verfügung, die sich um ein Thema gruppieren, ohne selbst unmittelbar eng zusammenzuarbeiten. Einzelne Nutzer der Bibliothek verwenden jeweils unterschiedliche Teilmengen dieser Dienste, die nicht disjunkt sind. Welche Dienste genau von einem Nutzer verwendet werden und welche Nutzer die Bibliothek verwenden, ist oftmals eher volatil. Es erscheint daher als sinnvoll, die thematisch zusammenhängenden Dienste auch in einer gemeinsamen Einheit zur Verfügung zu stellen, da
- aus der Sicht des Nutzers die Abhängigkeit zur physischen Einheit konstant bleibt, auch wenn sich seine Nutzungsweise der Typen der Einheit ändert
- aus der Sicht der physischen Einheit der Zuschnitt nicht mit jeder geänderten Benutzung ihrer Typen angepasst werden muss.
Eine weniger absolute Fassung des Prinzips
In der absoluten Form des Prinzips, die Martin präsentiert, ist das CRP also entweder nur als Hilfsmittel zur Aufspürung hoher struktureller Kohäsion zu interpretieren, oder es ist nur auf wenige Idealfälle anwendbar, in denen tatsächlich die Nutzungsverhältnisse klar sind und auch alle Typen der physischen Einheit von jedem Nutzer verwendet werden. Ein erweiterter Kohäsionsbegriff in dem Sinne, dass Teile einer Einheit über den Umweg der Wiederverwendung eng zusammenhängen, obwohl sie nicht eng zusammenarbeiten, drückt sich in Martins Wortwahl nicht aus, obwohl der Name des Prinzips dies nahelegen würde und das Beispiel vieler Bibliotheken auch zeigt, dass hierin ein Funken Wahrheit liegt.Ich werde daher in einem folgenden Blogartikel eine andere Fassung des Prinzips vorschlagen, die dieser erweiterten Bedeutung Rechnung trägt (siehe Updated Common-Reuse Prinzip). Der vorliegende Artikel beschränkt sich auf das CRP im Rahmen der ursprünglichen Wortwahl, lediglich unter Verwendung des Begriffs der "physischen Einheit".
Katalogeintrag
Name, Kurzform | Common Reuse Prinzip |
Synonyme |
Prinzip
der gemeinsamen Wiederverwendung,
Common
Reuse Principle,
CRP |
Beschreibung | Die Typen einer physischen Einheit sollten gemeinsam wiederverwendet werden. Wenn man einen Typ einer physischen Einheit wiederverwendet, sollte man alle Typen der physischen Einheit wiederverwenden. (Anglehnt an [Granularity1996]). |
Erläuterung |
Die
obigen Ausführungen haben bereits dargelegt, dass das CRP in
folgender Weise dabei behilflich sein kann zu entscheiden, welche
Typen in eine physische Einheit aufgenommen werden sollten:
Einige Ausführungen Martins („In
einer solchen Komponente erwarten wir Klassen, die untereinander
viele Abhängigkeiten aufweisen.“
[Martin2002])
deuten darauf hin, dass er das Prinzip im Sinne von 1. versteht.
Es stellt dann nur ein zusätzliches Hilfsmittel zum Prinzip der hohen Kohäsion
dar.
Die
Interpretation im Sinne von 2. wird dadurch gestützt, dass
Martin davon ausgeht, dass ein Nutzer der physischen Einheit in
jedem Fall neu geprüft werden muss, wenn es irgendwelche
Änderungen der physischen Einheit gab – auch dann, wenn diese
nur Typen betreffen, die der Nutzer gar nicht verwendet. Er
schreibt:
„Wenn ein Package veröffentlicht wird, das nur Änderungen enthält, die mich nicht interessieren, werde ich nicht glücklich darüber sein, meine Anwendung neu überprüfen zu müssen. (…) Daher möchte ich, wenn ich von einem Package abhänge, von allen Klassen des Packages abhängen.“ [Granularity1996] |
Beispiel(e) | Siehe oben. |
Historie |
|
Art des Prinzips |
|
Grad der formalen Spezifikation |
|
Vorteile |
(1)
Hilfsprinzip für das Prinzip der hohen Kohäsion auf der Ebene
physischer Einheiten.
|
Nachteile |
a)
Als Hilfsprinzip im Sinne von (1) führt das CRP allerdings
keinerlei neue Bedeutung gegenüber dem Prinzip der hohen Kohäsion
ein.
c) Die Mehrdeutigkeit des Prinzips erschwert im Einzelfall die Diskussion. |
Übergeordnete Prinzipien | Prinzip der hohen Kohäsion |
Abgleitete Prinzipien | - |
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[Martin 2002] – Agile Software Development. Principles, Patterns, and Practices, Robert C. Martin (2002)