Law of Demeter(Lei de Demeter)
Autor: Jorge Oleques | Publicado: 2013-08-06T05:31:00-07:00


O paradigma da orientação a objetos (OO) existe a muitos anos e é utilizado em grande parte dos projetos em desenvolvimento hoje, porém até hoje encontramos dificuldades no desenvolvimento de sistemas OO. Isso se deve principalmente a falta de conhecimento sobre OO e tudo que engloba esse poderoso paradigma.



O que podemos concluir é que muitos profissionais não conhecem nada ou sabem pouco sobre OO. Mas será que a culpa é realmente deles? Na graduação onde deveríamos ver tudo sobre OO, acabamos vendo apenas os conceitos básicas como classe, atributos, herança, polimorfismo, encapsulamento e etc.. Mas isso é apenas a base para o desenvolvimento de um projeto orientado a objetos, existem ainda os princípios, leis, patterns e técnicas que merecem muito a nossa atenção.












O objetivo desse post é apresentar a “Law of Demeter”(Lei de Demeter), que foi criada em 1987 por Karl Lieberherr e Ian Holland, da Northeastem Univerity, para reduzir as dependências entre objetos, e também é conhecido como o principio do mínimo conhecimento, ou seja, “nunca converse com estranhos”.



Definição da Lei de Demeter



Para todos os métodos que estão no objeto X somente podem se comunicar com :




Métodos de X;


Parâmetros do próprio método;


Por objetos criados ou instanciados pelo próprio método;


Atributos de X;





Uma metáfora bastante usada na internet que exemplifica muito bem esse caso é a metáfora do cachorro:






“Quando você precisa que um cachorro ande, você dá a ordem para as pernas diretamente, ou para o cachorro? Obviamente que para o cachorro e este sabe o que precisa ser acionado para andar.”












Vantagens



 As vantagens do uso da Lei de Demeter são:




Diminuição das dependências (Baixo Acoplamento)


Mais fácil de manter


Mais fácil evoluir





Exemplo



Dado eu sou usuário de uma loja online,

Quando eu quero saber o total das minhas compras,

Então eu verifico no carrinho de compras.



Considere o trecho de código abaixo:

 



No exemplo apresentado acima para realizar o cálculo do valor total das compras é necessário o carrinho percorrer todos os itens e solicitando a produto qual é o seu valor, violando assim totalmente a Lei de Demeter, uma vez que, estamos fazendo uma solicitação ao produto que é um objeto que não faz parte dos argumentos do método ou membros da própria classe.

A abordagem mais correta seria: 










 

         Agora podemos verificar que nossa classe esta seguindo a lei e se comunicando apenas com objetos que ela tem o conhecimento, diminuindo assim a sua dependência (Baixo acoplamento). 



Conclusão



É logico que a lei não se refere apenas a isso, este exemplo foi apenas uma breve introdução sobre o assunto, para quem quiser se aprofundar no assunto tem alguns links nas referências, porem podemos concluir o quanto é poderosa a OO e como pequenos ajustes podem deixar nossos projetos muita mais robustos e escaláveis.


Apresentação









Referencias




http://en.wikipedia.org/wiki/Law_of_Demeter

http://www.ccs.neu.edu/research/demeter/

http://www.ccs.neu.edu/research/demeter/demeter-method/LawOfDemeter/paper-boy/demeter.pdf