SlideShare uma empresa Scribd logo
1 de 16
Princípio Law Of Demeter (Lei de Demeter) Grupo: Gladson Otávio             Emerson Roger
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. Princípio
[object Object]
 Cada unidade deveria falar somente com seus amigos e não com estrangeiros. Em Aspectos Gerais
Um método M de um objeto O somente poderia acessar métodos de outros objetos que sigam as diretrizes:  ,[object Object]
 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 OEm orientação a objeto
infringindo o princípio
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. Infringindo o principio (LOD)
//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 ");               }          }  }
Acoplamento indesejado: Alterações nas classes dependentes: Mais resposabilidades para a classe: Problema que forte acoplamento pode causar
As dependências criada pelo método
Como resolver esse problema?
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; }

Mais conteúdo relacionado

Mais procurados

Arquitetura Cliente-Servidor
Arquitetura Cliente-ServidorArquitetura Cliente-Servidor
Arquitetura Cliente-ServidorIsrael Messias
 
Arquitetura cliente servidor
Arquitetura cliente servidorArquitetura cliente servidor
Arquitetura cliente servidorMarcia Abrahim
 
Livro Código Limpo: Tratamento de Erros - Cap 7
Livro Código Limpo: Tratamento de Erros - Cap 7Livro Código Limpo: Tratamento de Erros - Cap 7
Livro Código Limpo: Tratamento de Erros - Cap 7Inael Rodrigues
 
Serviços de Rede - Telnet e SSH
Serviços de Rede - Telnet e SSHServiços de Rede - Telnet e SSH
Serviços de Rede - Telnet e SSHNatanael Simões
 
Git e Github para Iniciantes
Git e Github para IniciantesGit e Github para Iniciantes
Git e Github para IniciantesLoiane Groner
 
Aula 03 Meios de Comunicação de Dados
Aula 03 Meios de Comunicação de DadosAula 03 Meios de Comunicação de Dados
Aula 03 Meios de Comunicação de DadosJorge Ávila Miranda
 
Criptografia
CriptografiaCriptografia
CriptografiaPaula P.
 
Segurança em banco de dados
Segurança em banco de dadosSegurança em banco de dados
Segurança em banco de dadosArthur Azevedo
 
Projeto: Montagem de uma rede local
Projeto: Montagem de uma rede local Projeto: Montagem de uma rede local
Projeto: Montagem de uma rede local Verônica Veiga
 
Análise de requisitos de um projeto de redes
Análise de requisitos de um projeto de redesAnálise de requisitos de um projeto de redes
Análise de requisitos de um projeto de redesleilaredes
 
Aps lista de exercícios
Aps lista de exercíciosAps lista de exercícios
Aps lista de exercíciosGuilherme
 
Instalações ited domótica - projeto integrado de comunicações
Instalações ited   domótica - projeto integrado de comunicaçõesInstalações ited   domótica - projeto integrado de comunicações
Instalações ited domótica - projeto integrado de comunicaçõesFrancisco Costa
 

Mais procurados (20)

Arquitetura Cliente-Servidor
Arquitetura Cliente-ServidorArquitetura Cliente-Servidor
Arquitetura Cliente-Servidor
 
Firewall
FirewallFirewall
Firewall
 
Arquitetura cliente servidor
Arquitetura cliente servidorArquitetura cliente servidor
Arquitetura cliente servidor
 
Firewall
FirewallFirewall
Firewall
 
Livro Código Limpo: Tratamento de Erros - Cap 7
Livro Código Limpo: Tratamento de Erros - Cap 7Livro Código Limpo: Tratamento de Erros - Cap 7
Livro Código Limpo: Tratamento de Erros - Cap 7
 
Portas logicas
Portas logicasPortas logicas
Portas logicas
 
Aula javascript
Aula  javascriptAula  javascript
Aula javascript
 
Serviços de Rede - Telnet e SSH
Serviços de Rede - Telnet e SSHServiços de Rede - Telnet e SSH
Serviços de Rede - Telnet e SSH
 
Git e Github para Iniciantes
Git e Github para IniciantesGit e Github para Iniciantes
Git e Github para Iniciantes
 
Motherboard
MotherboardMotherboard
Motherboard
 
TCP/IP
TCP/IPTCP/IP
TCP/IP
 
Aula 03 Meios de Comunicação de Dados
Aula 03 Meios de Comunicação de DadosAula 03 Meios de Comunicação de Dados
Aula 03 Meios de Comunicação de Dados
 
Criptografia
CriptografiaCriptografia
Criptografia
 
Segurança em banco de dados
Segurança em banco de dadosSegurança em banco de dados
Segurança em banco de dados
 
Projeto: Montagem de uma rede local
Projeto: Montagem de uma rede local Projeto: Montagem de uma rede local
Projeto: Montagem de uma rede local
 
