Jak stosuje się Prawo Demetera do systemów obiektowych ze sprzężeniem i kohezją?
Czytałem książkę „Rozwój oprogramowania i praktyka zawodowa” i natknąłem się na rozdział o LoD i byłem ciekawy, w jaki sposób zasada ta jest stosowana w systemach obiektowych.
Odpowiedzi:
Według Emerson Macedo Prawo Demeter stwierdza co następuje:
Odpowiada to bezpośrednio zasadzie niskiego sprzężenia, jak mają to robić jednostki (lub obiekty), podobnie jak powyżej:
Jedną z najniższych form sprzężenia jest przekazywanie wiadomości, tzn. Dane są dzielone między obiektami poprzez wywołania metod z parametrami.
Co więcej, z tego, co widzę, prawo Demetera nie odpowiada bezpośrednio zasadzie wysokiej spójności, ponieważ stwierdza tylko, że same obiekty powinny wiedzieć, jakie dane same posiadają. Obiekt o niskiej spójności ma elementy danych, których nie używa często we własnych metodach. Chodzi bardziej o zawartość obiektu niż o jego relacje i obiekty współpracujące.
źródło
Łączenie, uproszczone
Kiedy obiekt wywołuje metodę, właściwość itp. Innego obiektu, mówimy, że obiekty są sprzężone. Nazywamy to sprzężenie bo teraz wywoływany nie może zmienić nic o swoją własną metodę / propan. w. przerwanie dzwoniącego .
Zatem im bardziej metody sprzęgania, rekwizyty. - tym trudniej jest zmienić kod odbiorcy bez zerwania całego kodu, który go używa.
rozważanie sprzężenia
Większość Wiedzy powoduje szalone połączenie
Tutaj mamy coś
Employee
, coPerson
ma „adres”Aby dostać się na ulicę Muszę zadzwonić:
myEmployee.me.home.street
. Jest to 180 stopni sprzeczne z zasadą najmniejszej wiedzy. Muszę wiedzieć o wewnętrznych, struktury kompozytu, zEmployee
,Person
iAddress
klas.Ten wadliwy projekt klasy zmusza mnie do znajomości wszystkich tych klas, a zatem
myEmployee.me.home.street
łączy mnie (obiekt wywołujący) z co najmniej 3 klasami - aby uzyskać tylko jedną właściwość!Najmniejsza wiedza ratuje dzień
Jeśli mówię tylko do
Employee
klasy, stosuję zasadę najmniejszej wiedzy per se, robiąc to, automatycznie ograniczamy sprzężenie tylko do tej klasy, a jednocześnie izolujemy sprzężenie do tej jednej klasy.Dodając wszystkie potrzebne właściwości w
Employee
klasie, naprawiamy sprzęgło.a zatem
Pozwala mi dzwonić:
myEmployee.street
-Employee
Employee
- bez względu na to, jak złożona jest jego struktura.Najmniej wiedzy aż do samego końca
Oddzieliliśmy myEmployee od
Person
iAddress
, i najlepiej powinniśmy nadal stosować najmniejszą wiedzę, dodając właściwości przejścia przez takie, żeEmployee
tylko mówi sięPerson
iPerson
tylko mówiAddress
źródło
Badanie ( V. Basili, L. Briand i WL Melo. Walidacja obiektowych wskaźników projektowych jako wskaźników jakości ) wykazała, że klasy z większymi zestawami odpowiedzi mają tendencję do tworzenia większej liczby błędów niż klasy z mniejszym zestawem odpowiedzi, ponieważ większy zestaw odpowiedzi oznacza szansę na wyższe sprzężenie.
Wartość Prawa Demetera polega na tym, że zmniejsza on odpowiedź określoną z definicji. Metoda obiektu może wywoływać tylko metodę samą w sobie, dowolny parametr, który został przekazany do metody, metodę dowolnego obiektu, który stworzył i metodę dowolnego bezpośrednio trzymanego obiektu. Ponieważ zestaw odpowiedzi jest mniejszy, istnieje mniejsze prawdopodobieństwo wysokiego sprzężenia. Ponieważ moduł / metoda wykorzystuje tylko dostępne natychmiastowe odniesienia, istnieje większa spójność.
źródło
To jest dość proste; powiedzmy, że A zależy od B, a B zależy od C. Bez prawa Demetera możesz używać zarówno B, jak i C w A, ale przestrzegając tego prawa, A zależy tylko od B, nie może zależeć od C.
Umożliwia to niskie sprzężenie, ponieważ znacznie zmniejsza liczbę zależności modułu; spójność, choć różni się koncepcyjnie od sprzęgania, osiąga się w ten sam sposób. Mając mniej zależności od modułu, stają się one bardziej szczegółowe dla tego modułu, a tym samym zwiększają spójność. Również całkowita liczba modułów wzrośnie i staną się bardziej wyspecjalizowani w robieniu rzeczy specjalizowanych dla modułu zależnego (w przeciwieństwie do boskich obiektów), co bezpośrednio przekłada się na bardziej spójny system.
źródło