Padrões de Projeto

       Padrões Estruturais
   Facade/Façade/Fachada
Facade/Façade/Fachada
•  Provê uma interface unificada para um
   conjunto de interfaces em um subsitema.
•  Facade ou Façade ou Fachada define
   uma interface de mais alto nível, que torna
   o subsistema mais fácil de se usar




2              Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                 of Reusable OO Software - Gamma                Ivan Granja
Motivação
•  Estruturar um sistema em subsistemas
   ajuda a reduzir a complexidade
    – Um objetivo de projeto comum é minimizar a
      comunicação e as dependências entre
      subsistemas.
      •  Uma forma de se alcançar isto é introduzindo um
         objeto FACADE, que provê uma interface única e
         simplificada às facilidades mais gerais de um
         subsistema


3                  Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                     of Reusable OO Software - Gamma                Ivan Granja
Motivação




4   Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
      of Reusable OO Software - Gamma                Ivan Granja
Façade
•  Suponha um sub-
   sistema (conjunto de
   pacotes e classes)
   que trabalham em
   conjunto para prover
   funcionalidade a
   clientes (ex: GUI ou
   Iterators)
•  Para obter esta
   funcionalidade
   desejada, cada cliente
   terá que interagir com
   um conjunto de classe
   deste subsistema
 5                  Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                      of Reusable OO Software - Gamma                Ivan Granja
Façade
•  Problemas:
     – Se houver
       manutenções nas
       classes do sub-
       sistema, os clientes
       serão afetados.
     – Acoplamento Forte
     – Dificuldade de
       manutenção e
       extensão
 6                   Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                       of Reusable OO Software - Gamma                Ivan Granja
Façade
•  Solução
     – Implementar um
       classe Façade
     – Façade atua
       na intermediação
       (orquestração,
       coordenação) da
       funcionalidade
       desejada pelo
       cliente
     – Classe Façade é uma interface de alto nível
        (provedor de serviços), ou seja, abstrai o detalhes do
        sub-sistema para os clientes.
 7                     Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                         of Reusable OO Software - Gamma                Ivan Granja
Façade
•  Vantagens:
     –  Mudanças na classes
        podem afetar façade mas
        não o cliente
     –  Diminuição do
        acoplamento do cliente
        com a classes do
        subsistema
     –  Cliente usa o serviço do
        façade e não acopla-se
        diretamente com a
        implementação do serviço
        (classes do sub-sistema)


 8                        Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                            of Reusable OO Software - Gamma                Ivan Granja
Motivação – Compiler Facade




9           Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
              of Reusable OO Software - Gamma                Ivan Granja
Aplicação
•  Use Façade quando:
     –  Deseja-se prover uma interface simples para um
        sistema complexo (útil para a maioria dos clientes...)
     –  Há muitas dependências entre clientes e as classes
        de implementação de uma abstração. Introduz-se um
        façade para desacoplá-los (independência e
        portabilidade)
     –  Deseja-se “estruturar em camadas” seus subsistemas
        (façade define um ponto de entrada para cada nível)



10                   Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                       of Reusable OO Software - Gamma                Ivan Granja
Estrutura




11   Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
       of Reusable OO Software - Gamma                Ivan Granja
Participantes
•  Façade (Compiler)
     –  Conhece quais classes de um subsistema são
        responsáveis por uma requisição
     –  Delega as requisições de clientes para os objetos
        apropriados do subsistema
•  Classes do Subsistema (Scanner, Parser,
   ProgramNode etc)
     –  Implementam a funcionalidade do subsistema
     –  Realizam o trabalho atribuído pelo objeto Façade
     –  Desconhecem o Façade, isto é, não possuem
        referências a ele
12                   Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                       of Reusable OO Software - Gamma                Ivan Granja
Colaborações
•  Clientes se comunicam com o subsistema
   enviando requisições ao Façade, que as
   direcionam aos objetos apropriados do
   subsistema
•  Embora os objetos do subsistema realizem o
   trabalho real, pode ser que o Façade tenha que
   fazer a “tradução” da sua interface para as do
   subsistema
•  Clientes que usam o Façade não têm que
   acessar os objetos do subsistema diretamente

13              Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                  of Reusable OO Software - Gamma                Ivan Granja
Conseqüências
•     Benefícios:
     1.  Separa clientes dos componentes do subsistema,
         reduzindo o número de objetos que os clientes
         lidam e tornando o subsistema mais fácil de se usar
     2.  Promove acoplamento fraco entre o subsistema e
         seus clientes.
        •    Acoplamento fraco permite que se mude os componentes
             de um subsistema sem afetar seus clientes.
        •    Além de ajudar a reduzir as dependências
     3.  Não impede que aplicações usem diretamente as
         classes do subsistema, caso necessário

