(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.
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.
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 O
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.
// 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 ");
}}
}
Acoplamento indesejado:
Alterações nas classes dependentes:
Mais resposabilidades para a classe:
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; }
public void coletarPagamento() {
for (Cliente cliente : clientes) {
double pagamento =cliente.getFazerPagamento(nota);
if (pagamento !=0) {
fundoColeta += pagamento;
}
}
}
Dar para aplicar o princípio para todos os projetos?
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.