This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
wiki:pd [2024/08/26 00:46] – created admin | wiki:pd [2024/08/28 23:54] (current) – admin | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Principio de la Ley de Demeter ====== | ====== Principio de la Ley de Demeter ====== | ||
+ | El nombre de este principio hace referencia a un grupo de investigación de la Northeastern University, en Boston, EE. UU. Este grupo, llamado Demeter, desarrollaba investigaciones en el área de modularización de software. A finales de la década de los 80, en una de sus investigaciones, | ||
+ | |||
+ | El Principio de Demeter — también llamado Principio del Menor Privilegio (**Principle of Least Privilege**) — sostiene que la implementación de un método solo debe invocar los siguientes otros métodos: | ||
+ | |||
+ | - De su propia clase (caso 1) | ||
+ | - De objetos pasados como parámetros (caso 2) | ||
+ | - De objetos creados por el propio método (caso 3) | ||
+ | - De atributos de la clase del método (caso 4) | ||
+ | |||
+ | **Ejemplo**: | ||
+ | |||
+ | <code java> | ||
+ | |||
+ | class PrincipioDemeter { | ||
+ | |||
+ | T1 attr; | ||
+ | |||
+ | void f1() { | ||
+ | ... | ||
+ | } | ||
+ | |||
+ | void m1(T2 p) { // método que sigue Demeter | ||
+ | f1(); // caso 1: propia clase | ||
+ | p.f2(); | ||
+ | new T3().f3(); | ||
+ | attr.f4(); | ||
+ | } | ||
+ | |||
+ | void m2(T4 p) { // método que viola Demeter | ||
+ | p.getX().getY().getZ().doSomething(); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | El método '' | ||
+ | |||
+ | Se suele decir que el Principio de Demeter recomienda que los métodos de una clase solo deben hablar con sus " | ||
+ | |||
+ | Un ejemplo — formulado por David Bock ([[https:// | ||
+ | |||
+ | <code java> | ||
+ | precio = 6.00; | ||
+ | Billetera billetera = cliente.getBilletera(); | ||
+ | if (billetera.getValorTotal() >= precio) { // viola Demeter | ||
+ | | ||
+ | } else { | ||
+ | // vuelvo mañana, para cobrar el valor del periódico | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | El repartidor tiene acceso a la billetera de su cliente — a través de '' | ||
+ | |||
+ | <code java> | ||
+ | precio = 6.00; | ||
+ | try { | ||
+ | cliente.pagar(precio); | ||
+ | } | ||
+ | catch (ExcepcionValorInsuficiente e) { | ||
+ | // vuelvo mañana, para cobrar el valor del periódico | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | En el nuevo código, el cliente no permite el acceso a su billetera. Por el contrario, el repartidor ni siquiera se entera de que el cliente tiene una billetera. Esa información está encapsulada en la clase '' |