A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Padrões de Projeto Aula 10 – Padrão Façade. Façade, em francês, significa fachada ◦ Fachada de prédio 2.

Apresentações semelhantes


Apresentação em tema: "Padrões de Projeto Aula 10 – Padrão Façade. Façade, em francês, significa fachada ◦ Fachada de prédio 2."— Transcrição da apresentação:

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

2 Façade, em francês, significa fachada ◦ Fachada de prédio 2

3 No mundo real Olhamos para prédio – Conseguimos ver a sua fachada – Ignorando o que está na parte de dentro 3

4 No mundo OO Queremos abstrair complexidade Reduzir acomplamento e dependências de sistemas a partir da fachada 4

5 HOTELARIA 5 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.

6 Mundo Real  Mundo OO Pense num sistema de hotelaria – Hóspede chega e faz suas solicitações: Agora, desejo uma suíte de frente para o mar Hoje, gostaria de ir à peça em cartaz no teatro municipal Amanhã, pretendo acordar tarde e gostaria que meu café da manhã fosse servido no quarto às 10h – Grande questão O hóspede faz as solicitações onde? A quem? 6

7 Hotelaria Solução sem Fachada Hospede (cliente) Serviço de quarto Serviço de transporte Serviço de entretenimento Serviço de reserva Desejo me hospedar em uma suíte, com varanda de frente para o mar Amanhã, pretendo acordar tarde, e por isso, gostaria que o meu café da manhã fosse servido no quarto as 10h. Hoje, gostaria de ir à uma peça que está em cartaz no teatro municipal; 7

8 Hotelaria Solução com Fachada Recepção do Hotel (Fachada) Serviço de quarto Serviço de transporte Serviço de entretenimento Serviço de reserva Desejo me hospedar em uma suíte, com varanda de frente para o mar Amanhã, pretendo acordar tarde, e por isso, gostaria que o meu café da manha fosse servido no quarto as 10h. Hoje, gostaria de ir à uma peça que esta em cartaz no teatro municipal; Hospede (Cliente) 8

9 Perguntas para reflexão Qual a diferença entre as soluções apresentadas? – Menos acoplamento (por que?) – Delegação a partir de composição (onde?) – Encapsulamento dos dados (de quem para quem?) – Uso de interfaces de comunicação (vantagens?) 9

10 Façade Fornece interface unificada para conjunto de interfaces de subsistema – Façade encapsula complexidade de subsistemas Define interface de nível mais alto que torna subsistemas mais fácéis de serem usados pelas classes cliente 10

11 Motivação Objetivo é diminuir acoplamento e dependência entre classes Usado quando se deseja interface simples para sistemas complexos ou para separar sistema em camadas 11

12 Motivação A Façade tem interface única e simplificada para recursos e facilidades mais gerais de um subsistema Ponto único de acesso a todas as funções dos subsistemas Classes cliente Classes do subsistema 12

13 Motivação Visão simples do sistema – Omite o que não é necessário Hóspede não precisa saber (diretamente) qual é o serviço de tranporte do hotel – Independência e portabilidade dos subsistemas COMO? – Troca de subsistemas sem impacto nas classes clientes » Não mexer na assinatura dos métodos » Hotel pode mudar de servidora de tranposte sem impacto para hóspede 13

14 Hotelaria Solução sem Fachada Hospede (cliente) Serviço de quarto Serviço de transporte Serviço de entretenimento Serviço de reserva Hoje, gostaria de ir à uma peça que está em cartaz no teatro municipal; Serviço de transporte O cliente sofre impacto da mudança no sistema 14

15 Hotelaria Solução com Fachada Recepção do Hotel (Fachada) Serviço de quarto Serviço de transporte Serviço de entretenimento Serviço de reserva Hoje, gostaria de ir à uma peça que esta em cartaz no teatro municipal; Hospede (Cliente) Serviço de transporte O cliente NÃO sofre impacto da mudança no sistema 15

16 Quando usar? Deseja-se prover interface simples para conjunto de subsistemas complexo Existem muitas dependências entre clientes e classes de subsistemas Deseja-se separar subsistema em camadas 16

17 Terminologia e Estrutura 17

18 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 18

19 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. 19

20 Consequências Subsistema mais fácil de se usar – Esconde componentes dos clientes – Reduz objetos que clientes lidam Enfraquece acoplamento – Entre subsistema e clientes Cliente pode usar subsistema diretamente – Se necessário 20

21 Configurando um Home-theater 21

22 Imagine um Home Theater 22

23 Imagine um Home Theater 1.Muitas classes 2.Muitas interações 3.Você precisa saber o funcionamento de tudo para saber usar corretamente 1.Quais métodos chamar para assistir um filme? 23

24 Para assistir um filme 1.Ligar a máquina de pipoca 2.Colocar a máquina de pipoca em funcionamento 3.Reduzir as luzes 4.Baixar a tela 5.Ligar o projetor 6.Configurar a entrada do projeto para DVD 7.Colocar o projetor em modo wide-screen 8.Ligar o amplificador de áudio 9.Configurar a entrada do amplificador para DVD 10.Configurar o amplificador para surround 11.Ajustar o amplificador para o volume médio (5) 12.Ligar o DVD Player 13.Acionar o play no DVD Player 24

25 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 pipoca 2.Colocar a máquina de pipoca em funcionamento 3.Reduzir as luzes 4.Baixar a tela 5.Ligar o projetor 6.Configurar a entrada do projeto para DVD 7.Colocar o projetor em modo wide-screen 8.Ligar o amplificador de áudio 9.Configurar a entrada do amplificador para DVD 10.Configurar o amplificador para surround 11.Ajustar o amplificador para o volume médio (5) 12.Ligar o DVD Player 13.Acionar o play no DVD Player 25

26 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 26

27 Solução para a complexidade A FACHADA + 27

28 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 28

29 Solução: a Fachada 29

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

31 Implementando a Fachada 31

32 Implementando a Fachada 32

33 Como a vovó assistiria o filme 33

34 Questões sobre a Fachada Encapsula as classes do subsistema? – Sim, mas não encapsula de maneira absoluta. Fornece uma interface simplificada para acessar suas funcionalidades. O cliente ainda pode acessar as funcionalidades do subsistema diretamente (por isso dizemos que o subsistema encapsula mas não o faz por completo); 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. 34

35 Resumindo As Fachadas, além de simplificar uma interface – Desconecta o cliente de um subsistema de componentes Uma Fachada é uma interface simplificada 35

36 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. 36

37 Exercício Considere as seguintes entidades/classes que compõem um computador: CPU, Memory, HardDrive. 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"); } 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"); } 37

38 Exercício Crie uma fachada que facilite ligar o computador. Para ligar o computador, você deve seguir a seguinte ordem: 1.Inicializar a CPU 2.Ler do disco rígido 3.Carregar uma informação da memória 4.Executar a CPU 5.Liberar memória public class HardDrive { public void read() { System.out.println("lendo dados do HD"); } public void write() { System.out.println("escrevendo dados no HD"); } 38

39 Referências – Capítulo 7 do livro “Padrões de Projeto – Use a Cabeça!” – Notas de aula da prof. Yuska Aguiar. 39


Carregar ppt "Padrões de Projeto Aula 10 – Padrão Façade. Façade, em francês, significa fachada ◦ Fachada de prédio 2."

Apresentações semelhantes


Anúncios Google