Gesetz von Demeter

Law of Demeter (LoD) oder Grundsatz von Kleinsten Kenntnissen sind eine Designrichtlinie, um Software, besonders objektorientierte Programme zu entwickeln. In seiner allgemeinen Form ist LoD ein spezifischer Fall der losen Kopplung. Die Richtlinie wurde an der Nordöstlichen Universität zum Ende von 1987 erfunden, und kann auf eine der folgenden Weisen kurz und bündig zusammengefasst werden:

  • Jede Einheit sollte nur Kenntnisse über andere Einheiten beschränkt haben: nur mit der aktuellen Einheit "nah" verbundene Einheiten.
  • Jede Einheit sollte nur mit seinen Freunden sprechen; sprechen Sie mit Fremden nicht.
  • Sprechen Sie nur mit Ihren unmittelbaren Freunden.

Der grundsätzliche Begriff ist, dass ein gegebener Gegenstand so wenig wie möglich über die Struktur oder Eigenschaften von irgend etwas anderem (einschließlich seiner Teilelemente) annehmen sollte.

Es wird für seinen Ursprung im Demeter-Projekt, einer anpassungsfähigen Programmierung und Aspekt-orientierten Programmieraufwand so genannt. Das Projekt wurde zu Ehren von Demeter, "Vertriebsmutter" und der griechischen Göttin der Landwirtschaft genannt, um von unten nach oben Philosophie der Programmierung wichtig zu sein, die auch ins Gesetz selbst aufgenommen wird.

In der objektorientierten Programmierung

Wenn angewandt, auf objektorientierte Programme kann das Gesetz von Demeter das "Gesetz von Demeter für Funktionen/Methoden" (LoD-F) genauer genannt werden. In diesem Fall kann ein Gegenstand A um einen Dienst bitten (nennen Sie eine Methode) eines Gegenstand-Beispiels B, aber wenden ein, dass A durch nicht "reichen kann", wenden B gegen den Zugang noch ein anderer Gegenstand, C ein, um um seine Dienstleistungen zu bitten. Das Tun würde so bedeuten, dass Gegenstand implizit größere Kenntnisse des Gegenstands die innere Struktur von B verlangt.

Statt dessen sollte die Schnittstelle von B nötigenfalls modifiziert werden, so kann sie direkt dienen, wenden die Bitte von A ein, es zu irgendwelchen relevanten Teilelementen fortpflanzend. Wechselweise könnte A eine direkte Verweisung haben, um C einzuwenden und die Bitte direkt dazu zu machen. Wenn dem Gesetz gefolgt wird, wenden Sie nur ein, dass B seine eigene innere Struktur weiß.

Mehr formell verlangt das Gesetz von Demeter für Funktionen, dass eine Methode M eines Gegenstands O nur die Methoden der folgenden Arten von Gegenständen anrufen kann:

  1. O selbst
  2. Die Rahmen der M
  3. irgendwelche Gegenstände haben innerhalb der M geschaffen/realisiert
  4. Der direkte Bestandteil von O wendet ein
  5. eine globale Variable, die durch O, im Rahmen der M zugänglich
ist

Insbesondere ein Gegenstand sollte vermeiden, Methoden eines durch eine andere Methode zurückgegebenen Mitglied-Gegenstands anzurufen. Für viele hat moderner Gegenstand Sprachen orientiert, die einen Punkt als Feldbezeichner verwenden, kann das Gesetz einfach als "Gebrauch nur ein Punkt" festgesetzt werden. D. h. der Code übertritt das Gesetz, wo nicht tut. Als ein einfaches Beispiel, wenn man ein Hund spazieren gehen will, würde man den Beinen des Hunds nicht befehlen, direkt spazieren zu gehen; stattdessen befiehlt man dem Hund, der dann seinen eigenen Beinen befiehlt.

Vorteile

Der Vorteil von folgenden, die das Gesetz von Demeter ist, dass die resultierende Software dazu neigt, haltbarer und anpassungsfähig zu sein. Da Gegenstände von der inneren Struktur anderer Gegenstände weniger abhängig sind, können Gegenstand-Behälter geändert werden, ohne ihre Anrufer nachzuarbeiten.

Basili. hat experimentelle Ergebnisse veröffentlicht, 1996 dass eine niedrigere Antwort Für eine Klasse darauf hinweisend (die Zahl von

Methoden haben potenziell als Antwort auf das Benennen einer Methode dieser Klasse angerufen) kann die Wahrscheinlichkeit von Softwareprogrammfehlern reduzieren. Im Anschluss an das Gesetz von Demeter kann auf einen niedrigeren RFC hinauslaufen. Jedoch weisen die Ergebnisse auch darauf hin, dass eine Zunahme in Belasteten Methoden pro Klasse (die Zahl von Methoden, die in jeder Klasse definiert sind), die Wahrscheinlichkeit von Softwareprogrammfehlern vergrößern kann. Im Anschluss an das Gesetz von Demeter kann auch auf einen höheren WMC hinauslaufen; sieh Nachteile.

Wie man

betrachten kann, ist eine Multilayered Architektur ein systematischer Mechanismus, für das Gesetz von Demeter in einem Softwaresystem durchzuführen.

In einer layered Architektur kann der Code innerhalb jeder Schicht nur Anrufe machen, innerhalb der Schicht und des Codes innerhalb der folgenden Schicht unten zu codieren.

"Hüpfende Schicht" würde die layered Architektur verletzen.

Nachteile

Obwohl LoD die Haltbarkeit und "Anpassungsfähigkeit" eines Softwaresystems vergrößern kann, läuft es auf Notwendigkeit hinaus zu schreiben, dass viele Streifband-Methoden, Methoden fortzupflanzen, seinen Bestandteilen zurufen (der erkennbare Zeit und Raum oben hinzufügen kann).

Am Methode-Niveau führt LoD zu schmalen Schnittstellen, weil jede Methode über einen kleinen Satz von Methoden nah zusammenhängender Gegenstände wissen muss. Andererseits, am Klassenniveau, führt LoD zu breiten Schnittstellen, weil LoD verlangt, dass wir viele Hilfsmethoden einführen, anstatt direkt in die Gegenstand-Strukturen zu graben. Breite Schnittstellen für Klassen sind ein Problem, und die Lösung ist eine Aspekt-orientierte Annäherung, wo das Verhalten der Methode als ein Aspekt an einem hohen Niveau der Abstraktion angegeben wird. Wir haben noch breite Schnittstellen, aber wir führen sie durch eine Sprache, die Durchführungen angibt.

Da LoD einen spezifischen Typ der Kopplung veranschaulicht, und keine Methode angibt, diesen Typ der Kopplung zu richten, ist es als ein metrischer für den Codegeruch im Vergleich mit einer Methodik mehr passend, um lose verbundene Systeme zu bauen.

Siehe auch

  • Grundsatz von kleinstem Erstaunen

Weiterführende Literatur

  • (aus diesem Buch, "Ist das Gesetz von Demeter" auch bekannt als, "Sprechen mit Fremden" nicht)

Außenverbindungen


F. J. Robinson, der 1. Burggraf Goderich / Inspektor-Gerät
Impressum & Datenschutz