Lose Kopplung (auf Klassenebene)

Kopplung existiert auf mehreren Ebenen von Software. Systeme können miteinander stark verwoben sein, Komponenten können von einander abhängen, und Klassen können in verschiedenen Beziehungen zueinander stehen. Kopplung beschreibt, wie stark ein Element zu anderen Elementen verbunden ist, sie benutzt oder sie kennt. Die Stärke der Bindung zwischen Elementen bestimmt:

  • Wie einfach die Elemente wiederverwendet werden können
  • Ob sich die Elemente unabhängig voneinander verändern lassen („change impact“)
  • Wie verständlich ein Element ohne Kenntnis anderer Elemente ist

Kopplung zwischen Klassen existiert und muss auch existieren, sie kann höchstens reduziert werden, um die oben aufgezählten Nachteile zu verhindern. Dafür muss verstanden werden, welche Kopplungsarten „eng“ (oder „stark“) sind, und welche „lose“. Das folgende Bild zeigt verschiedene Arten von Kopplung. Dabei sinkt der Kopplungsgrad von oben nach unten, eine Vererbung zwischen zwei Klassen ist eine stärkere Kopplung als eine Dependency.Lose Kopplung

Auf der rechten Seite des Bildes tauchen Interfaces auf, die Kopplung zu einem Interface ist schwächer als zu einer Klasse (da die Implementierung abstrahiert wird). Trotzdem ist es schwierig, die Kopplung zu Interfaces im Vergleich zur Kopplung zu Klassen zu bewerten, denn neben der Stärke der Bindung ist auch die Stabilität der Elemente zu berücksichtigen: Eine enge Kopplung zu stabilen Elementen führt zu wenig Problemen, eine lose Kopplung zu variablen Elementen kann problematischer sein. Fast jede Klasse in Java besitzt eine enge Kopplung zu java.lang.String, trotzdem führt das nicht zu Problemen, weil String eine stabile und verbreitete Klasse ist.

Lose Kopplung ist ebenfalls ein Pattern (GRASP: Low Coupling), es unterstützt Designentscheidungen, stellt aber das Ziel der losen Kopplung nicht über andere Ziele.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.