- Law of Demeter
-
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
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 ausschließlich auf folgende Programm-Elemente zugreifen:
- Methoden von K selbst
- Methoden der Parameter von m
- Methoden der mit K assoziierten Objekte
- Methoden von Objekten, die m erzeugt
Beispiel
Das folgende Beispiel (in der Programmiersprache Python) verstößt gegen das Demeter-Gesetz, da die Klasse
Fahrer
indirekt über die KlasseAuto
auf eine Methode der KlasseMotor
zurückgreift:class Motor(object): def starten(self): """Den Motor starten.""" ... ... class Auto(object): def __init__(self): """Konstruktor der Klasse Auto.""" 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 KlasseMotor
delegiert:... class Auto(object): def __init__(self): """Konstruktor der Klasse Auto.""" self.motor = Motor() ... def anlassen(self): """Das Auto starten.""" self.motor.starten() ... class Fahrer(object): def fahren(self): auto = Auto() auto.anlassen() ...
Diese Lösung hat den Vorteil, dass nun die
anlassen
-Methode beliebig ergänzt werden kann, ohne dass der Aufrufer Details über das Anlassen eines Autos kennen muss.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.
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.[1]
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.[2] 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.
Einzelnachweise
- ↑ Karl J. Lieberherr, I. Holland: Assuring good style for object-oriented programs. In: IEEE Software. September 1989. S. 38–48 [1]
- ↑ 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
Weblinks
Wikimedia Foundation.