Informatik > Lexikon

Kopplung von Klassen

Unter der Kopplung von Klassen versteht man den Grad der Abhängigkeit, der zwischen zwei Klassen besteht.

Klassen sollten möglichst unabhängig voneinander sein. Um dies technisch zu ermöglichen, hat man ja auch das Prinzip der Datenkapselung (information hiding) erfunden. Wie eine Klasse intern arbeitet, kann den anderen Klassen völlig egal sein, solange sich die Klasse an die Anforderungen hält und ihre Arbeit fehlerfrei erledigt. Eine Klasse kommuniziert nur über öffentliche Methoden mit anderen Klassen, vor allem mit get- und set-Methoden.

Wird die interne Implementation einer solchen Klasse verändert, hat das für die anderen Klassen, die mit ihr zusammenarbeiten, überhaupt keine Konsequenzen. In diesem Fall liegt also eine lose Kopplung vor; jede Klasse ist weitgehend unabhängig von den anderen Klassen.

Bei einer engen Kopplung, die vermieden werden sollte, ist das nicht der Fall. Wenn die Implementation einer Klasse verändert wird, müssen eventuell auch andere Klassen neu implementiert werden. Das erhöht die Fehleranfälligkeit und den Wartungsaufwand erheblich.

Ein Beispiel für enge Kopplung

Hier ein Beispiel aus dem Unterricht für enge Kopplung zweier Klassen:

public class Kreis
{
   public xPos, yPos, radius;

   public Kreis(int x, int y, int r)
   {
      xPos = x; yPos = y; radius = r;
   }

   public void paint(Graphics g)
   {
      g.setColor(Color.BLACK);
      g.drawCircle(xPos-radius,yPos-radius,radius*2,radius*2);
   }
}

Und hier eine andere Klasse:

public class Geometrie
{
   public double umfang(Kreis k)
   {
      return 2 * 3.14159 * k.radius;
   }
}

Warum sind diese beiden Klassen eng gekoppelt?

Die Methode umfang der Klasse Geometrie greift auf das Attribut radius des Kreis-Objektes k zu. Der Programmierer von Kreis wollte sich die Arbeit etwas erleichtern und hat auf sondierende Methoden wie getRadius verzichtet. Statt dessen hat er die Attribute einfach öffentlich gemacht, was technisch natürlich überhaupt kein Problem ist und manchmal die Arbeit tatsächlich erheblich vereinfacht.

Die Klasse Geometrie ist jetzt aber darauf angewiesen, dass das Attribut für den Radius eines Kreises tatsächlich radius heißt und nicht anders. Angenommen, die Implementation von Kreis wird geändert, und statt radius heißt das Attribut jetzt einfach rad. Dann muss auch die Implementation der Klasse Geometrie verändert werden. Geometrie ist also sehr eng an Kreis gekoppelt.

Durch strenge Datenkapselung (Verwendung von sondierenden Methoden in der Klasse Kreis) hätte man diese enge Kopplung vermeiden können.

Interne Links: