Click here to load reader
Upload
engenharia-de-software-agil
View
364
Download
0
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
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"); } } }
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.