empros gmbh - process & information management services
1009-chatExperience is the hardest kind of teacher.
It gives you the test first and the lesson afterward.

-Susan Ruth

Das Gesetz von Demeter

Heuristik

Um die Koppelung zwischen Objekten zu minimieren, sollten Methodenaufrufe dem Gesetz von Demeter gehorchen.

Erklärung

Das Gesetz von Demeter für Funktionen hat zum Ziel, die Koppelung zwischen Objekten zu verkleinern, indem es versucht, Sie daran zu hindern, in ein Objekt hineinzugreifen, um Zugriff auf ein drittes Objekt zu erhalten.

Das Gesetz von Demeter hilft uns, schüchternen Code zu schreiben. Schüchterner Code verrät möglichst wenig von sich und interagiert mit möglichst wenig anderen Codeelementen.

Eine Methode eines Objekts sollte nur Methoden aufrufen von:
  • sich selbst
  • Parametern der Methode
  • in der Methode erzeugten Objekten
  • Komponenten-Objekten.

Listing: Eine Demeter-konforme Klasse
public class Demeter {

  private A a = new A();
  private boolean isOk() { //... };

  public void exampleMethod(B b) {
    C c = new C();
    boolean d = isOk(); // eigene Methode
    b.open();           // Methode auf Parameter
    c.read();           // Methode auf erzeugtem
                        // Objekt
    a.print();          // Methode auf
                        // Komponenten Objekt
  }
}
 
Die konsequente Anwendung des Gesetz von Demeter führt zu einer Verringerung der Abhängigkeiten zwischen Modulen. Damit erhöht sich auch die Testbarkeit und die Zahl der Fehler wird gesenkt.

Vor- und Nachteile abwägen

Auch für das Gesetz von Demeter gilt: Keine Regel ohne Ausnahme. So kann es in sehr zeit-kritischen Situationen durchaus nötig sein, Module eng aneinander zu koppeln. Solange Sie sich bewusst zu diesen Schritt entschliessen, ist das kein Problem sondern eine Entscheidung, eine Qualitätsanforderung (Flexibilität und Wartbarkeit) zu Gunsten einer höher gewichteten Qualitätsanforderung (Geschwindigkeit) aufzugeben.