Demeter törvénye (Law of Demeter)
Demeter törvénye röviden úgy fogalmazható meg, hogy „ne beszélgess idegenekkel”! Ennek a törvénynek a betartásával könnyebben karbantartható és adaptálható szoftverhez jutunk, hiszen az objektumok kevésbé függnek más objektumok belső felépítésétől, ezért az objektumok felépítése sokkal könnyebben módosítható, akár a hívó szerkezetének módosítása nélkül is.
Tegyük fel, hogy az A objektum igénybe veheti a B objektum egy szolgáltatását (meghívja egy metódusát), de az A objektum nem érheti el a B objektumon keresztül egy C objektum szolgáltatásait. Ez azt jelentené, hogy az A objektumnak implicit módon a szükségesnél jobban kell ismernie a B objektum belső felépítését. A megoldás a B objektum felépítésének módosítása oly módon, hogy az A objektum közvetlenül hívja B objektumot, és a B objektum intézi a szükséges hívásokat a megfelelő alkomponensekhez. Ha a törvényt követjük, kizárólag B objektum ismeri saját belső felépítését.
Formálisan ezt azt jelenti, hogy a törvény betartása esetén egy o objektum egy m metódusa csak az alábbi objektumok metódusait hívhatja:
- magáét o-ét,
- m paramétereiét,
- bármely, m-en belül létrehozott/példányosított objektumét,
- o közvetlen kompnensobjektumaiét, illetve
- az o által az m hatáskörében hozzáférhető globális változóiét.
Másképpen ezt egypontszabályként is nevezhetnénk, hiszen amíg az o.m() hívás megfelel a törvénynek, az o.a.p() vagy éppen az o.m().p() nem (hiszen ezek az o szempontjából idegenek). Ezt a szemléletmódot fejezi ki a kutyasétáltatás analógiája is: ha sétáltatni vinnénk a kutyát, nem közvetlenül a lábainak mondjuk meg, hogy sétáljanak, hanem magának a kutyának, amely a saját felépítésének ismeretében utasítja erre a lábait. Vagyis itt egy delegáció történik.