Princípio Law Of Demeter(Lei de Demeter)Grupo: Gladson Otávio            Emerson Roger
A lei de Demeter é um conjunto de regras para construir sistemas visando baixo acoplamento, também conhecida como Princípio do menor Conhecimento e Fale somente com os amigos.Princípio
Cada unidade deveria somente utilizar um conjunto limitado de unidades de outras unidades.
 Cada unidade deveria falar somente com seus amigos e não com estrangeiros. Em Aspectos Gerais
Um método M de um objeto O somente poderia acessar métodos de outros objetos que sigam as diretrizes:  Seja parâmetro de M
 Um objeto que M criou
 Um método do próprio objeto O
 Objeto diretamente relacionado com o objeto O
 Uma variável global acessível pelo objeto OEm orientação a objeto
infringindo o princípio
Dentro da classe jornaleiro, há um método chamado coletarPagamento(), cuja finalidade é coletar pagamento dos clientes, pelos produtos vendidos. Vamos analisar este método e descobrir como como ele infinge a lei de demeter.Infringindo o principio (LOD)
//o método coletar pagamento sem atender o principio LODpublic void coletarPagamento() {   for (Cliente cliente : clientes)  {if (cliente.getMinhacarteira().getValor()>= nota) {                    			       					      			cliente.getMinhacarteira().subtractValor(nota);    fundoColeta += nota;               }else {                         System.out.println("Sem dinheiro,anotar      								divida ");              }         } }
Acoplamento indesejado:Alterações nas classes dependentes:Mais resposabilidades para a classe:Problema que forte acoplamento pode causar
As dependências criada pelo método
Como resolver esse problema?
1º - Ex cluir Método getMinhacarteira() da classe Cliente.2º - Criar um método fazerPagamento() na mesma classe.public class Cliente { private String firstName;        private String lastName; private Carteira minhacarteira;// construtores {...}// metodo criado para o cliente fazer o pagamento.public double getFazerPagamento(double nota) {double valorPago = 0;        if (minhacarteira.getValor() >= nota) {            minhacarteira.subtractValor(nota);            valorPago= nota;          } return valorPago;}// get and seters{...}// public Carteira getMinhacarteira() { return minhacarteira; }

Princípio law of demeter

  • 1.
    Princípio Law OfDemeter(Lei de Demeter)Grupo: Gladson Otávio Emerson Roger
  • 2.
    A lei deDemeter é um conjunto de regras para construir sistemas visando baixo acoplamento, também conhecida como Princípio do menor Conhecimento e Fale somente com os amigos.Princípio
  • 3.
    Cada unidade deveriasomente utilizar um conjunto limitado de unidades de outras unidades.
  • 4.
    Cada unidadedeveria falar somente com seus amigos e não com estrangeiros. Em Aspectos Gerais
  • 5.
    Um método Mde um objeto O somente poderia acessar métodos de outros objetos que sigam as diretrizes: Seja parâmetro de M
  • 6.
    Um objetoque M criou
  • 7.
    Um métododo próprio objeto O
  • 8.
    Objeto diretamenterelacionado com o objeto O
  • 9.
    Uma variávelglobal acessível pelo objeto OEm orientação a objeto
  • 10.
  • 11.
    Dentro da classejornaleiro, há um método chamado coletarPagamento(), cuja finalidade é coletar pagamento dos clientes, pelos produtos vendidos. Vamos analisar este método e descobrir como como ele infinge a lei de demeter.Infringindo o principio (LOD)
  • 12.
    //o método coletarpagamento sem atender o principio LODpublic void coletarPagamento() { for (Cliente cliente : clientes) {if (cliente.getMinhacarteira().getValor()>= nota) { cliente.getMinhacarteira().subtractValor(nota); fundoColeta += nota; }else { System.out.println("Sem dinheiro,anotar divida "); } } }
  • 13.
    Acoplamento indesejado:Alterações nasclasses dependentes:Mais resposabilidades para a classe:Problema que forte acoplamento pode causar
  • 14.
  • 15.
  • 16.
    1º - Excluir Método getMinhacarteira() da classe Cliente.2º - Criar um método fazerPagamento() na mesma classe.public class Cliente { private String firstName; private String lastName; private Carteira minhacarteira;// construtores {...}// metodo criado para o cliente fazer o pagamento.public double getFazerPagamento(double nota) {double valorPago = 0; if (minhacarteira.getValor() >= nota) { minhacarteira.subtractValor(nota); valorPago= nota; } return valorPago;}// get and seters{...}// public Carteira getMinhacarteira() { return minhacarteira; }
  • 17.
    public void coletarPagamento(){ for (Cliente cliente : clientes) { double pagamento =cliente.getFazerPagamento(nota); if (pagamento !=0) {fundoColeta += pagamento; } }}3º - Alterar o método coletarPagamento() da classe jornaleiro para que ele acesse o método getFazerPagamento() da classe cliente.
  • 18.
  • 19.
    Dar para aplicaro princípio para todos os projetos?
  • 20.
    Exemplo onde oprincípio não se aplicaria:
  • 21.
    A atitude comumentre os desenvolvedores sugere que que as vezes elementos de coesão e acoplamento são teorias irreais, e acaba atrasando o trabalho. Contudo, tenho a percepção de que as qualidades positivas de coesão e acoplamento servirão para preservar a produtividade do código ao longo do tempo.Conclusão