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

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

"Você acha que conhece a pessoa, aí você percebe que era tudo fachada

Apresentações semelhantes


Apresentação em tema: ""Você acha que conhece a pessoa, aí você percebe que era tudo fachada"— Transcrição da apresentação:

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.


Carregar ppt ""Você acha que conhece a pessoa, aí você percebe que era tudo fachada"

Apresentações semelhantes


Anúncios Google