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

Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
Armando Daniel
 
Unit 4 designing classes
Unit 4  designing classesUnit 4  designing classes
Unit 4 designing classes
gopal10scs185
 

Mais procurados (20)

Code refactoring
Code refactoringCode refactoring
Code refactoring
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
 
Software Engineering - chp4- design patterns
Software Engineering - chp4- design patternsSoftware Engineering - chp4- design patterns
Software Engineering - chp4- design patterns
 
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 pattern - Facade Pattern
Design pattern - Facade PatternDesign pattern - Facade Pattern
Design pattern - Facade Pattern
 
Classes abstratas e interfaces
Classes abstratas e interfacesClasses abstratas e interfaces
Classes abstratas e interfaces
 
Software requirement and specification
Software requirement and specificationSoftware requirement and specification
Software requirement and specification
 
Clean code presentation
Clean code presentationClean code presentation
Clean code presentation
 
Refactoring: Improving the design of existing code
Refactoring: Improving the design of existing codeRefactoring: Improving the design of existing code
Refactoring: Improving the design of existing code
 
Design pattern-presentation
Design pattern-presentationDesign pattern-presentation
Design pattern-presentation
 
Scenario based methods
Scenario based methodsScenario based methods
Scenario based methods
 
Exception Handling in C#
Exception Handling in C#Exception Handling in C#
Exception Handling in C#
 
Unit 4 designing classes
Unit 4  designing classesUnit 4  designing classes
Unit 4 designing classes
 
Design Patterns Java
Design Patterns JavaDesign Patterns Java
Design Patterns Java
 
Cours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxyCours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxy
 
Patrones GOF
Patrones GOFPatrones GOF
Patrones GOF
 
Overview of UML Diagrams
Overview of UML DiagramsOverview of UML Diagrams
Overview of UML Diagrams
 
Java Garbage Collection - How it works
Java Garbage Collection - How it worksJava Garbage Collection - How it works
Java Garbage Collection - How it works
 
Introdução à Metaprogramação com Java Reflection API
Introdução à Metaprogramação com Java Reflection APIIntrodução à Metaprogramação com Java Reflection API
Introdução à Metaprogramação com Java Reflection API
 
Builder Design Pattern (Generic Construction -Different Representation)
Builder Design Pattern (Generic Construction -Different Representation)Builder Design Pattern (Generic Construction -Different Representation)
Builder Design Pattern (Generic Construction -Different Representation)
 

Semelhante a Princípio law of demeter

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
Laura
 

Semelhante a Princípio law of demeter (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

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

Último (8)

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
 
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
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
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
 
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 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
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
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 

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