16
(Lei de Demeter) Grupo: Gladson Otávio Emerson Roger

Princípio law of demeter

Embed Size (px)

Citation preview

Page 1: Princípio law of demeter

(Lei de Demeter)

Grupo: Gladson Otávio

Emerson Roger

Page 2: Princípio law of demeter

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

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

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
Page 6: Princípio law of demeter

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

// 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

Acoplamento indesejado:

Alterações nas classes dependentes:

Mais resposabilidades para a classe:

Page 9: Princípio law of demeter
Page 10: Princípio law of demeter

Como resolver esse problema?

Page 11: Princípio law of demeter

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

public void coletarPagamento() {

for (Cliente cliente : clientes) {

double pagamento =cliente.getFazerPagamento(nota);

if (pagamento !=0) {

fundoColeta += pagamento;

}

}

}

Page 13: Princípio law of demeter
Page 14: Princípio law of demeter

Dar para aplicar o princípio para todos os projetos?

Page 15: Princípio law of demeter
Page 16: Princípio law of demeter

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.