Análise de requisitos de um projeto de redes
Análise de requisitos de um projeto de redesAnálise de requisitos de um projeto de redes
Análise de requisitos de um projeto de redes
 
Aps lista de exercícios
Aps lista de exercíciosAps lista de exercícios
Aps lista de exercícios
 
Instalações ited domótica - projeto integrado de comunicações
Instalações ited   domótica - projeto integrado de comunicaçõesInstalações ited   domótica - projeto integrado de comunicações
Instalações ited domótica - projeto integrado de comunicações
 
Clean code em C#
Clean code em C#Clean code em C#
Clean code em C#
 
Largura de banda
Largura de bandaLargura de banda
Largura de banda
 

Semelhante a Princípio Law Of Demeter e como resolver problemas de acoplamento

Tutorial java orientação a objetos parte 1
Tutorial java orientação a objetos parte 1Tutorial java orientação a objetos parte 1
Tutorial java orientação a objetos parte 1Elaine Cecília Gatto
 
ZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivasZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivasRafael Chinelato Del Nero
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Natanael Fonseca
 
Robustez de Software - Como ouvir menos reclamações dos seus chefes
Robustez de Software - Como ouvir menos reclamações dos seus chefesRobustez de Software - Como ouvir menos reclamações dos seus chefes
Robustez de Software - Como ouvir menos reclamações dos seus chefesDavid Robert Camargo de Campos
 
Sobre code smells, refactoring e design: como SOLID pode te ajudar no dia a dia
Sobre code smells, refactoring e design: como SOLID pode te ajudar no dia a diaSobre code smells, refactoring e design: como SOLID pode te ajudar no dia a dia
Sobre code smells, refactoring e design: como SOLID pode te ajudar no dia a diaElaine Naomi
 
As vantagens e desvantagens da aplicação de padrões de projeto
As vantagens e desvantagens da aplicação de padrões de projetoAs vantagens e desvantagens da aplicação de padrões de projeto
As vantagens e desvantagens da aplicação de padrões de projetoGabriel Galdino
 
Curso avançado de c++ em portugues
Curso avançado de c++ em portuguesCurso avançado de c++ em portugues
Curso avançado de c++ em portuguesLaura
 
Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1ariovaldodias
 
Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1ariovaldodias
 
Construtores_Sobrecarga.pptx
Construtores_Sobrecarga.pptxConstrutores_Sobrecarga.pptx
Construtores_Sobrecarga.pptxJoberthSilva
 

Semelhante a Princípio Law Of Demeter e como resolver problemas de acoplamento (20)

Princípio Law Of Demeter (LOD)
Princípio Law Of Demeter (LOD)Princípio Law Of Demeter (LOD)
Princípio Law Of Demeter (LOD)
 
Lod law of demeter
Lod law of demeterLod law of demeter
Lod law of demeter
 
Refactoring
RefactoringRefactoring
Refactoring
 
Tutorial java orientação a objetos parte 1
Tutorial java orientação a objetos parte 1Tutorial java orientação a objetos parte 1
Tutorial java orientação a objetos parte 1
 
Tutorial Java: Herança
Tutorial Java: HerançaTutorial Java: Herança
Tutorial Java: Herança
 
Refactoring - Design no Código
Refactoring - Design no CódigoRefactoring - Design no Código
Refactoring - Design no Código
 
Code Smells
Code SmellsCode Smells
Code Smells
 
ZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivasZeroBugsProject - Técnicas de programação efetivas
ZeroBugsProject - Técnicas de programação efetivas
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03
 
Robustez de Software - Como ouvir menos reclamações dos seus chefes
Robustez de Software - Como ouvir menos reclamações dos seus chefesRobustez de Software - Como ouvir menos reclamações dos seus chefes
Robustez de Software - Como ouvir menos reclamações dos seus chefes
 
Sobre code smells, refactoring e design: como SOLID pode te ajudar no dia a dia
Sobre code smells, refactoring e design: como SOLID pode te ajudar no dia a diaSobre code smells, refactoring e design: como SOLID pode te ajudar no dia a dia
Sobre code smells, refactoring e design: como SOLID pode te ajudar no dia a dia
 
Encapsulamento em oo
Encapsulamento em ooEncapsulamento em oo
Encapsulamento em oo
 
As vantagens e desvantagens da aplicação de padrões de projeto
As vantagens e desvantagens da aplicação de padrões de projetoAs vantagens e desvantagens da aplicação de padrões de projeto
As vantagens e desvantagens da aplicação de padrões de projeto
 
Tutorial Java: Interface
Tutorial Java: InterfaceTutorial Java: Interface
Tutorial Java: Interface
 
Solid
SolidSolid
Solid
 
Tutorial Java: Polimorfismo
Tutorial Java: PolimorfismoTutorial Java: Polimorfismo
Tutorial Java: Polimorfismo
 
