Wie ist das Demeter-Gesetz auf objektorientierte Systeme mit Kopplung und Kohäsion anwendbar?
Ich las ein Buch "Softwareentwicklung und berufliche Praxis" und stieß auf das Kapitel über LoD. Ich war neugierig, wie dieses Prinzip in objektorientierten Systemen angewendet wird.
Antworten:
Nach Emerson Macedo das Gesetz von Demeter heißt es wie folgt:
Dies entspricht direkt dem Prinzip der niedrigen Kopplung, wie es die Einheiten (oder Objekte) tun sollen, ähnlich wie oben:
Eine der niedrigsten Formen der Kopplung ist die Nachrichtenübermittlung, dh die Daten werden zwischen Objekten über Methodenaufrufe mit Parametern geteilt.
Darüber hinaus entspricht das Demeter-Gesetz meines Erachtens nicht direkt dem Prinzip der hohen Kohäsion, da nur die Objekte selbst wissen sollten, über welche Daten sie selbst verfügen. Ein Objekt mit geringer Kohäsion verfügt über Datenelemente, die es in seinen eigenen Methoden nicht häufig verwendet. Es geht mehr um den Inhalt eines Objekts als um seine Beziehungen und kollaborierenden Objekte.
quelle
Kupplung, vereinfacht
Wenn ein Objekt eine Methode, eine Eigenschaft usw. eines anderen Objekts aufruft, sagen wir, dass die Objekte gekoppelt sind. Wir nennen es Kopplung, weil der Angerufene jetzt nichts an seiner eigenen Methode / Stütze ändern kann . ohne den Anrufer zu unterbrechen .
Je mehr also die Kopplungsmethoden, Requisiten. - Je schwieriger es ist, den Code eines Angerufenen zu ändern , ohne den gesamten Code zu beschädigen , der ihn verwendet.
über eine Kopplung nachdenken
Das meiste Wissen verursacht eine verrückte Kopplung
Hier haben wir eine
Employee
, die einePerson
hat, die eine "Adresse" hatUm die Straße zu bekommen muss ich nennen:
myEmployee.me.home.street
. Dies ist das 180-Grad-Gegenteil des Prinzips des geringsten Wissens. Ich muss wissen , über die Interna, die Verbundstruktur, derEmployee
,Person
undAddress
Klassen.Dieses fehlerhafte Klassendesign zwingt mich , über all diese Klassen Bescheid zu wissen , und
myEmployee.me.home.street
koppelt mich (das aufrufende Objekt) daher mit nicht weniger als 3 Klassen - um nur eine einzige Eigenschaft zu erhalten!Wenig Wissen rettet den Tag
Wenn ich nur mit der
Employee
Klasse spreche, wende ich das Prinzip des geringsten Wissens per se an. Auf diese Weise beschränken wir die Kopplung automatisch auf nur diese Klasse und isolieren gleichzeitig die Kopplung auf diese eine Klasse.Durch Hinzufügen aller benötigten Eigenschaften in der
Employee
Klasse wird die Kopplung behoben.somit
Erlaubt mir anzurufen:
myEmployee.street
-Employee
Employee
- egal wie komplex seine Struktur ist.Wenig Wissen bis zum Ende
Wir haben myEmployee von
Person
und entkoppeltAddress
, und im Idealfall sollten wir weiterhin das geringste Wissen anwenden, indem wir Pass-Through- Eigenschaften hinzufügen , mit denenEmployee
nurPerson
undPerson
nur gesprochen wirdAddress
quelle
Eine Studie ( V. Basili, L. Briand und WL Melo. Eine Validierung objektorientierter Entwurfsmetriken als Qualitätsindikatoren ) hat gezeigt, dass Klassen mit größeren Antwortmengen tendenziell mehr Fehler verursachen als Klassen mit kleineren Antwortmengen, weil mehr Antwortmengen vorliegen bedeutet die Chance einer höheren Kopplung.
Das Gesetz von Demeter hat den Wert, dass es die per Definition festgelegte Reaktion reduziert. Die Methode eines Objekts kann nur eine eigene Methode aufrufen, einen beliebigen Parameter, der an die Methode übergeben wurde, eine Methode eines von ihr erstellten Objekts und eine Methode eines direkt gehaltenen Objekts. Da der Antwortsatz kleiner ist, ist die Wahrscheinlichkeit einer hohen Kopplung geringer. Da das Modul / die Methode nur unmittelbar verfügbare Referenzen verwendet, besteht eine höhere Kohäsion.
quelle
Es ist ziemlich einfach; A hängt von B ab und B hängt von C. Ohne das Gesetz von Demeter können Sie sowohl B als auch C in A verwenden, aber indem Sie sich an dieses Gesetz halten, hängt A nur von B ab, es kann nicht von C abhängen.
Dies ermöglicht eine geringe Kopplung, da die Anzahl der Abhängigkeiten eines Moduls stark verringert wird. Der Zusammenhalt wird auf die gleiche Weise erreicht, obwohl er sich im Konzept von der Kopplung unterscheidet. Indem weniger Abhängigkeiten von einem Modul bestehen, werden diese für dieses Modul spezifischer und erhöhen so den Zusammenhalt. Außerdem wird die Gesamtzahl der Module steigen und sie werden spezialisierter, um Dinge zu tun, die auf das abhängige Modul spezialisiert sind (im Gegensatz zu Gottobjekten), was direkt zu einem kohärenteren System führt.
quelle