Princípio Law Of Demeter<br />(Lei de Demeter)<br />Grupo: Gladson Otávio<br />            Emerson Roger<br />
A lei de Demeter é um conjunto de regras para construir sistemas visando baixo acoplamento, também conhecida como Princípi...
<ul><li>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. </li></ul>Em Aspectos Gerais<br />
Um método M de um objeto O somente poderia acessar métodos de outros objetos que sigam as diretrizes: <br /><ul><li> Seja ...
 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</li></ul>Em orientação a objeto<br />
infringindo o princípio<br />
Dentro da classe jornaleiro, há um método chamado coletarPagamento(), cuja finalidade é coletar pagamento dos clientes, pe...
//o método coletar pagamento sem atender o principio LOD<br />public void coletarPagamento() { <br />  for (Cliente client...
Acoplamento indesejado:<br />Alterações nas classes dependentes:<br />Mais resposabilidades para a classe:<br />Problema q...
As dependências criada pelo método<br />
Como resolver esse problema?<br />
1º - Ex cluir Método getMinhacarteira() da classe Cliente.<br />2º - Criar um método fazerPagamento() na mesma classe.<br ...
Upcoming SlideShare
Loading in …5
×

Princípio law of demeter

1,176 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,176
On SlideShare
0
From Embeds
0
Number of Embeds
245
Actions
Shares
0
Downloads
10
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Princípio law of demeter

  1. 1. Princípio Law Of Demeter<br />(Lei de Demeter)<br />Grupo: Gladson Otávio<br /> Emerson Roger<br />
  2. 2. 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.<br />Princípio<br />
  3. 3. <ul><li>Cada unidade deveria somente utilizar um conjunto limitado de unidades de outras unidades.
  4. 4. Cada unidade deveria falar somente com seus amigos e não com estrangeiros. </li></ul>Em Aspectos Gerais<br />
  5. 5. Um método M de um objeto O somente poderia acessar métodos de outros objetos que sigam as diretrizes: <br /><ul><li> Seja parâmetro de M
  6. 6. Um objeto que M criou
  7. 7. Um método do próprio objeto O
  8. 8. Objeto diretamente relacionado com o objeto O
  9. 9. Uma variável global acessível pelo objeto O</li></ul>Em orientação a objeto<br />
  10. 10. infringindo o princípio<br />
  11. 11. 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.<br />Infringindo o principio (LOD)<br />
  12. 12. //o método coletar pagamento sem atender o principio LOD<br />public void coletarPagamento() { <br /> for (Cliente cliente : clientes) {<br />if (cliente.getMinhacarteira().getValor()>= nota) { cliente.getMinhacarteira().subtractValor(nota);<br /> fundoColeta += nota; <br /> }<br />else {<br /> System.out.println("Sem dinheiro,anotar divida ");<br /> }<br /> }<br /> }<br />
  13. 13. Acoplamento indesejado:<br />Alterações nas classes dependentes:<br />Mais resposabilidades para a classe:<br />Problema que forte acoplamento pode causar<br />
  14. 14. As dependências criada pelo método<br />
  15. 15. Como resolver esse problema?<br />
  16. 16. 1º - Ex cluir Método getMinhacarteira() da classe Cliente.<br />2º - Criar um método fazerPagamento() na mesma classe.<br />public class Cliente {<br /> private String firstName;<br /> private String lastName;<br /> private Carteira minhacarteira;<br />// construtores {...}<br />// metodo criado para o cliente fazer o pagamento.<br />public double getFazerPagamento(double nota) {<br />double valorPago = 0;<br /> if (minhacarteira.getValor() >= nota) {<br /> minhacarteira.subtractValor(nota);<br /> valorPago= nota;<br /> }<br /> return valorPago;<br />}<br />// get and seters{...}<br />// public Carteira getMinhacarteira() { return minhacarteira; }<br />
  17. 17. public void coletarPagamento() { <br /> for (Cliente cliente : clientes) {<br /> double pagamento =cliente.getFazerPagamento(nota);<br /> if (pagamento !=0) {<br />fundoColeta += pagamento;<br /> }<br /> }<br />}<br />3º - Alterar o método coletarPagamento() da classe jornaleiro para que ele acesse o método getFazerPagamento() da classe cliente.<br />
  18. 18. Atendendo ao princípio (LOD)<br />
  19. 19. Dar para aplicar o princípio para todos os projetos?<br />
  20. 20. Exemplo onde o princípio não se aplicaria:<br />
  21. 21. 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.<br />Conclusão<br />

×