SlideShare ist ein Scribd-Unternehmen logo
1 von 3
Downloaden Sie, um offline zu lesen
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.

Weitere ähnliche Inhalte

Was ist angesagt?

Mối quan hệ giữa class và object
Mối quan hệ giữa class và objectMối quan hệ giữa class và object
Mối quan hệ giữa class và objectTrực Lê Công
 
MICROSOFT 365 CERTIFIED: MODERN DESKTOP ADMINISTRATOR ASSOCIATE
MICROSOFT 365 CERTIFIED: MODERN DESKTOP ADMINISTRATOR ASSOCIATEMICROSOFT 365 CERTIFIED: MODERN DESKTOP ADMINISTRATOR ASSOCIATE
MICROSOFT 365 CERTIFIED: MODERN DESKTOP ADMINISTRATOR ASSOCIATESerhad MAKBULOĞLU, MBA
 
Chuong 3 xac_dinh_yeu_cau_he_thong, hệ thống
Chuong 3 xac_dinh_yeu_cau_he_thong, hệ thốngChuong 3 xac_dinh_yeu_cau_he_thong, hệ thống
Chuong 3 xac_dinh_yeu_cau_he_thong, hệ thốngKevin Trieu
 
DDoS - Ataque de negação de serviço
DDoS - Ataque de negação de serviçoDDoS - Ataque de negação de serviço
DDoS - Ataque de negação de serviçoGustavo Neves
 
خدمات الويب (Web Services) و كيف تنشئها
 خدمات الويب (Web Services) و كيف تنشئها  خدمات الويب (Web Services) و كيف تنشئها
خدمات الويب (Web Services) و كيف تنشئها lunarhalo
 
Phân tích thiết kế hệ thống của hàng bán điện thoại di động
Phân tích thiết kế hệ thống của hàng bán điện thoại di độngPhân tích thiết kế hệ thống của hàng bán điện thoại di động
Phân tích thiết kế hệ thống của hàng bán điện thoại di độngNguyễn Danh Thanh
 
BA DAY: 5 bước phân tích yêu cầu nghiệp vụ
BA DAY: 5 bước phân tích yêu cầu nghiệp vụ BA DAY: 5 bước phân tích yêu cầu nghiệp vụ
BA DAY: 5 bước phân tích yêu cầu nghiệp vụ Le Cuong
 
Modern Application Development in the Cloud
Modern Application Development in the CloudModern Application Development in the Cloud
Modern Application Development in the CloudAmazon Web Services
 
Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Rodrigo Kono
 
Introduction to SOLID Principles
Introduction to SOLID PrinciplesIntroduction to SOLID Principles
Introduction to SOLID PrinciplesGanesh Samarthyam
 
OAuth2 - Introduction
OAuth2 - IntroductionOAuth2 - Introduction
OAuth2 - IntroductionKnoldus Inc.
 
Николай Скоропадский. Как развивать агентство на англоязычном рынке
Николай Скоропадский. Как развивать агентство на англоязычном рынкеНиколай Скоропадский. Как развивать агентство на англоязычном рынке
Николай Скоропадский. Как развивать агентство на англоязычном рынкеOctopus Events
 
Tên sáng kiến Biện pháp rèn kĩ năng viết đoạn văn cho học sinh lớp 2.pdf
Tên sáng kiến Biện pháp rèn kĩ năng viết đoạn văn cho học sinh lớp 2.pdfTên sáng kiến Biện pháp rèn kĩ năng viết đoạn văn cho học sinh lớp 2.pdf
Tên sáng kiến Biện pháp rèn kĩ năng viết đoạn văn cho học sinh lớp 2.pdfNuioKila
 

Was ist angesagt? (20)

Mối quan hệ giữa class và object
Mối quan hệ giữa class và objectMối quan hệ giữa class và object
Mối quan hệ giữa class và object
 
MICROSOFT 365 CERTIFIED: MODERN DESKTOP ADMINISTRATOR ASSOCIATE
MICROSOFT 365 CERTIFIED: MODERN DESKTOP ADMINISTRATOR ASSOCIATEMICROSOFT 365 CERTIFIED: MODERN DESKTOP ADMINISTRATOR ASSOCIATE
MICROSOFT 365 CERTIFIED: MODERN DESKTOP ADMINISTRATOR ASSOCIATE
 
Chia subnetmask
Chia subnetmaskChia subnetmask
Chia subnetmask
 
Bizweb Microservices Architecture
Bizweb Microservices ArchitectureBizweb Microservices Architecture
Bizweb Microservices Architecture
 
Chuong 3 xac_dinh_yeu_cau_he_thong, hệ thống
Chuong 3 xac_dinh_yeu_cau_he_thong, hệ thốngChuong 3 xac_dinh_yeu_cau_he_thong, hệ thống
Chuong 3 xac_dinh_yeu_cau_he_thong, hệ thống
 
DDoS - Ataque de negação de serviço
DDoS - Ataque de negação de serviçoDDoS - Ataque de negação de serviço
DDoS - Ataque de negação de serviço
 
