SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

Spring Boot Actuator 2.0 & Micrometer
Spring Boot Actuator 2.0 & MicrometerSpring Boot Actuator 2.0 & Micrometer
Spring Boot Actuator 2.0 & MicrometerToshiaki Maki
 
MOM - Message Oriented Middleware
MOM - Message Oriented MiddlewareMOM - Message Oriented Middleware
MOM - Message Oriented MiddlewarePeter R. Egli
 
Sprytniejsze testowanie kodu java ze spock framework (zaawansowane techniki) ...
Sprytniejsze testowanie kodu java ze spock framework (zaawansowane techniki) ...Sprytniejsze testowanie kodu java ze spock framework (zaawansowane techniki) ...
Sprytniejsze testowanie kodu java ze spock framework (zaawansowane techniki) ...PROIDEA
 
SSTIC 2019 - V2G injector: Whispering to cars and charging units through the ...
SSTIC 2019 - V2G injector: Whispering to cars and charging units through the ...SSTIC 2019 - V2G injector: Whispering to cars and charging units through the ...
SSTIC 2019 - V2G injector: Whispering to cars and charging units through the ...📡 Sebastien Dudek
 
Cluster e replicação em banco de dados
Cluster e replicação em banco de dadosCluster e replicação em banco de dados
Cluster e replicação em banco de dadosSuissa
 
Java와 go 간의 병렬 프로그램 성능 비교
Java와 go 간의 병렬 프로그램 성능 비교Java와 go 간의 병렬 프로그램 성능 비교
Java와 go 간의 병렬 프로그램 성능 비교Daniel Lim
 
Enterprise Integration Patterns Overview
Enterprise Integration Patterns OverviewEnterprise Integration Patterns Overview
Enterprise Integration Patterns Overviewecomify GmbH
 
Getting Started with Infrastructure-as-Code
Getting Started with Infrastructure-as-CodeGetting Started with Infrastructure-as-Code
Getting Started with Infrastructure-as-CodeAll Things Open
 
Micro services Architecture
Micro services ArchitectureMicro services Architecture
Micro services ArchitectureAraf Karsh Hamid
 
Padrões de Integração de Sistemas com Spring Integration
Padrões de Integração de Sistemas com Spring IntegrationPadrões de Integração de Sistemas com Spring Integration
Padrões de Integração de Sistemas com Spring IntegrationHelder da Rocha
 
Publish-Subscribe Middlewares
Publish-Subscribe MiddlewaresPublish-Subscribe Middlewares
Publish-Subscribe Middlewareshome
 
