1 / 56

Programação Orientada a Objetos

Programação Orientada a Objetos. AULA 02. Decorator (Decorador). Permite adicionar e remover responsabilidades de uma classe em tempo de execução (dinamicamente). Alternativa flexível a generalização/especialização para extensão de funcionalidade. Decorator - Geral. Decorator – Exemplo 1.

rodney
Download Presentation

Programação Orientada a Objetos

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ProgramaçãoOrientada a Objetos AULA 02

  2. Decorator (Decorador) • Permite adicionar e remover responsabilidades de uma classe em tempo de execução (dinamicamente). • Alternativa flexível a generalização/especialização para extensão de funcionalidade.

  3. Decorator - Geral

  4. Decorator – Exemplo 1

  5. Decorator – Exemplo 2

  6. Decorador: ExercícioFaça um modelo UML para criar e desenhar as três telas abaixo: diagramas de classes e seqüência Olá, Pedro Silva! Olá, Pedro Silva! Olá, Pedro Silva! AAAAAAAAAA TELA ESSENCIA TELA ESSENCIA TELA ESSENCIA SUBTOTAL X SUBTOTAL X TOTAL Z

  7. cc = new Tela(); cc = newCabecalhoVisitante( cc ); cc.desenha();

  8. Exercício • Implementarem Java o exemplo do slide anterior.

  9. Padrão Command (Comando) • Encapsula comandos em objetos tal que é possível controlar sua seleção e seqüenciamento, enfileirá-los, desfazê-los (undo ), isto é, manipulá-los de forma geral. • Permite tornar a execução de operações mais flexível (ex: desfazer).

  10. Padrão Comando - Exemplo

  11. Padrão SINGLETON: Exemplo I

  12. Padrão SINGLETON: Exemplo I package pp.Singleton; publicclass Financeiro extends Thread { publicvoidrun() { GerenciadorBDgbd = GerenciadorBD.GetInstance(); gbd.AbrirConexao(); gbd.InserirRegistro(); gbd.FecharConexao(); } }

  13. Padrão SINGLETON: Exemplo I package pp.Singleton; publicclass Secretaria extends Thread { publicvoidrun() { GerenciadorBDgbd = GerenciadorBD.GetInstance(); gbd.AbrirConexao(); gbd.InserirRegistro(); gbd.FecharConexao(); } }

  14. Padrão SINGLETON: Exemplo I package pp.Singleton; publicclassGerenciadorBD { staticprivateGerenciadorBDTheInstance; privateGerenciadorBD() { System.out.println("Construindo GerenciadorBD ..."); } synchronizedstaticpublicGerenciadorBDGetInstance() { if (TheInstance == null) { TheInstance = newGerenciadorBD(); } returnTheInstance; } publicvoidAbrirConexao() {} publicvoidFecharConexao() {} publicvoidInserirRegistro() {} }

  15. Padrão SINGLETON: Exemplo I package pp.Singleton; publicclass Teste { publicstaticvoid execute() { Secretaria s = new Secretaria( ); Financeiro f = new Financeiro( ); s.start( ); f.start( ); } }

  16. EXERCÍCIOS

  17. Exercício: DECORADOR Aplique o padrão decoratorpara modelar a seguinte aplicação: • Os funcionários de certa empresa podem assumir qualquer uma das suas funções, inclusive de forma cumulativa. O conjunto de funções assumidas por certo funcionário é totalmente dinâmico, podendo sofrer alterações a cada dia de trabalho. Para cada uma dessas funções, há uma correspondente remuneração. Assim, o salário mensal de cada funcionário é calculado de acordo com as funções assumidas ao longo do mês.

  18. Decoração: funcionário de certa empresa

  19. Exercício: COMMAND Aplique o padrão command para modelar a seguinte aplicação: • Consultas em um sistema de informações médicas: Cada operação de consulta realizada no sistema de informações deve ser armazenada como um objeto a fim de se poder emitir uma conta para cada cliente do sistema. O preço de cada consulta pode variar dependendo da informação desejada e do volume de dados fornecido como resposta.

  20. Consultas em um sistema de informações médicas.

  21. Exercício: COMMAND Aplique o padrão command para modelar a seguinte aplicação: • Pilotagem de uma aeronave: Cada operação realizada pelo piloto de uma aeronave deve ser armazenada como um objeto a fim de se poder analisar o histórico de operações em auditorias rotineiras e também em caso de acidentes.

  22. Pilotagem de uma aeronave.

  23. Strategy

  24. Padrão Strategy (Estratégia) • Encapsula algoritmos relacionados em classes que são subclasses de uma classe comum. • Permite a seleção de algoritmo variar por objeto e também no decorrer do tempo.

  25. Padrão Strategy – General

  26. Padrão Strategy – Exemplo 2

  27. Padrão Strategy – Exemplo 1

  28. Exercício: ESTRATEGIA Aplique o padrão observador para modelar a seguinte aplicação: • Há diferentes algoritmos para envio de arquivos multimídia. • Um servidor de arquivos multimídia pode enviar arquivos requisitados pela rede de diferentes modos, isto é, com diferentes níveis de qualidade, dependendo das condições atuais do meio de comunicação e também do dispositivo utilizado pelo cliente. Por exemplo, quando há bastante banda de rede disponível, os arquivos podem ser enviados com qualidade máxima, mas também é preciso que o cliente tenha um equipamento com suficiente poder de processamento. Assim, dependendo do tipo do arquivo (imagem ou som) e das condições da comunicação e do cliente, o servidor pode empregar algoritmos diferentes para o envio de cada arquivo. Há à disposição do servidor, uma variedade de 4 algoritmos para envio de imagens (incluindo um para envio de imagem em preto&branco) e outros 3 algoritmos para envio de som.

  29. Abstract Factory

  30. Padrão Abstract Factory(Fábrica Abstrata) • Kit ou Toolkit • Permite a criação de instâncias de um conjunto de classes abstratas relacionadas a partir de respectivo um conjunto de classes concretas. Pode ser muito útil quando se precisa trabalhar com uma variedade de entidades externas complexas. • Permite criar famílias coordenadas de objetos em tempo de execução, escolhidos a partir de um conjunto de estilos.

  31. Padrão Abstract Factory - Geral

  32. Padrão Abstract Factory – Exemplo II • A classe abstrata WidgetFactory possui duas especializações: • MotifWidgetFactory para widgets* Motif e • QtWidgetFactory para widgets* Qt. • Tais especializações são classes concretas capazes de produzir os elementos da interface gráfica. • O cliente do toolkit obtém os elementos gráficos de que necessita por meio da classe (interface) WidgetFactory sem ter conhecimento das classes concretas. • Da mesma maneira, o cliente somente interage com as interfaces que representam os elementos produzidos pela Abstract Factory (no exemplo, a classe Janela e a classe Botão). * Um widget é um componente de uma interface gráfica do utilizador (GUI), o que inclui janelas, botões, menus, ícones, barras de rolagem, etc

  33. Padrão: Abstract Factory

  34. Abstract Factory: Java abstractclassWidgetFactory{ publicstaticWidgetFactoryobterFactory() { if( Configuracao.obterInterfaceGraficaAtual() == Configuracao.MotifWidget) {returnnewMotifWidgetFactory(); } else { returnnewQtWidgetFactory(); } } publicabstractBotaocriarBotao(); }

  35. Abstract Factory: Java classMotifWidgetFactoryextendsWidgetFactory { publicBotaocriarBotao() { returnnewBotaoMotif(); } } classQtWidgetFactoryextendsWidgetFactory { publicBotaocriarBotao() { returnnewBotaoQt(); } }

  36. Abstract Factory: Java abstractclassBotao { publicabstractvoid desenhar(); } classBotaoMotifextendsBotao{ publicvoid desenhar() { System.out.println("Eu sou um botaoMotif!"); } } classBotaoQtextendsBotao { publicvoid desenhar() { System.out.println("Eu sou um botaoQt!"); } }

  37. Abstract Factory: Java publicclass Cliente { publicstaticvoidmain(String[] args) { WidgetFactoryfactory = WidgetFactory.obterFactory(); Botaobotao = factory.criarBotao(); botao.desenhar(); } }

  38. Padrão Abstract Factory – Exemplo I

  39. Exercício • Implementarem Java o exemplo I do slide anterior.

  40. Padrão Mestre-Escravo • Contexto: “Dividir e Conquistar” é um princípio comum para solucionar vários problemas computacionais. Em vários sistemas é necessário aplicar este princípio. • Problema: Dividir as tarefas em sub-tarefas idênticas .Uma tarefas é dividida em sub-tarefas idênticas que podem ser processadas independentemente. O resultado final será obtido pela junção dos resultados de cada sub-tarefa. • Solucão: Introduzir um elemento controlado entre o cliente dos serviços e os vários elementos processadores para delegar as sub-tarefas e agrupar os resultados no resultado final.

  41. Padrão Mestre-Escravo – Dinâmica

  42. Padrão Proxy - idéia • O Padrão Proxy permite que clientes de um serviço utilizem um representante do componente que oferece o serviço. Aumenta a eficiência, a segurança e facilita o acesso. • O Proxy pode substituir o servidor quando ocorrem problemas com o servidor. • O Proxy permite criar uma independência de endereçamento e implementação do servidor.

  43. O Padrão Proxy • Contexto: Um cliente precisa acessar um serviço de um outro componente em um sistema distribuído. O acesso direto é tecnicamente possível, mas pode não ser a melhor opção. • Problemas: O acesso direto pode não ser eficiente em tempo de execução, ter alto custo e não ser seguro. O cliente não precisa ficar dependente de endereço de rede do componente. • Solução: Utilize um representante do cliente que ofereça o serviço de forma idêntica e realize pré- e pós-processamento adicionais para garantir a Qualidade do Serviço.

  44. O Padrão Broker (Corretor) - idéia • O Padrão Broker é utilizado para estruturar sistemas distribuídos separando componentes que interagem através de chamadas remota de serviços. • O broker é responsável por coordenar a comunicação, encaminhado as solicitações e transmitido os resultados ou exceções.

  45. O Padrão Broker (Corretor) – estrutura • Contexto: O ambiente é distribuído e heterogêneo com componentes cooperativos independentes. • Problema: Sistemas acoplados não oferecem flexibilidade, dificultam mudanças e manutenção. • Solução: Introduzir um componente broker para permitir uma maior desacoplamento entre clientes e servidores, permitindo independência de plataforma (ambientes heterogêneos) e de endereçamento.

  46. O Padrão Broker – dinâmica

More Related