خدمات الويب (Web Services) و كيف تنشئها
 خدمات الويب (Web Services) و كيف تنشئها  خدمات الويب (Web Services) و كيف تنشئها
خدمات الويب (Web Services) و كيف تنشئها
 
Phân tích thiết kế hệ thống của hàng bán điện thoại di động
Phân tích thiết kế hệ thống của hàng bán điện thoại di độngPhân tích thiết kế hệ thống của hàng bán điện thoại di động
Phân tích thiết kế hệ thống của hàng bán điện thoại di động
 
BA DAY: 5 bước phân tích yêu cầu nghiệp vụ
BA DAY: 5 bước phân tích yêu cầu nghiệp vụ BA DAY: 5 bước phân tích yêu cầu nghiệp vụ
BA DAY: 5 bước phân tích yêu cầu nghiệp vụ
 
Modern Application Development in the Cloud
Modern Application Development in the CloudModern Application Development in the Cloud
Modern Application Development in the Cloud
 
Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)
 
Introduction to SOLID Principles
Introduction to SOLID PrinciplesIntroduction to SOLID Principles
Introduction to SOLID Principles
 
Co so du lieu
Co so du lieuCo so du lieu
Co so du lieu
 
OAuth2 - Introduction
OAuth2 - IntroductionOAuth2 - Introduction
OAuth2 - Introduction
 
Николай Скоропадский. Как развивать агентство на англоязычном рынке
Николай Скоропадский. Как развивать агентство на англоязычном рынкеНиколай Скоропадский. Как развивать агентство на англоязычном рынке
Николай Скоропадский. Как развивать агентство на англоязычном рынке
 
Tên sáng kiến Biện pháp rèn kĩ năng viết đoạn văn cho học sinh lớp 2.pdf
Tên sáng kiến Biện pháp rèn kĩ năng viết đoạn văn cho học sinh lớp 2.pdfTên sáng kiến Biện pháp rèn kĩ năng viết đoạn văn cho học sinh lớp 2.pdf
Tên sáng kiến Biện pháp rèn kĩ năng viết đoạn văn cho học sinh lớp 2.pdf
 
Clean code
Clean codeClean code
Clean code
 
Solid principles
Solid principlesSolid principles
Solid principles
 
clean code
clean codeclean code
clean code
 
Tấn Công DDOS
Tấn Công DDOSTấn Công DDOS
Tấn Công DDOS
 

Ähnlich wie Engenharia de Software Centrada em Métodos Ágeis

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
 
Java 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseJava 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseRegis Magalhães
 
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
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosLudimila Monjardim Casagrande
 
05 - Sincronização de Threads - I
05 - Sincronização de Threads - I05 - Sincronização de Threads - I
05 - Sincronização de Threads - IFabio Moura Pereira
 
Uma abordagem funcional para gerenciamento de erros
Uma abordagem funcional para gerenciamento de errosUma abordagem funcional para gerenciamento de erros
Uma abordagem funcional para gerenciamento de errosGabriel Schade Cardoso
 
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
 
ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#biandamakengo08
 

Ähnlich wie Engenharia de Software Centrada em Métodos Ágeis (20)

Grasp Patterns.ppt
Grasp Patterns.pptGrasp Patterns.ppt
Grasp Patterns.ppt
 
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
 
Java 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseJava 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De Classe
 
Tutorial Java: Interface
Tutorial Java: InterfaceTutorial Java: Interface
Tutorial Java: Interface
 
Refactoring - Design no Código
Refactoring - Design no CódigoRefactoring - Design no Código
Refactoring - Design no Código
 
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: Polimorfismo
Tutorial Java: PolimorfismoTutorial Java: Polimorfismo
Tutorial Java: Polimorfismo
 
POO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a ObjetosPOO - 01 - Introdução ao Paradigma Orientado a Objetos
POO - 01 - Introdução ao Paradigma Orientado a Objetos
 
POO.pdf
POO.pdfPOO.pdf
POO.pdf
 
01 strategy
01 strategy01 strategy
01 strategy
 
05 - Sincronização de Threads - I
05 - Sincronização de Threads - I05 - Sincronização de Threads - I
05 - Sincronização de Threads - I
 
Aula1
Aula1Aula1
Aula1
 
Uma abordagem funcional para gerenciamento de erros
Uma abordagem funcional para gerenciamento de errosUma abordagem funcional para gerenciamento de erros
Uma abordagem funcional para gerenciamento de erros
 
Mvc delphi
Mvc delphiMvc delphi
Mvc delphi
 
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
 
Classes e Objectos JAVA
Classes e Objectos JAVAClasses e Objectos JAVA
Classes e Objectos JAVA
 
ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#ebook-completo c# o melhor para começar no c#
ebook-completo c# o melhor para começar no c#
 
Encapsulamento em oo
Encapsulamento em ooEncapsulamento em oo
Encapsulamento em oo
 

Mehr von 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
 

Mehr von 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
 
Lod law of demeter
Lod law of demeterLod law of demeter
Lod law of demeter
 
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
 

Engenharia de Software Centrada em Métodos Ágeis

  • 1. 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"); } } }
  • 2. 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:
  • 3. 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.