Domů » Informatika » Objektové programování » Pravidlo Deméter

Pravidlo Deméter

Projekt Deméter, pojmenovaný podle řecké bohyně obilí a plodnosti, byl zahájen na Northeastern University a věnuje se výzkumu v oblasti objektového programování. Jeho řešitelé postupně publikovali několik vědeckých článků, ze kterých mohou objektoví návrháři na celém světě čerpat užitečné rady a doporučení. Z nich je asi nejznámnější tzv. pravidlo Deméter pro metody, zkráceně též pravidlo Deméter, za kterým stojí Karl Lieberherr, Ian Holland a Arthur Riel.

Pravidlo Deméter je doporučení pro objektový návrh, které respektuje princip minimální znalosti o zbytku systému. Jedná se také o návod, jak kontrolovat, že implementace metod zbytečně nezvyšuje zatížení tříd dalšími třídami, které nejsou pro její funkci bezpodmínečně nutné. Objekt by měl činit jen minimální předpoklady o struktuře a chování objektů ostatních. Toho lze dosáhnout tak, že bude každý objekt komunikovat jen se svým nejbližšími sousedy, kde sousednost dvou objektů znamená schopnost jednoho objektu volat metody objektu druhého. Pravidlo Deméter tedy primárně slouží k zachování znovupoužitelnosti.

Formálně pravidlo Deméter říká, že metoda M objektu O může volat metody jen a pouze těchto objektů:

  • objektu O
  • parametrů metody M
  • objektů vytvořených v metodě M
  • objektů obsažených v objektu O

V systému, který dodržuje pravidlo Deméter, je o vykonání určité akce požádán kontejner, který samostatně zajistí vykonání této akce pomocí svých komponent. Dodržování tohoto pravidla zvýší udržovatelnost a adaptabilitu systému. Nevýhodou je ale přítomnost velkého množství malých „distribučních“ metod, které teoreticky mohou vést k poklesu výkonu.

zeleně jsou označené objekty, jejich metody může volat B

zeleně jsou označené objekty, jejich metody může volat C

Odvozená pravidla

Pravidlo Deméter bylo dále rozvíjeno i jinými autory, kteří přišli s vlastními výklady a dalšími podobnými pravidly. Zde je několik z nich.

  1. Požadavky na službu externího objektu by se měly nacházet v interních neveřejných metodách. To dovoluje podtřídám, aby tento požadavek mohly přetížit či změnit (toto zhruba odpovídá návrhovému vzoru Template).
  2. Kdykoliv objekt žádá o vytvoření jiného externího objektu, měl by to udělat pomocí své vlastní neveřejné metody. To umožňuje podtřídám vytvářet instance jiných typů.
  3. Veřejná metoda M třídy O by měla volat pouze metody své a metody svých nadtříd. Všechny neveřejné metody by měly dodržovat princip Deméter.

Reference