A Lei de Deméter (LoD) na programação

Matheus Barros
DEVPIRA
Published in
2 min readMay 31, 2021

Deméter, na mitologia grega foi a resonsável por revelar a agricultura para o ser humano, foi ela quem orientou sobre o cultivo de milho e do trigo. Mas este não é um artigo de mitologia.

No mundo moderno, mais precisamente no final de 1987 na Northeastem Univerity, Ian Holland e Karl Lieberherr proporam uma idéia extremamente simples que ajudaria a organizar e reduzir as dependências entre as classes.

PS: Você pode encontrar sobre a Lei de Deméter pelo nome de Principio do Menor Conhecimento.

Necessidade

Esta lei tem papel fundamental quando pensamos em escrever software de baixo acoplamento. Para escrevermos softwares que respeitem a LoD devemos sempre pensar em componentes que conheçam o mínimo possível sobre outros. Ou seja, em vez de “aprofundarmos” dentro dos componentes internos de determinado objeto devemos criar wrappers que retornem essa informação imediatamente para o seu chamadores, veja nos exemplos abaixo:

Nesta imagem, temos determinado método chamado ObterDescontos() que calculam todos os descontros de uma determinada lista de items.

Perceba que neste contexto o amigo direto da função ObterDescontos (e de sua classe) são os itens que estão armazenados dentro das listas. Porém, esta função quebra a LoD e acessa componentes internos dos Itens, como a propriedade Desconto e a propridade Total que esta dentro de Desconto, gerando um alto nivel de acoplamento.

Perceba que se algum dia a a estrutura interna da classe Item mudar para por exemplo: Item.Valores.Desconto.Total essa função (e todas as outras que dependerem desse atributo) irão quebrar.

Porém, se respeitarmos a Lei de Deméter e escrevermos um wrapper, a nossa função ObterDescontos() só conversará com seu amigo Item. Veja:

Neste caso, a função ObterDesconto() não sabe nada sobre a estrutura interna do Item, apenas sabe que, se ela quiser acessar o desconto de um item, precisa chamar o wrapper ObterDesconto() dentro do item.

Resumo

Esta lei pode ser sucintamente resumida em simples tópicos:

  • Cada unidade deve ter conhecimento limitado sobre outras unidades, somente unidades próximas se relacionam.
  • Cada unidade deve conversar apenas com amigos; Não fale com estranhos
  • Apenas fale com seus amigos imediatos.

--

--