padrões de projeto aula 10 – padrão façade. padrÃo faÇade padrões de projeto - façade por...

23
Padrões de Projeto Aula 10 – Padrão Façade

Upload: ana-julia-damasio-mirandela

Post on 07-Apr-2016

226 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Padrões de Projeto Aula 10 – Padrão Façade. PADRÃO FAÇADE Padrões de Projeto - Façade Por que não tornar as coisas mais simples? Alteração de uma interface

Padrões de ProjetoAula 10 – Padrão Façade

Page 2: Padrões de Projeto Aula 10 – Padrão Façade. PADRÃO FAÇADE Padrões de Projeto - Façade Por que não tornar as coisas mais simples? Alteração de uma interface

Padr

ões d

e Pr

ojet

o - F

açad

e

PADRÃO FAÇADE

Por que não tornar as coisas mais simples?

Alteração de uma interface com a intenção de simplificá-la. Oculta a complexidade de um conjunto de Classes.

Page 3: Padrões de Projeto Aula 10 – Padrão Façade. PADRÃO FAÇADE Padrões de Projeto - Façade Por que não tornar as coisas mais simples? Alteração de uma interface

Padr

ões d

e Pr

ojet

o - F

açad

e

Imagine um Home Theater

Page 4: Padrões de Projeto Aula 10 – Padrão Façade. PADRÃO FAÇADE Padrões de Projeto - Façade Por que não tornar as coisas mais simples? Alteração de uma interface

Padr

ões d

e Pr

ojet

o - F

açad

e

Imagine um Home Theater

1. Muitas classes2. Muitas interações3. Você precisa saber o funcionamento de tudo para saber usar corretamente

1. Quais métodos chamar para assistir um filme?

Page 5: Padrões de Projeto Aula 10 – Padrão Façade. PADRÃO FAÇADE Padrões de Projeto - Façade Por que não tornar as coisas mais simples? Alteração de uma interface

Padr

ões d

e Pr

ojet

o - F

açad

e

Para assistir um filme1. Ligar a máquina de pipoca2. Colocar a máquina de pipoca em funcionamento3. Reduzir as luzes4. Baixar a tela5. Ligar o projetor6. Configurar a entrada do projeto para DVD7. Colocar o projetor em modo wide-screen8. Ligar o amplificador de áudio9. Configurar a entrada do amplificador para DVD10. Configurar o amplificador para surround11. Ajustar o amplificador para o volume médio (5)12. Ligar o DVD Player13. Acionar o play no DVD Player

Page 6: Padrões de Projeto Aula 10 – Padrão Façade. PADRÃO FAÇADE Padrões de Projeto - Façade Por que não tornar as coisas mais simples? Alteração de uma interface

Padr

ões d

e Pr

ojet

o - F

açad

e

Para assistir um filme (em Java)1. pipoqueira.ligar();2. pipoqueira.cozinhar();3. luz.dim(10);4. tela.descer();5. projetor.ligar();6. projetor.setInput(dvdPlayer);7. projetor.modoWideSreen();

8. amplificador.ligar();9. amplificador.setDVD(dvdPlayer);10. amplificador.setSurroundAudio()

;11. amplificador.setVolume(5);

12. dvdPlayer.ligar();13. dvdPlayer.play(filme);

1. Ligar a máquina de pipoca2. Colocar a máquina de pipoca em

funcionamento3. Reduzir as luzes4. Baixar a tela5. Ligar o projetor6. Configurar a entrada do projeto para

DVD7. Colocar o projetor em modo wide-

screen8. Ligar o amplificador de áudio9. Configurar a entrada do amplificador

para DVD10. Configurar o amplificador para

surround11. Ajustar o amplificador para o volume

médio (5)12. Ligar o DVD Player13. Acionar o play no DVD Player

Page 7: Padrões de Projeto Aula 10 – Padrão Façade. PADRÃO FAÇADE Padrões de Projeto - Façade Por que não tornar as coisas mais simples? Alteração de uma interface

Padr

ões d

e Pr

ojet

o - F

açad

e

