Gesetz von Demeter
aus Wikipedia, der freien Enzyklopädie
Das Gesetz von Demeter (englisch: Law of Demeter, kurz: LoD) ist eine Entwurfs-Richtlinie in der objektorientierten Softwareentwicklung. Sie besagt im Wesentlichen, dass Objekte nur mit Objekten in ihrer unmittelbaren Umgebung kommunizieren sollen. Dadurch soll die Kopplung (das heißt die Anzahl von Abhängigkeiten) in einem Softwaresystem verringert und dadurch die Wartbarkeit erhöht werden.
Inhaltsverzeichnis |
[Bearbeiten] Beschreibung
Die Richtlinie kann umgangssprachlich zu der Aussage „Sprich nur zu deinen nächsten Freunden“ zusammengefasst werden. Man spricht in diesem Zusammenhang auch von schüchternem Code. Schüchterner Code schickt so wenige Nachrichten wie möglich an andere Codeteile. Formal ausgedrückt soll eine Methode m() einer Klasse K nur Methoden der folgenden Klassen verwenden:
- Methoden von K selbst
- Methoden der Parametertypen von m()
- Methoden der mit K assoziierten Klassen
- Methoden von Klassen-Instanzen, die m() erzeugt
[Bearbeiten] Beispiel
Das folgende Beispiel verstößt gegen das Demeter-Gesetz, da die Klasse Fahrer
indirekt über die Klasse Auto
auf eine Methode der Klasse Motor
zurückgreift:
class Motor(object): def starten(self): """Den Motor starten.""" ... ... class Auto(object): def __init__(self): self.motor = Motor() ... ... class Fahrer(object): def fahren(self): auto = Auto() auto.motor.starten() ...
Eine Lösung wäre hier, eine Wrapper-Methode in der Klasse Auto
einzuführen, welche den Aufruf an die Klasse Motor
delegiert:
... class Auto(object): def __init__(self): self.motor = Motor() ... def anlassen(self): """Das Auto starten.""" self.motor.starten() ... class Fahrer(object): def fahren(self): auto = Auto() auto.anlassen() ...
[Bearbeiten] Vor- und Nachteile
Bei Anwendung des Gesetzes von Demeter ergibt sich in der Regel eine bessere Wartbarkeit und Anpassbarkeit der Software, durch die geringere Abhängigkeit (Kopplung) der Objekte von der internen Struktur anderer Objekte.
Als Nachteil kann vermerkt werden, dass die Anwendung häufig Vermittler-Methoden (Wrapper) erfordert, was den initialen Entwicklungsaufwand ebenso wie die Performance der Anwendung negativ beeinflussen kann. Um diese Probleme im Griff zu behalten, können Werkzeuge zur Automatisierung des Vorgehens verwendet werden.
[Bearbeiten] Geschichte
Die Richtlinie wurde 1987 an der Northeastern University in Boston vorgeschlagen. Der Name geht auf das Demeter-Projekt zurück, in dem das so genannte Gesetz angewandt wurde. Das Gesetz wurde von Karl J. Lieberherr und Ian Holland 1989 im Paper Assuring Good Style for Object-Oriented Programs detailliert erläutert.
In einer Studie von Basili et al wurden 1996 experimentelle Ergebnisse vorgestellt, die nahelegen, dass die Anwendung des LoD ein wirksamer Weg zur Vermeidung von Softwarefehlern ist. Durch die formale Spezifikation ist die Verwendung als Softwaremetrik möglich. Es bietet sich somit ein Einsatz des LoD zur Früherkennung von Wartungsproblemen an.
[Bearbeiten] Literatur
- V. Basili, L. Briand, W. L. Melo: A Validation of Object-Oriented Design Metrics as Quality Indicators. In: IEEE Transactions on Software Engineering. Band 22, Nummer 10. Oktober 1996. S. 751–761
- Karl J. Lieberherr, I. Holland: Assuring good style for object-oriented programs. In: IEEE Software. September 1989. S. 38–48 [1]