Prawo Demeter
Prawo Demeter (ang. Law of Demeter (LoD)) inaczej Zasada minimalnej wiedzy lub Reguła ograniczania interakcji[1] (ang. Principle of Least Knowledge) zasada projektowania oprogramowania (w szczególności projektowania w językach obiektowych), która w skrócony i nieco nieformalny sposób jest ujmowana: „rozmawiaj tylko z (bliskimi) przyjaciółmi”.
Treść
[edytuj | edytuj kod]W pełnej formie mówi ono, iż metoda danego obiektu może odwoływać się jedynie do metod należących do:
- tego samego obiektu,
- dowolnego parametru przekazanego do niej,
- dowolnego obiektu przez nią stworzonego,
- dowolnego składnika klasy, do której należy dana metoda[2].
Historia
[edytuj | edytuj kod]Prawo Demeter zostało sformułowane przez Iana Hollanda w 1987 roku na Northeastern University podczas pracy nad projektem o tej samej nazwie[3]. W roku 1988 zostało zaprezentowane na konferencji OOPSLA w wystąpieniu Karla J. Lieberherr, Ian M. Holland, Arthur J. Riel Object-Oriented Programming: An Objective Sense of Style.
Zalety
[edytuj | edytuj kod]Stosowanie prawa Demeter prowadzi do zmniejszenia zależności. Kod wywołujący daną metodę nie musi znać struktury obiektu, na rzecz którego wywołuje ją. Nie musi również wiedzieć jaki faktycznie obiekt realizuje daną operację. Dzięki temu zmiany tej struktury nie wymagają zmian klienta używającego tej metody.
Zwiększa się zatem łatwość utrzymania kodu.
Wady
[edytuj | edytuj kod]Ścisłe stosowanie prawa Demeter może prowadzić do powstania wielu metod, których jedyną odpowiedzialnością jest delegowanie wykonania operacji do składowej tego obiektu.
Ponadto może prowadzić do nadmiernego rozrastania się interfejsu obiektu, z poziomu którego dostępne są operacje.
Zobacz też
[edytuj | edytuj kod]Przypisy
[edytuj | edytuj kod]- ↑ Elisabeth Freeman: Eric Freeman, Kathy Sierra, Bert Bates: Head First Design Patterns. Gliwice: Helion, 2005, s. 289. ISBN 83-7361-792-2.
- ↑ Andrew Hunt: Pragmatyczny programista. Od czeladnika do mistrza. Warszawa: WNT, 2002, s. 160–163. ISBN 83-204-2672-3.
- ↑ Professor Karl Lieberherr: Law of Demeter. [dostęp 2010-01-02]. (ang.).