<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Gesetz_von_Demeter</id>
	<title>Gesetz von Demeter - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Gesetz_von_Demeter"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Gesetz_von_Demeter&amp;action=history"/>
	<updated>2026-06-04T20:22:14Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Gesetz_von_Demeter&amp;diff=150224&amp;oldid=prev</id>
		<title>imported&gt;Chrischaaan: überflüssigen Bindestrich entfernt</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Gesetz_von_Demeter&amp;diff=150224&amp;oldid=prev"/>
		<updated>2024-01-09T06:05:44Z</updated>

		<summary type="html">&lt;p&gt;überflüssigen Bindestrich entfernt&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Das &amp;#039;&amp;#039;&amp;#039;Gesetz von Demeter&amp;#039;&amp;#039;&amp;#039; ({{enS|&amp;#039;&amp;#039;Law of Demeter&amp;#039;&amp;#039;}}, kurz &amp;#039;&amp;#039;LoD&amp;#039;&amp;#039;) ist eine Entwurfsrichtlinie in der [[Objektorientierung|objektorientierten]] [[Softwareentwicklung]]. Sie besagt im Wesentlichen, dass [[Objekt (Programmierung)|Objekte]] nur mit Objekten in ihrer unmittelbaren Umgebung kommunizieren sollen. Dadurch soll die [[Kopplung (Softwareentwicklung)|Kopplung]] (das heißt die Anzahl von Abhängigkeiten) in einem Softwaresystem verringert und somit die [[Wartbarkeit (Software)|Wartbarkeit]] erhöht werden. Es wird deswegen manchmal auch als „Prinzip der Verschwiegenheit“ bezeichnet.&lt;br /&gt;
