Ley de Démeter - Tensho97/Aprende-a-Aprender GitHub Wiki
La Ley de Démeter es un principio básico de la programación orientada a objetos.
Formalmente, la Ley de Demeter dice que un método de un objeto solo puede llamar a métodos de:
- El propio objeto.
- Un argumento del método.
- Cualquier objeto creado dentro del método.
- Cualquier propiedad/campo directo del propio objeto.
“Habla solo con tus amigos cercanos. No hables con extraños.”
Ejemplos: Aquí vamos a ver algunos ejemplos de la ley en acción
Primer ejemplo:
public final class NetworkConnection {
public void close() {
sendShutdownMessage(); // PERMITIDO?
}
private void sendShutdownMessage() {
...
}
}
El método sendShutdownMessage()
obviamente está permitido, porque está contemplado en el punto # 1. Cualquier método puede ser llamado en el objeto actual.
Segundo ejemplo:
public final class NetworkConnection {
private Socket socket;
public void close() {
socket.close(); // PERMITIDO?
}
}
Eso también está permitido, porque está reflejado en el punto # 3 (pues socket
es una variable de instancia de esta clase).
Pero, ¿qué hay de este tercer ejemplo?
public final class NetworkConnection {
public void send(Person person) {
sendBytes(person.getName().getBytes());
sendBytes(person.getPhoto().getBytes();
...
}
}
Esto es una violación de la Ley de Démeter. El método recibe el parámetro person, por lo que se permiten todas las llamadas a métodos de este objeto. Sin embargo, llamar a cualquiera de los métodos (en este caso getBytes()
) en el objeto devuelto por cualquier método como getName()
o getPhoto()
no está permitido.
Suponiendo que los getters estándar, estos objetos ya son objetos existentes en las variables de instancia de otros objetos, por lo tanto, son exactamente el tipo de objetos a los que este método no debería tener acceso.
Beneficios de cumplir la Ley de Démeter
- Se reducen las dependencias entre clases y el acoplamiento.
- Se vuelve más sencillo reutilizar las clases.
- El código es más fácil de probar.
- El código es más mantenible, más flexible a los cambios.
Lo curioso de esta Ley es que casi nadie la usa, o al menos nunca llega a cumplirse al 100 % en la mayoría de los casos donde se intenta aplicar; ya sea por desconocimiento o porque a la larga a los programadores no les suele parecer práctica. Sin embargo, intentar seguirla podría incrementar la calidad de nuestros códigos.
Autora: Andrea