Princípio law of demeter
-
Upload
engenharia-de-software-agil -
Category
Technology
-
view
873 -
download
1
Transcript of Princípio law of demeter
![Page 1: Princípio law of demeter](https://reader035.fdocumentos.com/reader035/viewer/2022073117/559582341a28ab1d548b4630/html5/thumbnails/1.jpg)
(Lei de Demeter)
Grupo: Gladson Otávio
Emerson Roger
![Page 2: Princípio law of demeter](https://reader035.fdocumentos.com/reader035/viewer/2022073117/559582341a28ab1d548b4630/html5/thumbnails/2.jpg)
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.
![Page 3: Princípio law of demeter](https://reader035.fdocumentos.com/reader035/viewer/2022073117/559582341a28ab1d548b4630/html5/thumbnails/3.jpg)
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.
![Page 4: Princípio law of demeter](https://reader035.fdocumentos.com/reader035/viewer/2022073117/559582341a28ab1d548b4630/html5/thumbnails/4.jpg)
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
![Page 5: Princípio law of demeter](https://reader035.fdocumentos.com/reader035/viewer/2022073117/559582341a28ab1d548b4630/html5/thumbnails/5.jpg)
![Page 6: Princípio law of demeter](https://reader035.fdocumentos.com/reader035/viewer/2022073117/559582341a28ab1d548b4630/html5/thumbnails/6.jpg)
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.
![Page 7: Princípio law of demeter](https://reader035.fdocumentos.com/reader035/viewer/2022073117/559582341a28ab1d548b4630/html5/thumbnails/7.jpg)
// 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 ");
}}
}
![Page 8: Princípio law of demeter](https://reader035.fdocumentos.com/reader035/viewer/2022073117/559582341a28ab1d548b4630/html5/thumbnails/8.jpg)
Acoplamento indesejado:
Alterações nas classes dependentes:
Mais resposabilidades para a classe:
![Page 9: Princípio law of demeter](https://reader035.fdocumentos.com/reader035/viewer/2022073117/559582341a28ab1d548b4630/html5/thumbnails/9.jpg)
![Page 10: Princípio law of demeter](https://reader035.fdocumentos.com/reader035/viewer/2022073117/559582341a28ab1d548b4630/html5/thumbnails/10.jpg)
Como resolver esse problema?
![Page 11: Princípio law of demeter](https://reader035.fdocumentos.com/reader035/viewer/2022073117/559582341a28ab1d548b4630/html5/thumbnails/11.jpg)
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; }
![Page 12: Princípio law of demeter](https://reader035.fdocumentos.com/reader035/viewer/2022073117/559582341a28ab1d548b4630/html5/thumbnails/12.jpg)
public void coletarPagamento() {
for (Cliente cliente : clientes) {
double pagamento =cliente.getFazerPagamento(nota);
if (pagamento !=0) {
fundoColeta += pagamento;
}
}
}
![Page 13: Princípio law of demeter](https://reader035.fdocumentos.com/reader035/viewer/2022073117/559582341a28ab1d548b4630/html5/thumbnails/13.jpg)
![Page 14: Princípio law of demeter](https://reader035.fdocumentos.com/reader035/viewer/2022073117/559582341a28ab1d548b4630/html5/thumbnails/14.jpg)
Dar para aplicar o princípio para todos os projetos?
![Page 15: Princípio law of demeter](https://reader035.fdocumentos.com/reader035/viewer/2022073117/559582341a28ab1d548b4630/html5/thumbnails/15.jpg)
![Page 16: Princípio law of demeter](https://reader035.fdocumentos.com/reader035/viewer/2022073117/559582341a28ab1d548b4630/html5/thumbnails/16.jpg)
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.