Demeter törvénye egy szoftverfejlesztési irányelv, melyet elsősorban objektumorientált programoknál alkalmaznak. Az irányelvet az Északkeleti Egyetemen, Bostonban fogalmazták meg 1987 őszén. A lényege: „csak a közvetlen barátaiddal beszélgess”. Egy adott objektum más dolgok felépítését vagy tulajdonságait a lehető legkevésbé ismerje.

Az A objektum igénybe veheti a B objektum egy szolgáltatását (meghívja egy metódusát), de 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 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.

Kissé formálisabban O objektum M metódusa a következőket hívhatja: O-t magát M paramétereit M-en belül létrehozott/példányosított objektumokat O közvetlen komponenseit Általánosságban egy objektumnak el kell kerülnie egy meghívott objektum által visszaadott objektum metódusainak hívását, például A.x().y().

Demeter törvényét alkalmazva a szoftver sokkal karbantarthatóbb és adaptálható lesz. Mivel az objektumok kevésbé függnek más objektumok belső felépítésétől, 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.

Hátrányok

A törvény alkalmazásának egyik hátránya, hogy szükségessé teszi kis burkoló metódusok használatát, melyek továbbítják a kéréseket a megfelelő komponensekhez. Ez növelheti a belső fejlesztési időt, a tárigényt, és csökkentheti a teljesítményt.

Emellett a burkoló metódusok inverz függőségeket hozhatnak létre. Ha egy kliensnek ellenjavalljuk, hogy egy harmadik féllel kommunikáljon, és ehelyett inkább kliens-specifikus metódusokat építünk be (pl. getAsUsualPleaseForBobby()), akkor a módosított objektum fokozatosan elveszíti önálló, független jellegét. Így az elv szolgai alkalmazása egyes esetekben csak fordítottá és implicitté teszi azokat a függőségeket, amelyeket meg akart szüntetni.

Nehéz lehet eldönteni azt is, hogy egyáltalán milyen dolgokat tekintsünk az elv hatáskörébe tartozó „szolgáltatásnak”. Adat- és segédobjektumok (például egy matcher) esetében például nem beszélhetünk önálló szolgáltatásról.

Irodalom

(from this book, "Law of Demeter" is also known as "Don't talk to strangers")

További információk Simple Law of Demeter in Ruby/Rails with demeter gem Brad Appleton: “Introducing Demeter and its Laws” “Object-Oriented Programming: An Objective Sense of Style” (OOPSLA '88 Proceedings) (PDF) The Paperboy, The Wallet, and The Law Of Demeter (PDF) Phil Haack: "The Law of Demeter is not a Dot Counting Exercise" Lieber: "Phil Holland's Law of Demeter"

Kategória:Számítógép-programozás