Anunciese Aquí

Registro automático

Acceder con Twitter

top articulo
twitter
facebook
Rss
jueves 25 de abril del 2024
Lea, publique artículos gratis, y comparta su conocimiento
Usuario Clave ¿Olvidó su clave?
¿Iniciar sesión automáticamente en cada visita?
Inserte su correo electronico

Ley de Demeter: Habla sólo con tus amigos

veces visto 2509 Veces vista   comentario 0 Comentarios

La Ley de Demeter, es una de esas prácticas indispensables que debe conocer y aplicar todo desarrollador de software (al menos así pienso yo).

Es una regla que nos orienta a reducir el acoplamiento de los componentes/clases/módulos de nuestros sistemas evitando que un objeto A que conoce a B, un objeto B conoce a C y A NO conoce a C entonces A NO debe poder manipular ni enviarme mensajes a C por medio de B, si lo hace incumple la Ley de Demeter, en palabras mas sencillas, significa que un método m de una clase o solo debería poder enviarle mensajes a estos tipos de objetos:

- el propio objeto o

- objetos provenientes de los parametros que recibe el metodo m

- de cualquier objeto que instancie m

- de cualquier atributo de o

Esto evita llamadas del tipo a().b().c().d() que claramente indican un problema en nuestro código.

Buscando como ejemplificar encontré el ejemplo del chico-diariero (paperBoy, parece ser un ejemplo clásico de esta ley ). El ejemplo se basa en la relación entre el Diariero y el Cliente del diario en el momento en que se quiere cobrar tan solo un diario entregado.

Veamos un ejemplo que viola la Ley de Demeter:

(aclaro que estos códigos los hice on-the-fly, no estan probados y pueden generar errores, solo son de ejemplo)

class Diariero { static protected $costoDiario = 5; public function cobrarDiario(Cliente $cliente) { return $cliente->getBilletera()->extraer(static::$c ostoDiario); } } class Cliente { protected $billetera; public function __construct() { $this->billetera = new Billetera(100); } public function getBilletera() { return $this->billetera; } }

Evidentemente la clase Diariero termina manipulando la clase Billetera sin necesidad alguna.

Un ejemplo correcto seria:

class Diariero { static protected $costoDiario = 5; public function cobrarDiario(Cliente $cliente) { return $cliente->cobrar(static::$costoDiario); } } class Cliente { protected $billetera; public function __construct($billetera) { $this->billetera = new Billetera(100); } public function cobrar($monto) { return $this->billetera()->extraer($monto); } }

En este ejemplo vemos que el método cobrar diario envía un mensaje a un objeto pasado por parámetro y el método cobrar invoca a un objeto de un atributo de su clase, ambos cumplen con la Ley de Demeter.

Desventajas

- a veces requiere escribir muchos métodos pequeños de “envoltura” (llamados a veces Demeter Transmogrifiers) para poder propagar llamadas del método a los componentes. Martin Fowler dice que sería mas correcto llamar a esta regla La sugestión de Demeter, ya que no es absoluta.

Para mas información pueden visitar:

- la web de la Ley de Demeter

- Ley de Demeter

- Introducing Demeter and its Laws

- POO – Ejemplos de la ley de Demeter

- La Ley de Demeter: definición y ejemplos

- Ley de Demeter, o del buen estilo: elegancia en POO

Fuente: mostofreddy

Clasificación: 2.3 (16 votos)
Está prohibido copiar este artículo. Artículo.org no permite la sindicación de sus artículos.
Acerca del autor

MostofreddY

¿Tiene comentarios o preguntas para el autor?
Artículos recomendados
Diseño Web para niños
Escrito por Zerep, Añadido: 01 de Mar, 2011
El diseño web para los niños es una experiencia fascinante, desafiante y gratificante, además de exasperante. Aquí se está tratando de crear una experiencia digital para personas que aún carecen de la capacidad cognitiva para entender la abstracción. En el diseño web para niños se tratando de establecer...
veces visto 2668 Veces vista:   comentarios 0 Comentarios
Pasos necesarios para ejecutar un programa en una computadora
Escrito por Carlos Pes, Añadido: 13 de Ene, 2011
Suponiendo que en el disco duro de un PC esté guardado un programa que sirva para realizar la suma de dos números enteros cualesquiera (por ejemplo, del 3 y el 5), si alguien quiere realizar una suma con dicho programa, deberá seguir, como mínimo, los siguientes cinco pasos: 1. Encender el ordenador....
veces visto 6002 Veces vista:   comentarios 0 Comentarios
Protesta de GOOGLE por acuerdo de APPLE con los programadores
Escrito por Leonel Morales, Añadido: 24 de Jun, 2010
Google dijo el miércoles 09/junio/2010 que los recientes cambios en el acuerdo entre su rival Apple y los desarrolladores de aplicaciones bloquearán las herramientas de publicidad de Google para el popular iPhone, creando barreras "artificiales" para la competencia Apple modificó la redacción del...
veces visto 1621 Veces vista:   comentarios 0 Comentarios
Introducción a PHP
Escrito por Hugo Gómez, Añadido: 22 de Abr, 2010
¿Qué es PHP? PHP significa “PHP: Hypertext Preprocessor”. PHP es un lenguaje de script del lado del servidor para crear páginas Web dinámicas. Crear scripts PHP para realizar un seguimiento de las actividades de los visitantes en el sitio, enviar correos electrónicos a los clientes, que los usuarios...
veces visto 3405 Veces vista:   comentarios 0 Comentarios
Pasos fundamentales para comenzar a programar
Escrito por Javi Pizarro , Añadido: 17 de Mar, 2011
Te voy a mostrar el error más común que comenten el 90% de las personas que deciden aprender a programar. Si tú eres capaz de evitar este error y enfocar tus energías a lo que te voy a proponer, vas a ser capaz de dar tus primeros pasos para programar y de ponerte en acción sin dudarlo y sin...
veces visto 2965 Veces vista:   comentarios 0 Comentarios