Curso avançado de c++ em portugues
Curso avançado de c++ em portuguesCurso avançado de c++ em portugues
Curso avançado de c++ em portugues
 
Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1
 
Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1
 
Construtores_Sobrecarga.pptx
Construtores_Sobrecarga.pptxConstrutores_Sobrecarga.pptx
Construtores_Sobrecarga.pptx
 

Mais de Engenharia de Software Ágil

OCP - The Open Close Principle - Princípio aberto/fechado
OCP - The Open Close Principle - Princípio aberto/fechadoOCP - The Open Close Principle - Princípio aberto/fechado
OCP - The Open Close Principle - Princípio aberto/fechadoEngenharia de Software Ágil
 

Mais de Engenharia de Software Ágil (20)

Sap – stablility and abstract principle
Sap – stablility and abstract principleSap – stablility and abstract principle
Sap – stablility and abstract principle
 
Sap – stablility and abstract principle
Sap – stablility and abstract principleSap – stablility and abstract principle
Sap – stablility and abstract principle
 
Sap – stablility and abstract principle
Sap – stablility and abstract principleSap – stablility and abstract principle
Sap – stablility and abstract principle
 
Common closure principle
Common closure principleCommon closure principle
Common closure principle
 
Common closure principle
Common closure principle Common closure principle
Common closure principle
 
Acyclic dependencies principle
Acyclic dependencies principleAcyclic dependencies principle
Acyclic dependencies principle
 
Acyclic dependencies principle (adp)
Acyclic dependencies principle  (adp)Acyclic dependencies principle  (adp)
Acyclic dependencies principle (adp)
 
Reuse release equivalence principle
Reuse release equivalence principleReuse release equivalence principle
Reuse release equivalence principle
 
Rep reuse release equivalence principle
Rep reuse release equivalence principleRep reuse release equivalence principle
Rep reuse release equivalence principle
 
OCP - The Open Close Principle - Princípio aberto/fechado
OCP - The Open Close Principle - Princípio aberto/fechadoOCP - The Open Close Principle - Princípio aberto/fechado
OCP - The Open Close Principle - Princípio aberto/fechado
 
Sdp – stable dependencies principles
Sdp – stable dependencies principlesSdp – stable dependencies principles
Sdp – stable dependencies principles
 
principio de reutilização comum
principio de reutilização comumprincipio de reutilização comum
principio de reutilização comum
 
Dip the dependency inversion principle
Dip   the dependency inversion principleDip   the dependency inversion principle
Dip the dependency inversion principle
 
Dip the dependency inversion principle
Dip   the dependency inversion principleDip   the dependency inversion principle
Dip the dependency inversion principle
 
Dip the dependency inversion principle
Dip   the dependency inversion principleDip   the dependency inversion principle
Dip the dependency inversion principle
 
(ISP) - Interface Segregation Principle
(ISP)  - Interface Segregation Principle(ISP)  - Interface Segregation Principle
(ISP) - Interface Segregation Principle
 
LSP – The Liskov Substitution Principle
LSP – The Liskov Substitution PrincipleLSP – The Liskov Substitution Principle
LSP – The Liskov Substitution Principle
 
SRP - Single Responsability Principle
SRP - Single Responsability PrincipleSRP - Single Responsability Principle
SRP - Single Responsability Principle
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
FDD
FDDFDD
FDD
 

Princípio Law Of Demeter e como resolver problemas de acoplamento

  • 1. Princípio Law Of Demeter (Lei de Demeter) Grupo: Gladson Otávio Emerson Roger
  • 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. Princípio
  • 3.
  • 4. Cada unidade deveria falar somente com seus amigos e não com estrangeiros. Em Aspectos Gerais
  • 5.
  • 6. Um objeto que M criou
  • 7. Um método do próprio objeto O
  • 8. Objeto diretamente relacionado com o objeto O
  • 9. Uma variável global acessível pelo objeto OEm orientação a objeto
  • 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. Infringindo o principio (LOD)
  • 12. //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 "); } } }
  • 13. Acoplamento indesejado: Alterações nas classes dependentes: Mais resposabilidades para a classe: Problema que forte acoplamento pode causar
  • 14. As dependências criada pelo método
  • 15. Como resolver esse problema?
  • 16. 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; }
  • 17. public void coletarPagamento() { for (Cliente cliente : clientes) { double pagamento =cliente.getFazerPagamento(nota); if (pagamento !=0) { fundoColeta += pagamento; } } } 3º - Alterar o método coletarPagamento() da classe jornaleiro para que ele acesse o método getFazerPagamento() da classe cliente.
  • 19. Dar para aplicar o princípio para todos os projetos?
  • 20. Exemplo onde o princípio não se aplicaria:
  • 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. Conclusão