image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Giovanni Rozza
Giovanni Rozza29/04/2023 21:46
Compartilhe

Vc conhece a Lei de Demeter?

  • #Java

A lei de Demeter é um princípio de programação que se concentra em reduzir o acoplamento entre objetos em um programa. Isso é alcançado através da limitação das interações entre objetos, de modo que cada objeto conheça apenas seus objetos imediatamente relacionados. Em outras palavras, um objeto deve evitar chamar métodos ou acessar propriedades de outros objetos que não estejam diretamente relacionados a ele.

Essa abordagem promove uma melhor mantenabilidade do código e torna as mudanças no programa menos propensas a causar efeitos colaterais inesperados. A Lei de Demeter é frequentemente resumida pela seguinte frase: "Só fale com seus amigos imediatos".

Por exemplo, suponha que temos um objeto "A" que possui um objeto "B", que por sua vez possui um objeto "C". Se "A" precisar acessar uma propriedade de "C", ele deve fazê-lo através de "B", em vez de chamar diretamente "C". Isso ajuda a garantir que "A" não precise conhecer todos os detalhes de "C" e evita o acoplamento desnecessário entre objetos.

A Lei de Demeter é uma técnica útil para promover a modularidade do código e tornar os programas mais fáceis de entender e manter. Além disso, pode ser usado para melhorar o desempenho do programa, reduzindo a quantidade de objetos que precisam ser criados e acessados.

Um exemplo em Java explicando o conceito está descrito abaixo:

Imagine que temos três classes: Cliente, Pedido e ItemPedido. A classe Cliente possui uma lista de pedidos, e cada pedido possui uma lista de itens. O objetivo é imprimir o nome do cliente e a quantidade total de itens em todos os pedidos dele. Em vez de acessar diretamente os itens dos pedidos de um cliente, podemos usar a Lei de Demeter para tornar o código mais modular e fácil de entender. Uma solução seria adicionar um método na classe Cliente que retorna a quantidade total de itens em seus pedidos:

public class Cliente {
  private List<Pedido> pedidos;


  public Cliente(List<Pedido> pedidos) {
      this.pedidos = pedidos;
  }


  public int getQuantidadeTotalItens() {
      int quantidadeTotal = 0;
      for (Pedido pedido : pedidos) {
          quantidadeTotal += pedido.getQuantidadeTotalItens();
      }
      return quantidadeTotal;
  }
}

Em seguida, adicionamos um método similar na classe Pedido que retorna a quantidade total de itens nele:

public class Pedido {
  private List<ItemPedido> itens;


  public Pedido(List<ItemPedido> itens) {
      this.itens = itens;
  }


  public int getQuantidadeTotalItens() {
      int quantidadeTotal = 0;
      for (ItemPedido item : itens) {
          quantidadeTotal += item.getQuantidade();
      }
      return quantidadeTotal;
  }
}

E finalmente, adicionamos o método getNome() na classe Cliente para retornar o nome do cliente:

public class Cliente {
  private String nome;
  private List<Pedido> pedidos;


  public Cliente(String nome, List<Pedido> pedidos) {
      this.nome = nome;
      this.pedidos = pedidos;
  }


  public int getQuantidadeTotalItens() {
      int quantidadeTotal = 0;
      for (Pedido pedido : pedidos) {
          quantidadeTotal += pedido.getQuantidadeTotalItens();
      }
      return quantidadeTotal;
  }


  public String getNome() {
      return nome;
  }
}

Assim, podemos imprimir o nome do cliente e a quantidade total de itens em seus pedidos da seguinte forma:

Cliente cliente = new Cliente("João", Arrays.asList(
      new Pedido(Arrays.asList(new ItemPedido(2), new ItemPedido(3))),
      new Pedido(Arrays.asList(new ItemPedido(1), new ItemPedido(5), new ItemPedido(2)))
));
System.out.println(cliente.getNome() + " - " + cliente.getQuantidadeTotalItens() + " itens");


Esse exemplo ilustra como a Lei de Demeter pode ser aplicada para tornar o código mais modular e fácil de entender.

Referências:

[1] https://www.careerfaqs.com.au/news/news-and-views/how-to-respond-to-a-confusing-email-template

[2] https://www.grammarly.com/blog/how-to-ask-for-clarification/

[3] https://learningenglish.voanews.com/a/how-to-ask-for-clarification/4726030.html

[4] https://www.infoworld.com/article/3136224/demystifying-the-law-of-demeter-principle.html

[5] https://www.youtube.com/watch?v=bxlkbS_qiXg

[6] https://medium.com/vattenfall-tech/the-law-of-demeter-by-example-fd7adbf0c324

Compartilhe
Comentários (2)
Erivelton Miranda
Erivelton Miranda - 29/04/2023 22:40

Que maravilha queria já ter esse conhecimento, pois mesmo sem saber acho uma maravilha.

Rafael Silveira
Rafael Silveira - 29/04/2023 22:05

Show de conteúdo. Eu ainda não entendo muito bem todas as colocações pois estou no início da minha jornada. Entretanto me lembrarei desta dica quando estiver capacitado para desenvolver aplicações onde essa lei Demeter possa ser aplicado. Parabéns, estarei salvando para lembrar.