Princípio Law Of Demeter (LOD)

engenhariadesoftwareagil 636 views 3 slides Jun 17, 2011
Slide 1
Slide 1 of 3
Slide 1
1
Slide 2
2
Slide 3
3

About This Presentation

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.


Slide Content

Engenharia de software centrada em métodos ágeis – Turma 2

Disciplina: Programação Orientado a Objeto
Professor: Edgar Davidson Data: 15/06/2011
Grupo: Gladson Otavio
Emerson Roger
Princípio Law Of Demeter (LOD)
Lei de demeter
Princípio
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.
Aspecto Gerais

· 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 orientação a objeto

Um método M de um objeto O somente poderia acessar métodos de outros
objetos que sigam as diretrizes:
L Seja parâmetro de M
L Um objeto que M criou
L Um método do próprio objeto O
L Objeto diretamente relacionado com o objeto O
L Uma variável global acessível pelo objeto O
Infringindo o princípio
Analisando o diagrama de classe abaixo, temos três classes que mantem
relacionamentos entre si, mas a clsse jornaleiro mantem dependência indesejada com
a classe carteira, causado pelo método coletarPagamento, quebrando o principio de
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");
}
}
}

A finalidade do método coletar pagamento, é coletar pagamento dos clientes por
produtos ou serviços oferecido pela classe jornaleiro,mas perceba que dentro do
método, a classe jornaleiro acessa a classe carteira que mantem associação apenas
com cliente,passando a conhecer tudo que tem na carteira do cliente, ou seja na
classe carteira, coisa que somente o cliente deve saber. Analise o diagrama abaixo e
perceba o forte acoplamento criado,pois foi criado uma depenência com aclasse
carteira.

Solução

1º Para resolver este problema, temos que remover o método
getMinhacarteira() da classe cliente e criar um método getfazerPagamento,
agora o cliente recebe a nota e faz o pagamento para o jornaleiro, cenário que
acontence no mundo real. Vamos verificar o código criado.
public double getFazerPagamento(double nota) {
double valorPago = 0
if (minhacarteira.getValor() >= nota) {
minhacarteira.subtractValor(nota);
valorPago = nota;
}
return valorPago;
}
2º Agora, também é preciso modificar o método coletarPagamento() da classe
jornaleiro, pois ele não acessa mais a classe carteira para retirar a pagamento que lhe
é devido.Vamos analisar a modificação feita na método:

public void coletarPagamento(){
for (Cliente cliente : clientes) {
double pagamento = cliente.getFazerPagamento( nota);
if (pagamento !=0) {
fundoColeta += pagamento;
}
}
}
Perceba que agora, dentro do método há uma variável pagamento que recebe o
método fazerPagamento(nota) da classe cliente, desta maneira o jornaleiro sequer tem
conhecimento das informções da classe carteira, alias ele nem precisa saber se o
cliente tem uma carteira.

Agora atende ao principio (lod) lei de demeter,veja que a dependência da classe
jornaleiro com a classe carteira foi removida


Conclusão

Este princípio é muito importante para manter baixo acoplamento entre as
classes, mas é preciso arquitetar bem o projeto para que não seja criado muitos
métodos na classe, causando uma baixa coesão . Este princípio não é aplicado a
todos os projetos, pois haverão casos onde a regra de negócio exige que várias
classes precisam conhecer outras calsses.