31
Padrões de Projeto Padrões Estruturais Facade/Façade/Fachada

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

Embed Size (px)

DESCRIPTION

Padrões de Projeto. Padrão Estrutural. Fachada/Façade.

Citation preview

Page 1: Padrões-12 - Padrões Estruturais - Facade

Padrões de Projeto

Padrões Estruturais Facade/Façade/Fachada

Page 2: Padrões-12 - Padrões Estruturais - Facade

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

Page 3: Padrões-12 - Padrões Estruturais - Facade

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

Page 4: Padrões-12 - Padrões Estruturais - Facade

4 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari Ivan Granja

Motivação

Page 5: Padrões-12 - Padrões Estruturais - Facade

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

Page 6: Padrões-12 - Padrões Estruturais - Facade

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

Page 7: Padrões-12 - Padrões Estruturais - Facade

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.

Page 8: Padrões-12 - Padrões Estruturais - Facade

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)

Page 9: Padrões-12 - Padrões Estruturais - Facade

9 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari Ivan Granja

Motivação – Compiler Facade

Page 10: Padrões-12 - Padrões Estruturais - 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)

Page 11: Padrões-12 - Padrões Estruturais - Facade

11 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari Ivan Granja

Estrutura

Page 12: Padrões-12 - Padrões Estruturais - Facade

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

Page 13: Padrões-12 - Padrões Estruturais - Facade

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

Page 14: Padrões-12 - Padrões Estruturais - Facade

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

Page 15: Padrões-12 - Padrões Estruturais - Facade

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

Page 16: Padrões-12 - Padrões Estruturais - Facade

16 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari Ivan Granja

FORM Cliente

Page 17: Padrões-12 - Padrões Estruturais - Facade

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()

Page 18: Padrões-12 - Padrões Estruturais - Facade

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

Page 19: Padrões-12 - Padrões Estruturais - Facade

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

Page 20: Padrões-12 - Padrões Estruturais - Facade

20 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari Ivan Granja

Page 21: Padrões-12 - Padrões Estruturais - Facade

21 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari Ivan Granja

Page 22: Padrões-12 - Padrões Estruturais - Facade

22 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari Ivan Granja

Page 23: Padrões-12 - Padrões Estruturais - Facade

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

Page 24: Padrões-12 - Padrões Estruturais - Facade

24 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari Ivan Granja

Exemplo

• Um facade em um subsistema compilador:

Page 25: Padrões-12 - Padrões Estruturais - Facade

25 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari Ivan Granja

Exemplo

Page 26: Padrões-12 - Padrões Estruturais - Facade

26 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari Ivan Granja

Exemplo

Page 27: Padrões-12 - Padrões Estruturais - Facade

27 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari Ivan Granja

Exemplo

Page 28: Padrões-12 - Padrões Estruturais - Facade

28 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari Ivan Granja

Exemplo

Page 29: Padrões-12 - Padrões Estruturais - Facade

29 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari Ivan Granja

Exemplo

Page 30: Padrões-12 - Padrões Estruturais - Facade

30 Livro Texto: Design Pattern - Elements of Reusable OO Software - Gamma

Eduardo N. F. Zagari Ivan Granja

Exemplo

Page 31: Padrões-12 - Padrões Estruturais - Facade

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.