Ainda tem mais...• Neste tipo de situação ainda há uma ordem para fazer tudo• Ao final pode-se precisar fazer as ações em ordem inversa• E para ouvir um CD ou rádio?

• Se precisar atualizar o sistema terá que aprender um novo algoritmo

Page 8: Padrões de Projeto Aula 10 – Padrão Façade. PADRÃO FAÇADE Padrões de Projeto - Façade Por que não tornar as coisas mais simples? Alteração de uma interface

Padr

ões d

e Pr

ojet

o - F

açad

e

Solução para a complexidade• A FACHADA

+

Page 9: Padrões de Projeto Aula 10 – Padrão Façade. PADRÃO FAÇADE Padrões de Projeto - Façade Por que não tornar as coisas mais simples? Alteração de uma interface

Padr

ões d

e Pr

ojet

o - F

açad

e

A Fachada

• Uma classe que exponha somente alguns métodos simples:• assistirFilme()• pararFilme()

• Trata os componentes do Home Theater como um subsistema• Aciona as diversas partes necessárias para implementar o

método assistirFilme()

• O cliente assim pode usar os métodos da Fachada e não do subsistema

• Para assistir um filme basta acionar um método que se comunica com todo o subsistema

Page 10: Padrões de Projeto Aula 10 – Padrão Façade. PADRÃO FAÇADE Padrões de Projeto - Façade Por que não tornar as coisas mais simples? Alteração de uma interface

Padr

ões d

e Pr

ojet

o - F

açad

e

Solução: a Fachada

Page 11: Padrões de Projeto Aula 10 – Padrão Façade. PADRÃO FAÇADE Padrões de Projeto - Façade Por que não tornar as coisas mais simples? Alteração de uma interface

Padr

ões d

e Pr

ojet

o - F

açad

e

A Fachada• Preserva o acesso direto ao subsistema, mas...• Você ainda pode usar os métodos de cada aparelho

Page 12: Padrões de Projeto Aula 10 – Padrão Façade. PADRÃO FAÇADE Padrões de Projeto - Façade Por que não tornar as coisas mais simples? Alteração de uma interface

Padr

ões d

e Pr

ojet

o - F

açad

e

Implementando a Fachada

Page 13: Padrões de Projeto Aula 10 – Padrão Façade. PADRÃO FAÇADE Padrões de Projeto - Façade Por que não tornar as coisas mais simples? Alteração de uma interface

Padr

ões d

e Pr

ojet

o - F

açad

e

Implementando a Fachada

Page 14: Padrões de Projeto Aula 10 – Padrão Façade. PADRÃO FAÇADE Padrões de Projeto - Façade Por que não tornar as coisas mais simples? Alteração de uma interface

Padr

ões d

e Pr

ojet

o - F

açad

e

Como a vovó assistiria o filme

Page 15: Padrões de Projeto Aula 10 – Padrão Façade. PADRÃO FAÇADE Padrões de Projeto - Façade Por que não tornar as coisas mais simples? Alteração de uma interface

Padr

ões d

e Pr

ojet

o - F

açad

e

Questões sobre a Fachada• Encapsula as classes do subsistema?• Não. Apenas fornecem uma interface simplificada para acessar suas

funcionalidades. Mas, o cliente ainda pode acessar as funcionalidades do subsistema diretamente (por isso dizemos que o subsistema não é encapsulado);

• Acrescenta funcionalidade?• Nada impede que uma fachada incorpore sua “própria inteligência” além de

utilizar o subsistema;• Cada subsistema possui somente um fachada?• Não necessariamente. Ele pode ter quantas julgar necessário;

• Qual o benefício da fachada além de fornecer uma interface simples?• Baixo acoplamento. Suponha que você trocou o seu Home Theater todo,

comprando novos componentes com interfaces diferentes... Se o cliente estiver codificado acessando a fachada, ele não precisará ser alterado, apenas a fachada;

• Qual a diferença da Fachada para o Adapter?• O objetivo da fachada é simplificar o acesso, e o do adapter é alterar as interfaces

para tornar possível o acesso.

Page 16: Padrões de Projeto Aula 10 – Padrão Façade. PADRÃO FAÇADE Padrões de Projeto - Façade Por que não tornar as coisas mais simples? Alteração de uma interface

