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ść

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

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

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

Ś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ż

  • DRY
  • KISS
  • Worse is Better

Przypisy

  1. Elisabeth Freeman: Eric Freeman, Kathy Sierra, Bert Bates: Head First Design Patterns. Gliwice: Helion, 2005, s. 289. ISBN 83-7361-792-2.
  2. Andrew Hunt: Pragmatyczny programista. Od czeladnika do mistrza. Warszawa: WNT, 2002, s. 160–163. ISBN 83-204-2672-3.
  3. Professor Karl Lieberherr: Law of Demeter. [dostęp 2010-01-02]. (ang.).

Linki zewnętrzne

  • Object-Oriented Programming: An Objective Sense of Style (ang.)