Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouCélia Carreira Ramires Alterado mais de 6 anos atrás
1
"Você acha que conhece a pessoa, aí você percebe que era tudo fachada
- Lex Luthor POO Façade Prof. Eduardo Falcão
2
Façade, em francês, significa fachada
Fachada de prédio
3
No mundo real Olhamos para prédio Conseguimos ver a sua fachada
Ignorando o que está na parte de dentro
4
No mundo OO Queremos abstrair complexidade
Reduzir acomplamento e dependências de sistemas a partir da fachada
5
Padrão Façade Hotelaria 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?
7
Hotelaria Solução sem Fachada
Amanhã, pretendo acordar tarde, e por isso, gostaria que o meu café da manhã fosse servido no quarto as 10h. Desejo me hospedar em uma suíte, com varanda de frente para o mar Hospede (cliente) Serviço de reserva Serviço de transporte Serviço de entretenimento Serviço de quarto Hoje , gostaria de ir à uma peça que está em cartaz no teatro municipal;
8
Hotelaria Solução com Fachada
Hospede (Cliente) 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; Recepção do Hotel (Fachada) Serviço de reserva Serviço de transporte Serviço de entretenimento Serviço de quarto
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?)
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
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
12
Motivação Classes cliente Classes do subsistema 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
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
14
Hotelaria Solução sem Fachada
O cliente sofre impacto da mudança no sistema Hospede (cliente) Serviço de reserva Serviço de transporte Serviço de transporte Serviço de entretenimento Serviço de quarto Hoje , gostaria de ir à uma peça que está em cartaz no teatro municipal;
15
Hotelaria Solução com Fachada
Hospede (Cliente) O cliente NÃO sofre impacto da mudança no sistema Hoje , gostaria de ir à uma peça que esta em cartaz no teatro municipal; Recepção do Hotel (Fachada) Serviço de reserva Serviço de transporte Serviço de transporte Serviço de entretenimento Serviço de quarto
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
17
Terminologia e Estrutura
18
Participantes Fachada Classes de Subsistema
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
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.
20
Consequências Subsistema mais fácil de se usar Enfraquece acoplamento
Esconde componentes dos clientes Reduz objetos que clientes lidam Enfraquece acoplamento Entre subsistema e clientes Cliente pode usar subsistema diretamente Se necessário
21
Configurando um Home-theater
22
Imagine um Home Theater
23
Imagine um Home Theater
Muitas classes Muitas interações Você precisa saber o funcionamento de tudo para saber usar corretamente Quais métodos chamar para assistir um filme?
24
Para assistir um filme Ligar a máquina de pipoca
Colocar a máquina de pipoca em funcionamento Reduzir as luzes Baixar a tela Ligar o projetor Configurar a entrada do projetor para DVD Colocar o projetor em modo wide-screen Ligar o amplificador de áudio Configurar a entrada do amplificador para DVD Configurar o amplificador para surround Ajustar o amplificador para o volume médio (5) Ligar o DVD Player Acionar o play no DVD Player
25
Para assistir um filme (em Java)
Ligar a máquina de pipoca Colocar a máquina de pipoca em funcionamento Reduzir as luzes Baixar a tela Ligar o projetor Configurar a entrada do projeto para DVD Colocar o projetor em modo wide-screen Ligar o amplificador de áudio Configurar a entrada do amplificador para DVD Configurar o amplificador para surround Ajustar o amplificador para o volume médio (5) Ligar o DVD Player Acionar o play no DVD Player pipoqueira.ligar(); pipoqueira.cozinhar(); luz.dim(10); tela.descer(); projetor.ligar(); projetor.setInput(dvdPlayer); projetor.modoWideSreen(); amplificador.ligar(); amplificador.setDVD(dvdPlayer); amplificador.setSurroundAudio(); amplificador.setVolume(5); dvdPlayer.ligar(); dvdPlayer.play(filme);
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
27
Solução para a complexidade
A FACHADA +
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
29
Solução: a Fachada
30
A Fachada Preserva o acesso direto ao subsistema, mas...
Você ainda pode usar os métodos de cada aparelho
31
Implementando a Fachada
32
Implementando a Fachada
33
Como a vovó assistiria o filme
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.
35
Resumindo As Fachadas, além de simplificar uma interface
Desconecta o cliente de um subsistema de componentes Uma Fachada é uma interface simplificada
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. Hoje começaremos pela definição.
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");
38
Exercício Crie uma fachada que facilite ligar o computador.
public 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: Inicializar a CPU Ler do disco rígido Carregar uma informação da memória Executar a CPU Liberar memória
39
Referências Capítulo 7 do livro “Padrões de Projeto – Use a Cabeça!”
Notas de aula da prof. Yuska Aguiar.
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.