Páginas

terça-feira, 6 de agosto de 2013

Law of Demeter(Lei de Demeter)

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




3 comentários:

  1. parabéns! muito didático! você foi killer usando o termo: "você não pode falar com estranhos"

    ResponderExcluir
  2. Opa parabéns pelo artigo, 2 anos depois...
    Um sintoma clássico da violação dessa lei é a famosa cascatinha de alterações, vc altera uma classe e a alteração se propaga para outras camadas do software causando um aborrecimento para quem da manutenção...

    ResponderExcluir