La Ley de Demeter (LoD por las siglas en inglés) o Principio del Menor Conocimiento, es una buena práctica de diseño que busca minimizar el acoplamiento entre componentes en programación orientada a objetos.
Lo podríamos llamar Principio de Endogamia, porque favorece la relación con lo que está dentro y no lo de fuera, pero se suele asociar con la frase «No hables con extraños». Y esto es porque, a partir de ciertas reglas sencillas, lo que busca es que un objeto solo se relacione consigo mismo todo lo posible. O bien, asuma tan poco como sea posible la estructura o propiedades de cualquier otro.
Es decir, intentar que cada objeto sepa lo menos posible de otros ajenos. De ahí lo de Principio del Menor Conocimiento.
En resumen, la Ley de Demeter dice que un método M de un objeto O solo puede llamar a métodos de:
- El propio Objeto O.
- Un argumento del método. Los parámetros que recibe el método.
- Cualquier objeto creado/instanciado dentro del propio método. Es decir, las variables locales al método.
- Cualquier propiedad/campo del Objeto O.
Aunque parezca bastante enrevesado, la idea es simple: no encadenar llamadas sobre los valores de retorno de los métodos, e intentar no usar objetos ajenos.
Es decir, no llamar a métodos de los objetos devueltos por otros métodos.
Para mas información este interesante artículo de David Bock titulado «The Paperboy, The Wallet and The Law of Demeter«
Ejemplo
Por ejemplo, hay que evitar las cadenas de métodos de la forma:
objetoX.metodoDeX().metodoDeY().metodoDeZ();
Que expone el código a cambios en la clase del ObjetoX, los cambios en la clase del ObjetoY, y en la del ObjetoZ.
Además de los problemas de mantenibilidad del código, crea en la clase X una dependencia de la clase Y y Z. Esta dependencia es acoplamiento de la clase X a la estructura interna que está asumiendo de la clase Y y Z. Para usar la clase X necesitas también la Y y la Z.
Para estas llamadas se debería encapsular el acceso a las propiedades/métodos que se necesitan.
Por ejemplo, en la clase X debería existir un método que devuelva la composición:
objetoX.metodoXYZ();
Ventajas de aplicar la Ley de Demeter
Los beneficios de usar esta ley son evidentes en cuanto a la eliminación del acoplamiento, pero se usa bastante poco por la cantidad de código a generar para redirigir llamadas a componentes internos del objeto.
- Limitar el acoplamiento y dependencias entre clases.
- Código más fácil de probar.
- Código mas mantenible y robusto.
- Mas sencillo de reutilizar.
Una idea sobre “Ley de Demeter : No hables con extraños”
Thanks for your personal marvelous posting! I really enjoyed
reading it, you happen to be a great author.
I will be sure to bookmark your blog and definitely will come
back in the future. I want to encourage yourself to continue your great writing,
have a nice evening!