Upload
nicola-zagari
View
4.426
Download
0
Embed Size (px)
DESCRIPTION
Padrões de Projeto. Padrão Estrutural. Fachada/Façade.
Citation preview
Padrões de Projeto
Padrões Estruturais Facade/Façade/Fachada
2 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari Ivan Granja
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
3 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari 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
4 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari Ivan Granja
Motivação
5 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari 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
6 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari 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
7 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari 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.
8 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari 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)
9 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari Ivan Granja
Motivação – Compiler Facade
10 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari 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)
11 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari Ivan Granja
Estrutura
12 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari 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
13 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari 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
14 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari 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
15 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari 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
16 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari Ivan Granja
FORM Cliente
17 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari 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()
18 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari 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
19 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari 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
20 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari Ivan Granja
21 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari Ivan Granja
22 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari Ivan Granja
23 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari 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
24 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari Ivan Granja
Exemplo
• Um facade em um subsistema compilador:
25 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari Ivan Granja
Exemplo
26 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari Ivan Granja
Exemplo
27 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari Ivan Granja
Exemplo
28 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari Ivan Granja
Exemplo
29 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari Ivan Granja
Exemplo
30 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari Ivan Granja
Exemplo
31 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma
Eduardo N. F. Zagari 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.