Programação Orientada a Objetos

Slides:



Advertisements
Apresentações semelhantes
Soluções elegantes para problemas recorrentes
Advertisements

Modelo de Casos de Uso Diagrama de Casos de Uso
Programação em Java Prof. Maurício Braga
Os Sistemas Multi-agente Viviane Torres da Silva
Programação em Java Prof. Maurício Braga
Sistemas distribuídos
Sistemas Cliente/Servidor Introdução
SAD - SISTEMA DE APOIO À DECISÃO Prof. Wagner Andrade
Chain of Responsibility
Projeto de Sistemas de Software
Metodologias Equipe do Curso de ES para SMA
Padrão Abstract Factory
Os Sistemas Multi-agente Viviane Torres da Silva
Abstract Factory Intenção: fornecer uma interface comum para a criação de famílias de objetos relacionados ou dependentes, sem especificar suas classes.
Padrões GoF – Factory Method
Polimorfismo e Classes Abstratas Profa
Programação Concorrente
PROGRAMAÇÃO DISTRIBUÍDA EM JAVA Verão/2001
Engenharia de Requisitos Requisito – sistema Caso de uso - usuário
Aspectos Avançados em Engenharia de Software Aula 3 Fernanda Campos
Paradigmas de Linguagens de Programação Paradima da Programação Orientada à Objetos Professor: Armando Hage Belém-2008.
Modelagem para Web Aula de 11/04/2011.
Componentes GUI GUI – Grafical User Interface – São construídas a partir de componentes GUI chamados de controles ou widgets (windows gadgets – engenhocas.
CRIANDO OBJETOS EM JAVA
Especificação de Requisitos de Software com Casos de Uso
Singleton e Adapter Professor: Nazareno Andrade
Sistemas Distribuídos
Programação I Aula 2 (Métodos)
Arquitetura Cliente /Servidor
1 Mobilidade de Código com μcode Projeto Giga Alexandre Lages
Cristiano Soares Rafael di Lego Roberto Nemirovsky Thiago Nascimento
Professor: Márcio Amador
Professora Lucélia Oliveira
Programação Orientada à Objetos
Arquitetura de Sistemas Distribuídos
Aulas 2 e 3 – Java – Prof. Marcelo Heitor # O método main e argumentos na linha de comando; # Fluxo padrão de entrada e saída; # A classe JOptionPane;
Concorrência e thread Petrônio Júnior(pglj) Márcio Neves(mmn2)
SISTEMAS DISTRIBUIDOS Aula 4
SISTEMAS OPERACIONAIS I
Processos.
Prof. Gilberto Irajá Müller
Introdução às Java Threads
Polimorfismo.
Introdução a Banco de Dados Aula 04
Decorator POO - Avançado.
Classes Abstratas e Interface
Laboratório de Programação
Padrões de Interação com o Usuário
Utilizando UML e Padrões Prof. Fábio Botelho, MSc Redes e Sistemas Distribuídos Recife, Março de 2010.
Análise e Projeto de Sistemas
RMI Objetos Distribuídos Luiz C. D´oleron SCJP
Tarciane Andrade Análise de Casos de Uso Tarciane Andrade
Factory.
Jobson Ronan Padrões GoF Jobson Ronan
Introdução a Orientação a Objetos
Introdução à Programação Orientada a Objeto
Projeto Supervisionado no Desenvolvimento de Aplicações Profissionais na Web Servidores.
J U nit Um Framework Para Testes. Motivação  Todos os programadores sabem que devem testar seu código  Quanto mais curto o prazo menos testes são realizados.
Engenharia de Software Orientada a Objetos
Desenvolvimento WEB II Ajax – Utilização de Frameworks Javascript Professora: Kelly de Paula Cunha.
Padrões de Projeto. O que são?  Soluções provenientes de diversos projetos e utilizados por diversos programadores;  Documentados em catálogos como.
Desenvolvimento WEB II Professora: Kelly de Paula Cunha Apresentação baseada no material didático elaborado pelo Prof. Pasteur Ottoni de Miranda Junior.
CURSO JAVA BÁSICO Módulo 9 – slide 1 Módulo 10 Threads.
Delegação  É uma maneira de tornar a composição tão poderosa para fins de reutilização como a herança. Na delegação, dois objetos são envolvidos no tratamento.
Padrões de Projeto de Criação Padrões de Projeto Orientados a Objetos Prof a. Danielle Martin Universidade de Mogi das Cruzes.
1 Introdução aos Padrões de Projetos (na prática) Créditos: Lúbia Vinhas Hazel Carvalho Crato Adaptações: Prof. Nécio de Lima Veras.
Classes Abstratas e Interface. 2 Classe Abstrata  Uma classe abstrata serve apenas como modelo para uma classe concreta (classe que comumente usamos);
Introdução à Orientação a Objetos em Java Prof. Gustavo Wagner (Alterações) Slides originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB.
Padrões de Projeto Aula 5 – Padrão Decorator 1. QuickReview: Observer Definição: Quando usar? Tipo de padrão? Como? 2.
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Transcrição da apresentação:

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

Decorator – Exemplo 2

Decorador: Exercício Faç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

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

Exercício Implementar em Java o exemplo do slide anterior.

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

Padrão Comando - Exemplo

Padrão SINGLETON: Exemplo I

Padrão SINGLETON: Exemplo I package pp.Singleton; public class Financeiro extends Thread { public void run() GerenciadorBD gbd = GerenciadorBD.GetInstance(); gbd.AbrirConexao(); gbd.InserirRegistro(); gbd.FecharConexao(); }

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(); }

Padrão SINGLETON: Exemplo I package 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() {}

Padrão SINGLETON: Exemplo I package pp.Singleton; public class Teste { public static void execute() Secretaria s = new Secretaria( ); Financeiro f = new Financeiro( ); s.start( ); f.start( ); }

EXERCÍCIOS

Exercício: DECORADOR Aplique 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.

Decoração: funcionário de certa empresa

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.

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

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.

Pilotagem de uma aeronave.

Strategy

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.

Padrão Strategy – General

Padrão Strategy – Exemplo 2

Padrão Strategy – Exemplo 1

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.

Abstract Factory

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.

Padrão Abstract Factory - Geral

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

Padrão: Abstract Factory

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(); }

Abstract Factory: Java class MotifWidgetFactory extends WidgetFactory { public Botao criarBotao() { return new BotaoMotif(); } class QtWidgetFactory extends WidgetFactory return new BotaoQt();

Abstract Factory: Java abstract 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!");

Abstract Factory: Java public class Cliente { public static void main(String[] args) WidgetFactory factory = WidgetFactory.obterFactory(); Botao botao = factory.criarBotao(); botao.desenhar(); }

Padrão Abstract Factory – Exemplo I

Exercício Implementar em Java o exemplo I do slide anterior.

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.

Padrão Mestre-Escravo – Dinâmica

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.

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.

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.

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.

O Padrão Broker – dinâmica

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.

Padrão Observer – Estrutura

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.

Padrão MVC – estrutura

Padrão MVC – dinâmica

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