Clean Code
Kommentare

Grundprinzip: Tell, dont ask (TDA)
In ihrem Artikel „Tell, don’t ask“ beschreiben die „Pragmatic Programmers“ [7] Dave Thomas und Andy Hunt ein Prinzip, das zu besserem Code führt: „Procedural code gets

Grundprinzip: Tell, dont ask (TDA)

In ihrem Artikel „Tell, don’t ask“ beschreiben die „Pragmatic Programmers“ [7] Dave Thomas und Andy Hunt ein Prinzip, das zu besserem Code führt: „Procedural code gets information then makes decisions. Object-oriented code tells objects to do things.“ – Objekte sollten also etwas tun und nicht nach ihrem (internen) Zustand gefragt werden. Ein Aufrufer interessiert sich für die Details eines Objektes – und die Logik und die Entscheidungen, die dieser Aufrufer außerhalb des Objekts implementiert, sind vermutlich eher in der Verantwortung des Objekts, dem das Interesse gilt. Das hier beschriebene Aufbrechen der Kapselung erhöht die Kopplung zwischen Klassen. Bei TDA geht es jedoch darum, dass Objekte so entworfen werden, dass sie sich um ihre eigenen Verantwortungen kümmern, also „etwas tun sollen“ und nicht bloß Auskunft über ihre Variablen erteilen. Anders ausgedrückt sollten Objekte so wenig wie möglich ihres Zustands nach außen exponieren (nur wenige „Getter“-Methoden haben).

Grundprinzip: Gesetz von Demeter

Es gibt eine unter dem Gesetz von Demeter bekannte Heuristik, die besagt, dass ein Modul nichts über die inneren Gegebenheiten der Objekte wissen soll, die es manipuliert, oder etwas einfacher ausgedrückt, eine Methode sollte nur mit „Freunden“ und nicht mit „Fremden“ sprechen. Ein Kundenobjekt, das zum Beispiel seine sortierte Liste von Aufträgen über einen Getter exponiert, erlaubt es, diese Liste über


CustomerObject.getContracts().add(…)

zu manipulieren. Das ist eine Verletzung dieses Gesetzes und erhöht die Kopplung. Die richtige Lösung wäre es, die zum Hinzufügen von Elementen nötige Funktion als Methode in der Kundenklasse anzubieten. Konkret besagt das Gesetz von Demeter, dass eine Methode m einer Klasse C nur folgende Methoden aufrufen darf:

  • Methoden der eigenen Klasse (also von C selbst)
  • Methoden von in m selbst erzeugten Objekten
  • Methoden von Objekten, die als Parameter in m übergeben wurden
  • Methoden von Objekten, die als Instanzvariablen in C gehalten werden

Es sollte keine Methode von Objekten aufgerufen werden, die von irgendeinem der erlaubten Aufrufe als Rückgabewert zurückgegeben werden. In der Praxis bewährt sich dieses Gesetz zur Vermeidung von hoher Kopplung. Im durchschnittlichen Code einer Klasse taucht an vielen Stellen eine Verletzung dieses Gesetzes auf. Wenn man sich daran hält und den Code entsprechend oft refaktorisiert, dann wird die Kopplung zwischen Klassen deutlich sinken, was auch die Änderbarkeit des Codes deutlich erhöht.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -