Freitag, 15. Februar 2013

Kopplung und Kohäsion - fundamentale oder abgeleitete Konzepte?

Bereits in der ursprünglichen Fassung der Konzepte in [Yourdon 1979] wird deutlich, dass es bei Kopplung und Kohäsion um Abhängigkeiten geht. 
  • Kopplung handelt von Abhängigkeiten zwischen Modulen.
  • Kohäsion handelt von Abhängigkeiten zwischen Funktionen innerhalb eines Moduls.
(Diese Terminologie folgt wohlgemerkt der des Strukturierten Designs.)

Das Ziel ist also nicht die prinzipielle Vermeidung von Abhängigkeiten, sondern die Bündelung und Verkapselung von Abhängigkeiten innerhalb eines Moduls. Was aber ist erreicht, wenn die Zahl der Abhängigkeiten hierdurch gar nicht vermindert wird? Ein vereinfachendes Beispiel:

Die Zahl der Abhängigkeiten ist in beiden Lösungen gleich, aber in Lösung 1 sind die Abhängigkeiten ausschließlich intramodular, in Lösung 2 ausschließlich intermodular. Welche Vorteile könnte die - gemäß der Forderung nach starker Kohäsion und schwacher Kopplung - bevorzugte Lösung 1 gegenüber Lösung 2 aufweisen?
  1. Jede künftige Änderung wird sich auf genau ein Modul beschränken.
  2. Künftige Änderungen betreffen potentiell nur private Elemente des Moduls und haben mit erhöhter Wahrscheinlichkeit über das Modul hinaus keine weiteren Auswirkungen.
  3. Änderungen, welche die Interaktion von Funktionen betreffen, sind potentiell leichter handhabbar als Änderungen, welche die Interaktion von Modulen betreffen.
All diese Feststellungen beziehen sich auf die Annahme künftiger Änderungen. Bereits bei der Besprechung des Single Responsibility Prinzips hatte sich die enge Verwandtschaft des Konzepts der Kohäsion mit Änderungserwartungen gezeigt. Die hier angestellte Betrachtung zeigt, dass alle durch starke Kohäsion und schwache Koppelung erreichten Vorteile mit der Erleichterung künftiger Änderungen zu tun haben. Immer geht es darum, Änderungen nur so lokal begrenzt wie möglich durchführen zu müssen.

Insofern erscheinen Kopplung und Kohäsion nur als abgeleitete Konzepte:
  • Das Prinzip der Änderungsnotwendigkeit ist der Ausgangspunkt.
  • Das Geheimnisprinzip macht die "Internalisierung" von Abhängigkeiten wirksamer, indem Änderungen lokaler Eigenschaften einfacher durchgeführt werden können als Änderungen öffentlicher Eigenschaften.
  • Das Lokalitätsprinzip stellt eine allgemeingültigere Formulierung des Konzepts der Kohäsion dar und ist insbesondere unabhängig von der Terminologie des Strukturierten Designs.

Quellen

[Yourdon 1979] -  Structured design. Fundamentals of a discipline of computer program and systems design, Yourdon, E., Constantine, L. (1979)