[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEP
[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEP[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEP
[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEPKTH, 케이티하이텔
 
リンクリゾルバの仕組み
リンクリゾルバの仕組みリンクリゾルバの仕組み
リンクリゾルバの仕組みWataru ONO
 
Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)Eric SIBER
 
Spring Cloud: Why? How? What?
Spring Cloud: Why? How? What?Spring Cloud: Why? How? What?
Spring Cloud: Why? How? What?Orkhan Gasimov
 
MQ Guide France - IBM MQ and Containers
MQ Guide France - IBM MQ and ContainersMQ Guide France - IBM MQ and Containers
MQ Guide France - IBM MQ and ContainersRobert Parker
 

Mais procurados (20)

Spring Boot Actuator 2.0 & Micrometer
Spring Boot Actuator 2.0 & MicrometerSpring Boot Actuator 2.0 & Micrometer
Spring Boot Actuator 2.0 & Micrometer
 
MOM - Message Oriented Middleware
MOM - Message Oriented MiddlewareMOM - Message Oriented Middleware
MOM - Message Oriented Middleware
 
Sprytniejsze testowanie kodu java ze spock framework (zaawansowane techniki) ...
Sprytniejsze testowanie kodu java ze spock framework (zaawansowane techniki) ...Sprytniejsze testowanie kodu java ze spock framework (zaawansowane techniki) ...
Sprytniejsze testowanie kodu java ze spock framework (zaawansowane techniki) ...
 
SSTIC 2019 - V2G injector: Whispering to cars and charging units through the ...
SSTIC 2019 - V2G injector: Whispering to cars and charging units through the ...SSTIC 2019 - V2G injector: Whispering to cars and charging units through the ...
SSTIC 2019 - V2G injector: Whispering to cars and charging units through the ...
 
Cluster e replicação em banco de dados
Cluster e replicação em banco de dadosCluster e replicação em banco de dados
Cluster e replicação em banco de dados
 
Java와 go 간의 병렬 프로그램 성능 비교
Java와 go 간의 병렬 프로그램 성능 비교Java와 go 간의 병렬 프로그램 성능 비교
Java와 go 간의 병렬 프로그램 성능 비교
 
Enterprise Integration Patterns Overview
Enterprise Integration Patterns OverviewEnterprise Integration Patterns Overview
Enterprise Integration Patterns Overview
 
Getting Started with Infrastructure-as-Code
Getting Started with Infrastructure-as-CodeGetting Started with Infrastructure-as-Code
Getting Started with Infrastructure-as-Code
 
Micro services Architecture
Micro services ArchitectureMicro services Architecture
Micro services Architecture
 
3 Tier Architecture
3 Tier Architecture3 Tier Architecture
3 Tier Architecture
 
Padrões de Integração de Sistemas com Spring Integration
Padrões de Integração de Sistemas com Spring IntegrationPadrões de Integração de Sistemas com Spring Integration
Padrões de Integração de Sistemas com Spring Integration
 
Publish-Subscribe Middlewares
Publish-Subscribe MiddlewaresPublish-Subscribe Middlewares
Publish-Subscribe Middlewares
 
[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEP
[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEP[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEP
[H3 2012] 오픈 소스로 구현하는 실시간 데이터 처리를 위한 CEP
 
Grasp Patterns.ppt
Grasp Patterns.pptGrasp Patterns.ppt
Grasp Patterns.ppt
 
リンクリゾルバの仕組み
リンクリゾルバの仕組みリンクリゾルバの仕組み
リンクリゾルバの仕組み
 
Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)Spring Meetup Paris - Back to the basics of Spring (Boot)
Spring Meetup Paris - Back to the basics of Spring (Boot)
 
IBM-Power10-Brochure-Covenco.pdf
IBM-Power10-Brochure-Covenco.pdfIBM-Power10-Brochure-Covenco.pdf
IBM-Power10-Brochure-Covenco.pdf
 
Spring Cloud: Why? How? What?
Spring Cloud: Why? How? What?Spring Cloud: Why? How? What?
Spring Cloud: Why? How? What?
 
Architecture .net
Architecture  .netArchitecture  .net
Architecture .net
 
MQ Guide France - IBM MQ and Containers
MQ Guide France - IBM MQ and ContainersMQ Guide France - IBM MQ and Containers
MQ Guide France - IBM MQ and Containers
 

Destaque

SOA e Web Services
SOA e Web ServicesSOA e Web Services
SOA e Web Servicessergiocrespo
 
Padrões-11 - Padrões Estruturais - Adaptador
Padrões-11 - Padrões Estruturais - AdaptadorPadrões-11 - Padrões Estruturais - Adaptador
Padrões-11 - Padrões Estruturais - AdaptadorEduardo Nicola F. Zagari
 
Padrões-08 - Padrões Criacionais - Abstract Factory
Padrões-08 - Padrões Criacionais - Abstract FactoryPadrões-08 - Padrões Criacionais - Abstract Factory
Padrões-08 - Padrões Criacionais - Abstract FactoryEduardo Nicola F. Zagari
 
Padrões-10 - Padrões Criacionais - Singleton
Padrões-10 - Padrões Criacionais - SingletonPadrões-10 - Padrões Criacionais - Singleton
Padrões-10 - Padrões Criacionais - SingletonEduardo Nicola F. Zagari
 
Padrões-09 - Padrões Criacionais - Factory Method
Padrões-09 - Padrões Criacionais - Factory MethodPadrões-09 - Padrões Criacionais - Factory Method
Padrões-09 - Padrões Criacionais - Factory MethodEduardo Nicola F. Zagari
 
SO-11 Winux: Laboratório de Sistemas Operacionais
SO-11 Winux: Laboratório de Sistemas OperacionaisSO-11 Winux: Laboratório de Sistemas Operacionais
SO-11 Winux: Laboratório de Sistemas OperacionaisEduardo Nicola F. Zagari
 
Padrões-03 - Padrões Arquiteturais - Pipes e Filtros
Padrões-03 - Padrões Arquiteturais - Pipes e FiltrosPadrões-03 - Padrões Arquiteturais - Pipes e Filtros
Padrões-03 - Padrões Arquiteturais - Pipes e FiltrosEduardo Nicola F. Zagari
 
Padrões-04 - Padrões Arquiteturais - Broker
Padrões-04 - Padrões Arquiteturais - BrokerPadrões-04 - Padrões Arquiteturais - Broker
Padrões-04 - Padrões Arquiteturais - BrokerEduardo Nicola F. Zagari
 
Padrões-05 - Padrões Arquiteturais - MVC
Padrões-05 - Padrões Arquiteturais - MVCPadrões-05 - Padrões Arquiteturais - MVC
Padrões-05 - Padrões Arquiteturais - MVCEduardo Nicola F. Zagari
 
Padrões-13 - Padrões Estruturais - Proxy
Padrões-13 - Padrões Estruturais - ProxyPadrões-13 - Padrões Estruturais - Proxy
Padrões-13 - Padrões Estruturais - ProxyEduardo Nicola F. Zagari
 

Destaque (20)

Padrões-07 - Padrões Criacionais
Padrões-07 - Padrões CriacionaisPadrões-07 - Padrões Criacionais
Padrões-07 - Padrões Criacionais
 
SOA e Web Services
SOA e Web ServicesSOA e Web Services
SOA e Web Services
 
Padrões-11 - Padrões Estruturais - Adaptador
Padrões-11 - Padrões Estruturais - AdaptadorPadrões-11 - Padrões Estruturais - Adaptador
Padrões-11 - Padrões Estruturais - Adaptador
 
Padrões-01 - Introdução
Padrões-01 - IntroduçãoPadrões-01 - Introdução
Padrões-01 - Introdução
 
Padrões-08 - Padrões Criacionais - Abstract Factory
Padrões-08 - Padrões Criacionais - Abstract FactoryPadrões-08 - Padrões Criacionais - Abstract Factory
Padrões-08 - Padrões Criacionais - Abstract Factory
 
Padrões-10 - Padrões Criacionais - Singleton
Padrões-10 - Padrões Criacionais - SingletonPadrões-10 - Padrões Criacionais - Singleton
Padrões-10 - Padrões Criacionais - Singleton
 
ICC-07 Softwares - Introdução
ICC-07 Softwares - IntroduçãoICC-07 Softwares - Introdução
ICC-07 Softwares - Introdução
 
Padrões-09 - Padrões Criacionais - Factory Method
Padrões-09 - Padrões Criacionais - Factory MethodPadrões-09 - Padrões Criacionais - Factory Method
Padrões-09 - Padrões Criacionais - Factory Method
 
SO-11 Winux: Laboratório de Sistemas Operacionais
SO-11 Winux: Laboratório de Sistemas OperacionaisSO-11 Winux: Laboratório de Sistemas Operacionais
SO-11 Winux: Laboratório de Sistemas Operacionais
 
Uma Breve Introdução ao MongoDB
Uma Breve Introdução ao MongoDBUma Breve Introdução ao MongoDB
Uma Breve Introdução ao MongoDB
 
Classificação de Documentos
Classificação de DocumentosClassificação de Documentos
Classificação de Documentos
 
Padrões-03 - Padrões Arquiteturais - Pipes e Filtros
Padrões-03 - Padrões Arquiteturais - Pipes e FiltrosPadrões-03 - Padrões Arquiteturais - Pipes e Filtros
Padrões-03 - Padrões Arquiteturais - Pipes e Filtros
 
Padrões-04 - Padrões Arquiteturais - Broker
Padrões-04 - Padrões Arquiteturais - BrokerPadrões-04 - Padrões Arquiteturais - Broker
Padrões-04 - Padrões Arquiteturais - Broker
 
Padrões-05 - Padrões Arquiteturais - MVC
Padrões-05 - Padrões Arquiteturais - MVCPadrões-05 - Padrões Arquiteturais - MVC
Padrões-05 - Padrões Arquiteturais - MVC
 
ICC-05 Álgebra Booleana
ICC-05 Álgebra BooleanaICC-05 Álgebra Booleana
ICC-05 Álgebra Booleana
 
Padrão Fachada
Padrão FachadaPadrão Fachada
Padrão Fachada
 
Padrões-13 - Padrões Estruturais - Proxy
Padrões-13 - Padrões Estruturais - ProxyPadrões-13 - Padrões Estruturais - Proxy
Padrões-13 - Padrões Estruturais - Proxy
 
ICC-06 Periféricos - Introdução
ICC-06 Periféricos - IntroduçãoICC-06 Periféricos - Introdução
ICC-06 Periféricos - Introdução
 
ICC-02 Evolução dos Computadores
ICC-02 Evolução dos ComputadoresICC-02 Evolução dos Computadores
ICC-02 Evolução dos Computadores
 
ICC-01 História dos Computadores
ICC-01 História dos ComputadoresICC-01 História dos Computadores
ICC-01 História dos Computadores
 

Semelhante a Padrões-12 - Padrões Estruturais - Facade

Padrões-06 - Padrões Arquiteturais - Microkernel
Padrões-06 - Padrões Arquiteturais - MicrokernelPadrões-06 - Padrões Arquiteturais - Microkernel
Padrões-06 - Padrões Arquiteturais - MicrokernelEduardo Nicola F. Zagari
 
Reutilização
ReutilizaçãoReutilização
Reutilizaçãoemjorge
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfAndreCosta502039
 
Tendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareTendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareNorberto Santos
 
Aula - Arquiteturas de aplicações móveis
Aula - Arquiteturas de aplicações móveisAula - Arquiteturas de aplicações móveis
Aula - Arquiteturas de aplicações móveisJanynne Gomes
 
Padrões-02 - Padrões Arquiteturais - Camadas
Padrões-02 - Padrões Arquiteturais - CamadasPadrões-02 - Padrões Arquiteturais - Camadas
Padrões-02 - Padrões Arquiteturais - CamadasEduardo Nicola F. Zagari
 
Frameworks de desenvolvimento web
Frameworks de desenvolvimento webFrameworks de desenvolvimento web
Frameworks de desenvolvimento webArlindo Santos
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projetoejdn1
 
Frameworks da web - Uma ferramenta de reutilização de software
Frameworks da web - Uma ferramenta de reutilização de softwareFrameworks da web - Uma ferramenta de reutilização de software
Frameworks da web - Uma ferramenta de reutilização de softwareThomas Kanzig
 
Microsoft ALM = Produtividade
Microsoft ALM = ProdutividadeMicrosoft ALM = Produtividade
Microsoft ALM = ProdutividadeAdriano Bertucci
 
Lightning components - o que são, quais os seus objectivos e exemplos práticos
Lightning components - o que são, quais os seus objectivos e exemplos práticosLightning components - o que são, quais os seus objectivos e exemplos práticos
Lightning components - o que são, quais os seus objectivos e exemplos práticosDom Digital
 
Paradigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleParadigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleAdriano Teixeira de Souza
 
Padrões de Projeto: Adapter
Padrões de Projeto: AdapterPadrões de Projeto: Adapter
Padrões de Projeto: AdapterMessias Batista
 

Semelhante a Padrões-12 - Padrões Estruturais - Facade (20)

Padrões-06 - Padrões Arquiteturais - Microkernel
Padrões-06 - Padrões Arquiteturais - MicrokernelPadrões-06 - Padrões Arquiteturais - Microkernel
Padrões-06 - Padrões Arquiteturais - Microkernel
 
JAVA REFLETCION
JAVA REFLETCIONJAVA REFLETCION
JAVA REFLETCION
 
Reutilização
ReutilizaçãoReutilização
Reutilização
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdf
 
Tendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de SoftwareTendências e Dicas para o Desenvolvimento de Software
Tendências e Dicas para o Desenvolvimento de Software
 
Aula - Arquiteturas de aplicações móveis
Aula - Arquiteturas de aplicações móveisAula - Arquiteturas de aplicações móveis
Aula - Arquiteturas de aplicações móveis
 
Padrões-02 - Padrões Arquiteturais - Camadas
Padrões-02 - Padrões Arquiteturais - CamadasPadrões-02 - Padrões Arquiteturais - Camadas
Padrões-02 - Padrões Arquiteturais - Camadas
 
Frameworks de desenvolvimento web
Frameworks de desenvolvimento webFrameworks de desenvolvimento web
Frameworks de desenvolvimento web
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projeto
 
Frameworks da web - Uma ferramenta de reutilização de software
Frameworks da web - Uma ferramenta de reutilização de softwareFrameworks da web - Uma ferramenta de reutilização de software
Frameworks da web - Uma ferramenta de reutilização de software
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Microsoft ALM = Produtividade
Microsoft ALM = ProdutividadeMicrosoft ALM = Produtividade
Microsoft ALM = Produtividade
 
Arquitetura de sistemas web
Arquitetura de sistemas webArquitetura de sistemas web
Arquitetura de sistemas web
 
Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018
 
FDD
FDDFDD
FDD
 
Travalho versao final
Travalho versao finalTravalho versao final
Travalho versao final
 
Lightning components - o que são, quais os seus objectivos e exemplos práticos
Lightning components - o que são, quais os seus objectivos e exemplos práticosLightning components - o que são, quais os seus objectivos e exemplos práticos
Lightning components - o que são, quais os seus objectivos e exemplos práticos
 
Paradigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleParadigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de Controle
 
Macro Arquitetura de Software
Macro Arquitetura de SoftwareMacro Arquitetura de Software
Macro Arquitetura de Software
 
Padrões de Projeto: Adapter
Padrões de Projeto: AdapterPadrões de Projeto: Adapter
Padrões de Projeto: Adapter
 

Mais de Eduardo Nicola F. Zagari

Onix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
Onix: Sistema Integrado de Gerˆencia para Redes SobrepostasOnix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
Onix: Sistema Integrado de Gerˆencia para Redes SobrepostasEduardo Nicola F. Zagari
 
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLSUma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLSEduardo Nicola F. Zagari
 
Uma Implementação do MPLS para Redes Linux
Uma Implementação do MPLS para Redes LinuxUma Implementação do MPLS para Redes Linux
Uma Implementação do MPLS para Redes LinuxEduardo Nicola F. Zagari
 
Módulo de Estudos e Treinamento em Tempo Real
Módulo de Estudos e Treinamento em Tempo RealMódulo de Estudos e Treinamento em Tempo Real
Módulo de Estudos e Treinamento em Tempo RealEduardo Nicola F. Zagari
 
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...Eduardo Nicola F. Zagari
 
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...Eduardo Nicola F. Zagari
 
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...Eduardo Nicola F. Zagari
 

Mais de Eduardo Nicola F. Zagari (11)

Introdução à Linguagem Ruby
Introdução à Linguagem RubyIntrodução à Linguagem Ruby
Introdução à Linguagem Ruby
 
Onix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
Onix: Sistema Integrado de Gerˆencia para Redes SobrepostasOnix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
Onix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
 
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLSUma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
 
Uma Implementação do MPLS para Redes Linux
Uma Implementação do MPLS para Redes LinuxUma Implementação do MPLS para Redes Linux
Uma Implementação do MPLS para Redes Linux
 
Módulo de Estudos e Treinamento em Tempo Real
Módulo de Estudos e Treinamento em Tempo RealMódulo de Estudos e Treinamento em Tempo Real
Módulo de Estudos e Treinamento em Tempo Real
 
Módulo de Estudos em Tempo Real
Módulo de Estudos em Tempo RealMódulo de Estudos em Tempo Real
Módulo de Estudos em Tempo Real
 
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
 
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
 
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
 
ICC-03 Organização dos Computadores
ICC-03 Organização dos ComputadoresICC-03 Organização dos Computadores
ICC-03 Organização dos Computadores
 
ICC-04 Sistemas Numéricos
ICC-04 Sistemas NuméricosICC-04 Sistemas Numéricos
ICC-04 Sistemas Numéricos
 

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ê 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
  • 3. 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
  • 4. Motivação 4 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 5. 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
  • 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 – Compiler Facade 9 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma Ivan Granja
  • 10. 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
  • 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 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
  • 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 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
  • 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 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
  • 24. Exemplo •  Um facade em 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