14                     Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                         of Reusable OO Software - Gamma                Ivan Granja
Exemplo
•  Suponha uma aplicação com os seguintes
   requisitos
     – Recebe dados de um cliente (conta, endereço
       e cartão de crédito) por meio de um FORM
     – Valida as entradas
     – Grava os dados nos arquivos apropriados
•  Para validar dos dados, há classes Conta,
   Endereço e Cartão de Crédito


15                Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                    of Reusable OO Software - Gamma                Ivan Granja
FORM Cliente




16    Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
        of Reusable OO Software - Gamma                Ivan Granja
Exemplo
               Seqüência
1.  Instancia os três objetos com os dados
    digitados no FORM
2.  Valida estes dados, usando métodos
    destes objetos - isValid()
3.  Grava os dados nos arquivos, usando
    métodos destes objetos – save()



17            Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                of Reusable OO Software - Gamma                Ivan Granja
Exemplo
                 Sem Façade
1.  Objeto FORM deverá instanciar cada um dos
    objetos (Conta, Endereço e Cartão de Crédito) e
    coordenar a seqüência de chamadas aos
    métodos isValid() e save() destes três objetos

2.  Mudanças (ex. alterar a assinatura do método
    save() ou inclusão de mais dados no FORM que
    implicam em novo objeto para validação)
    implicará em alteração do objeto FORM
 18              Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                   of Reusable OO Software - Gamma                Ivan Granja
Exemplo
               Com Façade
1.  Objeto FORM instancia o Façade e passa
    como parâmetro os dados da tela ao Façade
    por meio dos setters nele implementados
2.  Façade declara método saveCustomerData(),
    que instância os objetos de validação (Conta,
    Endereço e Cartão de Crédito) e coordena as
    chamadas ao isValid() Save() dos objetos,
    retornando true ou false.
3.  Neste caso, mudanças de requisitos
    implicarão maiores modificações no Façade
    (pode requerer novos setters) e não no FORM
19              Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                  of Reusable OO Software - Gamma                Ivan Granja
20   Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
       of Reusable OO Software - Gamma                Ivan Granja
21   Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
       of Reusable OO Software - Gamma                Ivan Granja
22   Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
       of Reusable OO Software - Gamma                Ivan Granja
Implementação
•  Considere as seguintes questões ao
   implementar:
     – Reduzir o acoplamento entre clientes e
       subsistema
       •  Eventualmente, fazendo o Façade uma classe
          abstrata com subclasses concretas para diferentes
          implementações de um subsistema
     – Classes de subsistema públicas versus
       privadas
       •  Façade é parte da interface pública do subsistema

23                  Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                      of Reusable OO Software - Gamma                Ivan Granja
Exemplo
•  Um facade em um subsistema compilador:




24           Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
               of Reusable OO Software - Gamma                Ivan Granja
Exemplo




25   Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
       of Reusable OO Software - Gamma                Ivan Granja
Exemplo




26   Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
       of Reusable OO Software - Gamma                Ivan Granja
Exemplo




27   Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
       of Reusable OO Software - Gamma                Ivan Granja
Exemplo




28   Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
       of Reusable OO Software - Gamma                Ivan Granja
Exemplo




29   Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
       of Reusable OO Software - Gamma                Ivan Granja
Exemplo




30   Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
       of Reusable OO Software - Gamma                Ivan Granja
Mais sobre Façade
•  Por ser portar como uma interface de um
   sub-sistema, Façade pode oferecer vários
   serviços aos objetos clientes e não apenas
   um serviço, como mostram os dois
   exemplos.




31             Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
                 of Reusable OO Software - Gamma                Ivan Granja

