programação orientada a objetos

56
PROGRAMAÇÃO ORIENTADA A OBJETOS AULA 02

Upload: rodney

Post on 14-Feb-2016

40 views

Category:

Documents


0 download

DESCRIPTION

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. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Programação Orientada  a  Objetos

PROGRAMAÇÃO ORIENTADA A OBJETOS

AULA 02

Page 2: Programação Orientada  a  Objetos

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.

Page 3: Programação Orientada  a  Objetos

DECORATOR - GERAL

Page 4: Programação Orientada  a  Objetos

DECORATOR – EXEMPLO 1

Page 5: Programação Orientada  a  Objetos

DECORATOR – EXEMPLO 2

Page 6: Programação Orientada  a  Objetos

TELA ESSENCIA

TELA ESSENCIA

TELA ESSENCIA

Olá, Pedro Silva! Olá, Pedro Silva! AAAAAAAAAA

SUBTOTAL X SUBTOTAL XTOTAL Z

Olá, Pedro Silva!

DECORADOR: EXERCÍCIOFaça um modelo UML para criar e desenhar as três telas abaixo: diagramas de classes e seqüência

Page 7: Programação Orientada  a  Objetos
Page 8: Programação Orientada  a  Objetos

cc = new Tela();cc = new CabecalhoVisitante( cc );cc.desenha();

Page 9: Programação Orientada  a  Objetos
Page 10: Programação Orientada  a  Objetos
Page 11: Programação Orientada  a  Objetos
Page 12: Programação Orientada  a  Objetos

EXERCÍCIO Implementar em Java o exemplo do slide anterior.

Page 13: Programação Orientada  a  Objetos

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

Page 14: Programação Orientada  a  Objetos

PADRÃO COMANDO - EXEMPLO

Page 15: Programação Orientada  a  Objetos

PADRÃO SINGLETON: EXEMPLO I

Page 16: Programação Orientada  a  Objetos

PADRÃO SINGLETON: EXEMPLO Ipackage pp.Singleton;

public class Financeiro extends Thread{

public void run() {

GerenciadorBD gbd = GerenciadorBD.GetInstance();

gbd.AbrirConexao();gbd.InserirRegistro();gbd.FecharConexao();}

}

Page 17: Programação Orientada  a  Objetos

PADRÃO SINGLETON: EXEMPLO I

package pp.Singleton;

public class Secretaria extends Thread {

public void run() {

GerenciadorBD gbd = GerenciadorBD.GetInstance();

gbd.AbrirConexao();gbd.InserirRegistro();gbd.FecharConexao();}

}

Page 18: Programação Orientada  a  Objetos

PADRÃO SINGLETON: EXEMPLO Ipackage pp.Singleton;

public class GerenciadorBD { static private GerenciadorBD TheInstance; private GerenciadorBD() { System.out.println("Construindo GerenciadorBD ..."); } synchronized static public GerenciadorBD GetInstance() { if (TheInstance == null) { TheInstance = new GerenciadorBD(); } return TheInstance; } public void AbrirConexao() {} public void FecharConexao() {} public void InserirRegistro() {}}

Page 19: Programação Orientada  a  Objetos

PADRÃO SINGLETON: EXEMPLO Ipackage pp.Singleton;

public class Teste{

public static void execute() {

Secretaria s = new Secretaria( );Financeiro f = new Financeiro( );

s.start( );f.start( );

}}

Page 20: Programação Orientada  a  Objetos

EXERCÍCIOS

Page 21: Programação Orientada  a  Objetos

EXERCÍCIO: DECORADORAplique o padrão decorator para 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.

Page 22: Programação Orientada  a  Objetos

Decoração: funcionário de certa empresa

Page 23: Programação Orientada  a  Objetos

EXERCÍCIO: COMMANDAplique 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.

Page 24: Programação Orientada  a  Objetos

Consultas em um sistema de informações

médicas.

Page 25: Programação Orientada  a  Objetos

EXERCÍCIO: COMMANDAplique 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.

Page 26: Programação Orientada  a  Objetos

Pilotagem de uma aeronave.

Page 27: Programação Orientada  a  Objetos

STRATEGY

Page 28: Programação Orientada  a  Objetos

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.

Page 29: Programação Orientada  a  Objetos

PADRÃO STRATEGY – GENERAL

Page 30: Programação Orientada  a  Objetos

PADRÃO STRATEGY – EXEMPLO 2