&lt;br /&gt;
== Geschichte ==&lt;br /&gt;
Die Richtlinie wurde 1987 an der [[Northeastern University]] in [[Boston]] vorgeschlagen. Der Name geht auf das &amp;#039;&amp;#039;Demeter-Projekt&amp;#039;&amp;#039; 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 &amp;#039;&amp;#039;Demeter&amp;#039;&amp;#039; – in der griechischen Mythologie eine 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.&amp;lt;ref&amp;gt;{{Internetquelle |url=http://www.ccs.neu.edu/home/lieber/what-is-demeter.html |sprache=en |titel=What is Demeter? |zugriff=2009-12-30 |zitat=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 &amp;quot;Law of Demeter&amp;quot; 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.}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Gesetz wurde von &amp;#039;&amp;#039;Karl J. Lieberherr&amp;#039;&amp;#039; und &amp;#039;&amp;#039;Ian Holland&amp;#039;&amp;#039; 1989 im Paper &amp;#039;&amp;#039;Assuring Good Style for Object-Oriented Programs&amp;#039;&amp;#039; detailliert erläutert.&amp;lt;ref&amp;gt;{{Literatur |Autor=Karl J. Lieberherr, I. Holland |Titel=Assuring good style for object-oriented programs |Sammelwerk=IEEE Software |Datum= |Seiten=38–48 |Online=http://citeseer.ist.psu.edu/lieberherr89assuring.html |Abruf=2010-02-27}}&amp;lt;/ref&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
== Beschreibung ==&lt;br /&gt;
Die Richtlinie kann umgangssprachlich zu der Aussage „Sprich nur zu deinen nächsten Freunden“ zusammengefasst werden. Man spricht in diesem Zusammenhang auch von &amp;#039;&amp;#039;schüchternem Code&amp;#039;&amp;#039;. „Schüchterner Code“ schickt so wenige Nachrichten wie möglich an andere Codeteile. Formal ausgedrückt soll eine Methode &amp;#039;&amp;#039;m&amp;#039;&amp;#039; einer Klasse &amp;#039;&amp;#039;K&amp;#039;&amp;#039; ausschließlich auf folgende Programm-Elemente zugreifen:&lt;br /&gt;
* Methoden von &amp;#039;&amp;#039;K&amp;#039;&amp;#039; selbst&lt;br /&gt;
* Methoden von Objekten, die als Parameter an &amp;#039;&amp;#039;m übergeben werden&amp;#039;&amp;#039;&lt;br /&gt;
* Methoden von Objekten, die in Instanzvariablen von &amp;#039;&amp;#039;K&amp;#039;&amp;#039; abgelegt sind&lt;br /&gt;
* Methoden von Objekten, die &amp;#039;&amp;#039;m&amp;#039;&amp;#039; erzeugt&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
Das folgende Beispiel (in [[Java (Programmiersprache)|Java]]) verstößt gegen das Demeter-Gesetz, da die Klasse &amp;lt;code&amp;gt;Fahrer&amp;lt;/code&amp;gt; indirekt über die Klasse &amp;lt;code&amp;gt;Auto&amp;lt;/code&amp;gt; auf eine Methode der Klasse &amp;lt;code&amp;gt;Motor&amp;lt;/code&amp;gt; zurückgreift:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
class Motor {&lt;br /&gt;
    public void anlassen() {&lt;br /&gt;
        // den Motor starten.&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class Auto {&lt;br /&gt;
    private Motor motor;&lt;br /&gt;
    public Auto() {&lt;br /&gt;
        motor = new Motor();&lt;br /&gt;
    }&lt;br /&gt;
    public Motor getMotor() {&lt;br /&gt;
        return motor;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class Fahrer {&lt;br /&gt;
    public void fahren() {&lt;br /&gt;
        Auto zuFahrendesAuto = new Auto();&lt;br /&gt;
        zuFahrendesAuto.getMotor().anlassen(); //hier wird gegen das Gesetz verstoßen&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Eine Lösung wäre hier, eine Wrapper-Methode in der Klasse &amp;lt;code&amp;gt;Auto&amp;lt;/code&amp;gt; einzuführen, welche den Aufruf an die Klasse &amp;lt;code&amp;gt;Motor&amp;lt;/code&amp;gt; [[Delegation (Softwareentwicklung)|delegiert]]:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
class Motor {&lt;br /&gt;
    public void anlassen() {&lt;br /&gt;
        // den Motor starten.&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class Auto {&lt;br /&gt;
    private Motor motor;&lt;br /&gt;
    public Auto() {&lt;br /&gt;
        motor = new Motor();&lt;br /&gt;
    }&lt;br /&gt;
    public void fahrbereitmachen() {&lt;br /&gt;
        motor.anlassen();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class Fahrer {&lt;br /&gt;
    public void fahren() {&lt;br /&gt;
        Auto zuFahrendesAuto = new Auto();&lt;br /&gt;
        zuFahrendesAuto.fahrbereitmachen();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Lösung hat den Vorteil, dass nun die &amp;lt;code&amp;gt;fahrbereitmachen&amp;lt;/code&amp;gt;-Methode beliebig modifiziert werden kann, ohne dass der Aufrufer Details darüber kennen muss. Ein Elektroauto ohne Anlasser könnte somit gleichermaßen bedient werden. Die Methode &amp;lt;code&amp;gt;getMotor()&amp;lt;/code&amp;gt; wird dann für diesen Anwendungsfall gar nicht benötigt, ist also erst einmal nicht Teil des Interfaces für ein &amp;lt;code&amp;gt;Auto&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Vor- und Nachteile ==&lt;br /&gt;
Bei Anwendung des Gesetzes von Demeter sollte sich durch die geringere Abhängigkeit ([[Kopplung (Softwareentwicklung)|Kopplung]]) der [[Objekt (Programmierung)|Objekte]] von der internen Struktur anderer Objekte eine bessere [[Wartbarkeit (Software)|Wartbarkeit]], [[Testbarkeit]] und Anpassbarkeit der Software (= wesentliche Qualitätskriterien für Software nach [[ISO/IEC 25000]]) ergeben.&lt;br /&gt;
&lt;br /&gt;
Andererseits erfordert die Anwendung häufig Vermittler-Methoden (&amp;#039;&amp;#039;Wrapper&amp;#039;&amp;#039;), was den initialen Entwicklungsaufwand erhöhen kann, sofern keine automatisierten Werkzeuge zu ihrer Erzeugung eingesetzt werden. Außerdem können Wrapper die [[Performance (Informatik)|Performance]] geringfügig verschlechtern und den Speicherverbrauch leicht erhöhen.&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.bradapp.com/docs/demeter-intro.html &amp;#039;&amp;#039;Introducing Demeter and its Laws&amp;#039;&amp;#039;]&lt;br /&gt;
* [http://www.ccs.neu.edu/home/lieber/LoD.html Law of Demeter]&lt;br /&gt;
&lt;br /&gt;
{{Navigationsleiste Prinzipien objektorientierten Designs}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Objektorientierte Programmierung]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Chrischaaan</name></author>
	</entry>
</feed>