O documento discute o Princípio da Lei de Demeter, que propõe que cada unidade de software deve ter conhecimento limitado sobre outras unidades. Isso promove baixo acoplamento entre as unidades e facilita a manutenção do código. O documento apresenta um exemplo de código que viola este princípio e como refatorá-lo para seguir a lei de Demeter.
Princípio Law Of Demeter e como resolver problemas de acoplamento
1. Princípio Law Of Demeter (Lei de Demeter) Grupo: Gladson Otávio Emerson Roger
2. 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
3.
4. Cada unidade deveria falar somente com seus amigos e não com estrangeiros. Em Aspectos Gerais
11. 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)
12. //o método coletar pagamento sem atender o principio LOD public 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 nas classes dependentes: Mais resposabilidades para a classe: Problema que forte acoplamento pode causar
16. 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; }
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.
21. A atitude comum entre 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