Demeter törvénye (Law of Demeter)

Innen: Szitár-Net Wiki
A lap korábbi változatát látod, amilyen Bencsik Mátyás (vitalap | szerkesztései) 2022. január 25., 08:14-kor történt szerkesztése után volt. (Új oldal, tartalma: „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á…”)
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)
Ugrás a navigációhoz Ugrás a kereséshez

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.