Padrões-12 - Padrões Estruturais - Facade

  • 1.
    Padrões de Projeto Padrões Estruturais Facade/Façade/Fachada
  • 2.
    Facade/Façade/Fachada •  Provê umainterface unificada para um conjunto de interfaces em um subsitema. •  Facade ou Façade ou Fachada define uma interface de mais alto nível, que torna o subsistema mais fácil de se usar 2 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 3.
    Motivação •  Estruturar umsistema em subsistemas ajuda a reduzir a complexidade – Um objetivo de projeto comum é minimizar a comunicação e as dependências entre subsistemas. •  Uma forma de se alcançar isto é introduzindo um objeto FACADE, que provê uma interface única e simplificada às facilidades mais gerais de um subsistema 3 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 4.
    Motivação 4 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 5.
    Façade •  Suponha umsub- sistema (conjunto de pacotes e classes) que trabalham em conjunto para prover funcionalidade a clientes (ex: GUI ou Iterators) •  Para obter esta funcionalidade desejada, cada cliente terá que interagir com um conjunto de classe deste subsistema 5 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 6.
    Façade •  Problemas: – Se houver manutenções nas classes do sub- sistema, os clientes serão afetados. – Acoplamento Forte – Dificuldade de manutenção e extensão 6 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 7.
    Façade •  Solução – Implementar um classe Façade – Façade atua na intermediação (orquestração, coordenação) da funcionalidade desejada pelo cliente – Classe Façade é uma interface de alto nível (provedor de serviços), ou seja, abstrai o detalhes do sub-sistema para os clientes. 7 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 8.
    Façade •  Vantagens: –  Mudanças na classes podem afetar façade mas não o cliente –  Diminuição do acoplamento do cliente com a classes do subsistema –  Cliente usa o serviço do façade e não acopla-se diretamente com a implementação do serviço (classes do sub-sistema) 8 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 9.
    Motivação – CompilerFacade 9 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 10.
    Aplicação •  Use Façadequando: –  Deseja-se prover uma interface simples para um sistema complexo (útil para a maioria dos clientes...) –  Há muitas dependências entre clientes e as classes de implementação de uma abstração. Introduz-se um façade para desacoplá-los (independência e portabilidade) –  Deseja-se “estruturar em camadas” seus subsistemas (façade define um ponto de entrada para cada nível) 10 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 11.
    Estrutura 11 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 12.
    Participantes •  Façade (Compiler) –  Conhece quais classes de um subsistema são responsáveis por uma requisição –  Delega as requisições de clientes para os objetos apropriados do subsistema •  Classes do Subsistema (Scanner, Parser, ProgramNode etc) –  Implementam a funcionalidade do subsistema –  Realizam o trabalho atribuído pelo objeto Façade –  Desconhecem o Façade, isto é, não possuem referências a ele 12 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 13.
    Colaborações •  Clientes secomunicam com o subsistema enviando requisições ao Façade, que as direcionam aos objetos apropriados do subsistema •  Embora os objetos do subsistema realizem o trabalho real, pode ser que o Façade tenha que fazer a “tradução” da sua interface para as do subsistema •  Clientes que usam o Façade não têm que acessar os objetos do subsistema diretamente 13 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 14.
    Conseqüências •  Benefícios: 1.  Separa clientes dos componentes do subsistema, reduzindo o número de objetos que os clientes lidam e tornando o subsistema mais fácil de se usar 2.  Promove acoplamento fraco entre o subsistema e seus clientes. •  Acoplamento fraco permite que se mude os componentes de um subsistema sem afetar seus clientes. •  Além de ajudar a reduzir as dependências 3.  Não impede que aplicações usem diretamente as classes do subsistema, caso necessário 14 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 15.
    Exemplo •  Suponha umaaplicação com os seguintes requisitos – Recebe dados de um cliente (conta, endereço e cartão de crédito) por meio de um FORM – Valida as entradas – Grava os dados nos arquivos apropriados •  Para validar dos dados, há classes Conta, Endereço e Cartão de Crédito 15 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 16.
    FORM Cliente 16 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 17.
    Exemplo Seqüência 1.  Instancia os três objetos com os dados digitados no FORM 2.  Valida estes dados, usando métodos destes objetos - isValid() 3.  Grava os dados nos arquivos, usando métodos destes objetos – save() 17 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 18.
    Exemplo Sem Façade 1.  Objeto FORM deverá instanciar cada um dos objetos (Conta, Endereço e Cartão de Crédito) e coordenar a seqüência de chamadas aos métodos isValid() e save() destes três objetos 2.  Mudanças (ex. alterar a assinatura do método save() ou inclusão de mais dados no FORM que implicam em novo objeto para validação) implicará em alteração do objeto FORM 18 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 19.
    Exemplo Com Façade 1.  Objeto FORM instancia o Façade e passa como parâmetro os dados da tela ao Façade por meio dos setters nele implementados 2.  Façade declara método saveCustomerData(), que instância os objetos de validação (Conta, Endereço e Cartão de Crédito) e coordena as chamadas ao isValid() Save() dos objetos, retornando true ou false. 3.  Neste caso, mudanças de requisitos implicarão maiores modificações no Façade (pode requerer novos setters) e não no FORM 19 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 20.
    20 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 21.
    21 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 22.
    22 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 23.
    Implementação •  Considere asseguintes questões ao implementar: – Reduzir o acoplamento entre clientes e subsistema •  Eventualmente, fazendo o Façade uma classe abstrata com subclasses concretas para diferentes implementações de um subsistema – Classes de subsistema públicas versus privadas •  Façade é parte da interface pública do subsistema 23 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 24.
    Exemplo •  Um facadeem um subsistema compilador: 24 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 25.
    Exemplo 25 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 26.
    Exemplo 26 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 27.
    Exemplo 27 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 28.
    Exemplo 28 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 29.
    Exemplo 29 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 30.
    Exemplo 30 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 31.
    Mais sobre Façade • Por ser portar como uma interface de um sub-sistema, Façade pode oferecer vários serviços aos objetos clientes e não apenas um serviço, como mostram os dois exemplos. 31 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja