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

Aula 1- Fundamentos da computação móvel
Aula 1- Fundamentos da computação móvelAula 1- Fundamentos da computação móvel
Aula 1- Fundamentos da computação móvelJanynne Gomes
 
HERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVAHERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVAAparicio Junior
 
Bad Code Smells
Bad Code SmellsBad Code Smells
Bad Code Smellskim.mens
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POODaniel Brandão
 
Introdução aos Sistemas Distribuídos
Introdução aos Sistemas DistribuídosIntrodução aos Sistemas Distribuídos
Introdução aos Sistemas DistribuídosFrederico Madeira
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Mario Jorge Pereira
 
Javascript (parte 1)
Javascript (parte 1)Javascript (parte 1)
Javascript (parte 1)Alex Camargo
 
Clean code - Mantenha seu código limpo
Clean code - Mantenha seu código limpoClean code - Mantenha seu código limpo
Clean code - Mantenha seu código limpoTiago Bencardino
 
SO-03 Comunicação e Sincronização de Processos
SO-03 Comunicação e Sincronização de ProcessosSO-03 Comunicação e Sincronização de Processos
SO-03 Comunicação e Sincronização de ProcessosEduardo Nicola F. Zagari
 
Design Patterns Presentation - Chetan Gole
Design Patterns Presentation -  Chetan GoleDesign Patterns Presentation -  Chetan Gole
Design Patterns Presentation - Chetan GoleChetan Gole
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Natanael Fonseca
 
Aula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para WebAula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para WebDaniel Brandão
 
Java 09 Heranca Reescrita Polimorfismo
Java 09 Heranca Reescrita PolimorfismoJava 09 Heranca Reescrita Polimorfismo
Java 09 Heranca Reescrita PolimorfismoRegis Magalhães
 

Mais procurados (20)

clean code
clean codeclean code
clean code
 
Aula 1- Fundamentos da computação móvel
Aula 1- Fundamentos da computação móvelAula 1- Fundamentos da computação móvel
Aula 1- Fundamentos da computação móvel
 
Bridge Design Pattern
Bridge Design PatternBridge Design Pattern
Bridge Design Pattern
 
HERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVAHERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVA
 
Bad Code Smells
Bad Code SmellsBad Code Smells
Bad Code Smells
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 
Introducao ao C#
Introducao ao C#Introducao ao C#
Introducao ao C#
 
Padrões de Projeto
Padrões de ProjetoPadrões de Projeto
Padrões de Projeto
 
Introdução aos Sistemas Distribuídos
Introdução aos Sistemas DistribuídosIntrodução aos Sistemas Distribuídos
Introdução aos Sistemas Distribuídos
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java
 
Javascript (parte 1)
Javascript (parte 1)Javascript (parte 1)
Javascript (parte 1)
 
Clean code - Mantenha seu código limpo
Clean code - Mantenha seu código limpoClean code - Mantenha seu código limpo
Clean code - Mantenha seu código limpo
 
SO-03 Comunicação e Sincronização de Processos
SO-03 Comunicação e Sincronização de ProcessosSO-03 Comunicação e Sincronização de Processos
SO-03 Comunicação e Sincronização de Processos
 
Design Patterns Presentation - Chetan Gole
Design Patterns Presentation -  Chetan GoleDesign Patterns Presentation -  Chetan Gole
Design Patterns Presentation - Chetan Gole
 
Software Design Patterns
Software Design PatternsSoftware Design Patterns
Software Design Patterns
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01
 
SI - Comunicação
SI - ComunicaçãoSI - Comunicação
SI - Comunicação
 
Aula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para WebAula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para Web
 
Java 09 Heranca Reescrita Polimorfismo
Java 09 Heranca Reescrita PolimorfismoJava 09 Heranca Reescrita Polimorfismo
Java 09 Heranca Reescrita Polimorfismo
 
Padrões de Projeto de Software
Padrões de Projeto de SoftwarePadrões de Projeto de Software
Padrões de Projeto de Software
 

Semelhante a Princípio law of demeter

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 (20)

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
 
Grasp Patterns.ppt
Grasp Patterns.pptGrasp Patterns.ppt
Grasp Patterns.ppt
 

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
 

Último

ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfNatalia Granato
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 

Último (6)

ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 

Princípio law of demeter

  • 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