Padr

ões d

e Pr

ojet

o - F

açad

e

Resumindo• As Fachadas, além de simplificar uma interface• Desconecta o cliente de um subsistema de componentes

• Uma Fachada simplifica e um Adapter converte uma interface para algo diferente

Page 17: Padrões de Projeto Aula 10 – Padrão Façade. PADRÃO FAÇADE Padrões de Projeto - Façade Por que não tornar as coisas mais simples? Alteração de uma interface

Padr

ões d

e Pr

ojet

o - F

açad

e

Definição

O padrão Façade fornece uma interface unificada e simplificada para um conjunto de

interfaces em um subsistema. O Façade define uma interface de nível mais alto que facilita a

utilização do subsistema.

Page 18: Padrões de Projeto Aula 10 – Padrão Façade. PADRÃO FAÇADE Padrões de Projeto - Façade Por que não tornar as coisas mais simples? Alteração de uma interface

Padr

ões d

e Pr

ojet

o - F

açad

e

Terminologia e Estrutura

Page 19: Padrões de Projeto Aula 10 – Padrão Façade. PADRÃO FAÇADE Padrões de Projeto - Façade Por que não tornar as coisas mais simples? Alteração de uma interface

Padr

ões d

e Pr

ojet

o - F

açad

e

Participantes• Fachada• Conhece quais as classes do subsistema são responsáveis pelo

atendimento de uma solicitação• Classes de Subsistema• Implementam a funcionalidade do subsistema • Encarregam-se do trabalho atribuído a elas pelo objeto Fachada• Não têm conhecimento da Fachada, ou seja, não possuem

referência para a mesma

Page 20: Padrões de Projeto Aula 10 – Padrão Façade. PADRÃO FAÇADE Padrões de Projeto - Façade Por que não tornar as coisas mais simples? Alteração de uma interface

Padr

ões d

e Pr

ojet

o - F

açad

e

Colaborações• Os clientes se comunicam com um subsistema através do

envio de solicitações para a Fachada, a qual repassa para os objetos apropriados do subsistema. Embora os objetos do subsistema executem o trabalho real, a fachada pode ter que efetuar trabalho próprio dela para traduzir a sua interface para as interfaces do subsistema;

• Os clientes que usam a fachada não têm que acessar os objetos do subsistema diretamente.

Page 21: Padrões de Projeto Aula 10 – Padrão Façade. PADRÃO FAÇADE Padrões de Projeto - Façade Por que não tornar as coisas mais simples? Alteração de uma interface

Padr

ões d

e Pr

ojet

o - F

açad

e

public class Cpu{ public void start(){

System.out.println("inicialização inicial");} public void execute(){

System.out.println("executa algo no processador"); } public void load() {

System.out.println("carrega registrador"); } public void free() {

System.out.println("libera registradores"); }

}

• Considere as seguintes entidades/classes que compõem um computador: CPU, Memory, HardDrive.

public class Memory { public void load() {

System.out.println("carregando dados na memória"); } public void free() {

System.out.println("liberando dados da memória"); }

}

Exercício

Page 22: Padrões de Projeto Aula 10 – Padrão Façade. PADRÃO FAÇADE Padrões de Projeto - Façade Por que não tornar as coisas mais simples? Alteração de uma interface

Padr

ões d

e Pr

ojet

o - F

açad

e

Exercíciopublic class HardDrive { public void read() { System.out.println("lendo dados do HD"); } public void write() { System.out.println("escrevendo dados no HD"); } }

• Crie uma fachada que facilite ligar o computador.• Para ligar o computador, você deve seguir a seguinte ordem:

1. Inicializar a CPU2. Ler do disco rígido3. Carregar uma informação da memória4. Executar a CPU5. Liberar memória

Page 23: Padrões de Projeto Aula 10 – Padrão Façade. PADRÃO FAÇADE Padrões de Projeto - Façade Por que não tornar as coisas mais simples? Alteração de uma interface

Padr

ões d

e Pr

ojet

o - F

açad

e

Referências• [1] Capítulo 7 do livro “Padrões de Projeto – Use a Cabeça!”