3

Click here to load reader

Princípio Law Of Demeter (LOD)

Embed Size (px)

DESCRIPTION

A lei de Demeter é um conjunto de regras para construir sistemasvisando baixo acoplamento, também conhecida como Princípio do menorConhecimento e fale somente com os amigos.

Citation preview

Page 1: Princípio Law Of Demeter (LOD)

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:

� 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

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"); } } }

Page 2: Princípio Law Of Demeter (LOD)

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:

Page 3: Princípio Law Of Demeter (LOD)

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.