Page 31: Programação Orientada  a  Objetos

PADRÃO STRATEGY – EXEMPLO 1

Page 32: Programação Orientada  a  Objetos

EXERCÍCIO: ESTRATEGIAAplique 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.

Page 33: Programação Orientada  a  Objetos

ABSTRACT FACTORY

Page 34: Programação Orientada  a  Objetos

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.

Page 35: Programação Orientada  a  Objetos

PADRÃO ABSTRACT FACTORY - GERAL

Page 36: Programação Orientada  a  Objetos

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

Page 37: Programação Orientada  a  Objetos

PAD

RÃO

: AB

STR

ACT

FACT

ORY

Page 38: Programação Orientada  a  Objetos

ABSTRACT FACTORY: JAVA

abstract class WidgetFactory {

public static WidgetFactory obterFactory() {

if( Configuracao.obterInterfaceGraficaAtual() == Configuracao.MotifWidget )

{return new MotifWidgetFactory(); }

else { return new QtWidgetFactory(); }

} public abstract Botao criarBotao();

}

Page 39: Programação Orientada  a  Objetos

ABSTRACT FACTORY: JAVAclass MotifWidgetFactory extends WidgetFactory {

public Botao criarBotao() { return new BotaoMotif();

} }

class QtWidgetFactory extends WidgetFactory {

public Botao criarBotao() { return new BotaoQt();

}}

Page 40: Programação Orientada  a  Objetos

ABSTRACT FACTORY: JAVAabstract class Botao {

public abstract void desenhar(); } class BotaoMotif extends Botao {

public void desenhar() {System.out.println("Eu sou um botao Motif!");

} } class BotaoQt extends Botao {

public void desenhar() { System.out.println("Eu sou um botao Qt!");

} }

Page 41: Programação Orientada  a  Objetos

ABSTRACT FACTORY: JAVA

public class Cliente{

public static void main(String[] args) {

WidgetFactory factory = WidgetFactory.obterFactory();

Botao botao = factory.criarBotao();botao.desenhar();

}}

Page 42: Programação Orientada  a  Objetos

PADRÃO ABSTRACT FACTORY – EXEMPLO I

Page 43: Programação Orientada  a  Objetos

EXERCÍCIO

Implementar em Java o exemplo I do slide anterior.

Page 44: Programação Orientada  a  Objetos

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.

Page 45: Programação Orientada  a  Objetos

PADRÃO MESTRE-ESCRAVO – DINÂMICA

Page 46: Programação Orientada  a  Objetos

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.

Page 47: Programação Orientada  a  Objetos

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.

Page 48: Programação Orientada  a  Objetos

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.

Page 49: Programação Orientada  a  Objetos

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.

Page 50: Programação Orientada  a  Objetos

O PADRÃO BROKER – DINÂMICA

Page 51: Programação Orientada  a  Objetos

PADRÃO OBSERVER (OBSERVADOR)• Contexto: Situações nas quais vários componentes dependem de dados que são

modificados em outro componente (sujeito).• Problema: Os dados do componente sujeito modificam-se constantemente e

precisam ser atualizados nos outros componentes. O número de componentes pode variar.

• Solução: Utilizar um mecanismo de registro que permite ao componente sujeito notificar aos interessados sobre mudanças.

Page 52: Programação Orientada  a  Objetos

PADRÃO OBSERVER – ESTRUTURA

Page 53: Programação Orientada  a  Objetos

PADRÃO MODEL-VIEW-CONTROLER - MVC• Contexto: Aplicações interativas com interfaces de usuário gráficas flexíveis e

controladas pelo usuários.• Problema: Interfaces gráficas precisam representar uma mesma interface em

diferentes janelas. O usuário deve poder tomar a iniciativa de controle de entrada e mudanças dos dados. Todas as janelas devem ser atualizadas sempre que houver mudanças nos dados.

• Solução: Utilizar o padrão Observer e estendê-lo para permitir o controle das janelas baseado-em-eventos. O Padrão MVC estende o Observer incorporando um elemento controlador (Controller). O MVC foi introduzido originalmente no Smalltalk-80.

Page 54: Programação Orientada  a  Objetos

PADRÃO MVC – ESTRUTURA

Page 55: Programação Orientada  a  Objetos

PADRÃO MVC – DINÂMICA

Page 56: Programação Orientada  a  Objetos

FIM Tempo livre para começar e/ou tirar dúvidas do

trabalho.