Gesetz von Demeter

Gesetz von 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 somit die Wartbarkeit erhöht werden. Es wird deswegen manchmal auch als „Prinzip der Verschwiegenheit" bezeichnet.

Inhaltsverzeichnis

Geschichte

Die Richtlinie wurde 1987 an der Northeastern University in Boston vorgeschlagen. Der Name geht auf das Demeter-Projekt zurück, in dem die Richtlinie erstmals erkannt wurde. Dieses Projekt wurde für eine nach dem griechischen Gott Zeus benannte Hardware-Beschreibungssprache entwickelt, weshalb der Name Demeter – in der griechischen Mythologie die Schwester von Zeus – gewählt wurde. Später erst wurde die Idee beworben, dass Softwareentwicklung mehr mit dem Wachsen von Software (Demeter ist die Göttin der Landwirtschaft) und weniger mit dem Bauen von Software zu tun hat. [1]

Das Gesetz wurde von Karl J. Lieberherr und Ian Holland 1989 im Paper Assuring Good Style for Object-Oriented Programs detailliert erläutert.[2] 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.[3] 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.

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 Java) 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 {
   ...
   public void starten() {
      // den Motor starten.
      ...
   ...
 
class Auto {
   public Motor motor;
   ...
   public Auto() {
      motor = new Motor();
      ...
   ...
 
class Fahrer {
   ...
   public void fahren() {
      Auto zuFahrendesAuto = new Auto();
      zuFahrendesAuto.motor.starten(); //hier wird gegen das Gesetz verstoßen
      ...

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 {
   private Motor motor;
   ...
   public Auto() {
      motor = new Motor();
      ...
   public void anlassen() {
      motor.starten();
   ...
 
class Fahrer {
   ...
   public void fahren() {
      Auto zuFahrendesAuto = new Auto();
      zuFahrendesAuto.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 soll sich durch die geringere Abhängigkeit (Kopplung) der Objekte von der internen Struktur anderer Objekte eine bessere Wartbarkeit und Anpassbarkeit der Software ergeben.

Andererseits erfordert die Anwendung häufig Vermittler-Methoden (Wrapper), was den initialen Entwicklungsaufwand erhöhen kann, sofern keine automatisierten Werkzeuge zu ihrer Erzeugung eingesetzt werden. Außerdem können Wrapper die Performance geringfügig verschlechtern und den Speicherverbrauch leicht erhöhen.

Siehe auch

Einzelnachweise

  1. What is Demeter? abgerufen am 30. Dezember 2009 (englisch): „The Law of Demeter was developed early during the Demeter project by Ian Holland et al. and it provided the motivation for the work on Adaptive Programming. We called it "Law of Demeter" because we discovered it while working on Demeter but it is a general style rule for structure-shy programming. ... The Demeter project was named after Demeter because we were working on a hardware description language Zeus and we were looking for a tool to simplify the implementation of Zeus. We were looking for a tool name related to Zeus and we chose a sister of Zeus: Demeter. Later we promoted the idea that Demeter-style software development is about growing software as opposed to building software.“
  2. Karl J. Lieberherr, I. Holland: Assuring good style for object-oriented programs. In: IEEE Software. S. S. 38–48 (http://citeseer.ist.psu.edu/lieberherr89assuring.html, abgerufen am 27. Februar 2010).
  3. 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.

Игры ⚽ Нужно решить контрольную?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Demeter (Begriffsklärung) — Demeter bezeichnet: Demeter, eine Göttin in der griechischen Mythologie Demeter (Marke), Dachverband und Marke eines biologisch dynamischen (anthroposophischen) Landbaus Demeter (Volksstamm), ein keltisches Volk in Wales (1108) Demeter, 1929… …   Deutsch Wikipedia

  • 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… …   Deutsch Wikipedia

  • Mysterien von Eleusis — Triptolemos zwischen Demeter (links), die ihm Ähren reicht, und Persephone (rechts), die ihn segnet (Votivrelief aus Eleusis, ca. 440 430 v. Chr., Athen, Archäologisches Nationalmuseum) …   Deutsch Wikipedia

  • Liste von RTL-Sendungen — Logo des Fernsehsenders RTL Die Liste von RTL Sendungen ist eine unvollständige Zusammenstellung laufender und eingestellter Formate des Privatfernsehsenders RTL. Inhaltsverzeichnis 1 …   Deutsch Wikipedia

  • Diogenes von Sinope — (griech.: Διογένης ὁ Σινωπεύς Diogenēs ho Sinōpeus; * um 400 v. Chr. in Sinope; † 324/323 v. Chr. in Korinth) war ein griechischer Philosoph und wird mit seinem Lehrer Antisthenes als der Begründer des Kynismus beze …   Deutsch Wikipedia

  • Liste von RTL-2-Sendungen — Senderlogo von RTL 2 Die Liste von RTL 2 Sendungen enthält eine (bisher noch unvollständige) Aufzählung aller Sendungen und Serien, die bei RTL 2 ausgestrahlt werden bzw. wurden. Inhaltsverzeichnis 1 aktuelle Sendungen …   Deutsch Wikipedia

  • Prinzipien Objektorientierten Designs — sind Prinzipien welche zu gutem objektorientierten Design führen sollen. Sie wurden neben anderen von Robert C. Martin, Bertrand Meyer und Barbara Liskov publiziert und propagiert. Viele Techniken der Objektorientierung wie Entwurfsmuster, Domain …   Deutsch Wikipedia

  • Smell (Programmierung) — Unter Code Smell, kurz Smell (engl. ‚[schlechter] Geruch‘) oder deutsch übelriechender Code versteht man in der Programmierung ein Konstrukt, das eine Überarbeitung des Programm Quelltextes nahelegt. Dem Vernehmen nach stammt die Metapher… …   Deutsch Wikipedia

  • Lykosura — Die Ausgrabungsstätte von Lykosura (griechisch Λυκόσουρα (f. sg), lateinisch Lycosura) liegt nahe der arkadischen Grenze zu Messenien, unweit der Stadt Megalopolis im Lykaiongebiet. Das etwa sechs Kilometer westlich liegende Dorf… …   Deutsch Wikipedia

  • Cats — Musicaldaten Titel: Cats Originaltitel: Cats Originalsprache: Englisch …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”