INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Documentos relacionados
Mas o que é mesmo Padrão de Projeto?

Padrões de Projeto. Padrões de Projeto. Além dos 23 Padrões GoF. Os 23 Padrões de Projeto. Documentação de um Padrão. Classificação dos Padrões

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Singleton e Adapter. Professor: Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé)

Módulo I Princípios e Padrões de Projeto de SW em Java

Tópicos da Aula. POO e Padrões de Projetos. Considere três classes... Reuso de Classes. Locadora de DVD. Sistema Acadêmico

Singleton. Como a maioria dos programadores organizaria o código para acessar informação de configuração? Eis um exemplo:

Tópicos Avançados em Linguagem de Programação. Padrões de Software. Prof. Alexandre Vidal DEINF-UFMA. Ciência da Computação

INF011 Padrões de Projeto Introdução

Projeto de software Estrutura do software e arquitetura SWEBOK

Padrões de Projeto de Software Orientado a Objetos

Abstract Factory. Prover uma interface para criar uma família de objetos relacionados ou dependentes sem especificar suas classes concretas

Padrões contexto problema solução

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

Engenharia de Software

Roni Fabio Banaszewski UTFPR Universidade Tecnológica Federal do Paraná

Engenharia de Software

PROJETO ARQUITETURAL PARTE II: PADRÕES DE PROJETO. Projeto de Programas PPR0001

Padrões de Projeto. Parte 1. Prof. Fellipe Aleixo

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

Soluções reutilizáveis para situações ou problemas encontrados comumente em desenvolvimento de software orientado a objetos.

INF1013 MODELAGEM DE SOFTWARE

Introdução aos Padrões de Projeto. Sylvio Barbon Jr

3 Uma Abordagem Orientada a Aspectos para o Desenvolvimento de Frameworks

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Análise e Projeto Orientados por Objetos

Padrões de Projeto de Software

Programação Orientada a Objetos. Padrões Estruturais

Design Patterns. Viviane Torres da Silva

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Padrões GoF Strategy, Observer, Singleton, Abstract Factory e outros...

" ##$#$!% # & #$#$ !!!!"!

PROJETO DE ARQUITETURA

ESTUDO DO PADRÃO DE PROJETO OBSERVER NO DESENVOLVIMENTO DE SOFTWARES UTILIZANDO A ARQUITETURA MVC RESUMO

Linguagem de Programação III

Definindo um padrão para arquitetura Web

Arquitectura de Sistemas de Software

Universidade Federal de Uberlândia Faculdade de Computação Programação Orientada a Objetos II Prof. Fabiano Dorça. Padrão Observer (Observador)

LEIC-T LERC MEIC-T 2011/2012 1º Semestre Programação com Objetos 2012/01/07 11h00m 3/10

PADRÕES DE PROJETO: DESIGN PATTERNS

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Padrões de Design. Padrões de Design. Abstract Factory. Padrões de Design. Padrões de Design Abstract Factory. Abstract Factory.

INF1013 MODELAGEM DE SOFTWARE

Aula 24 Programação Modular, POO e Padrões de Projeto

Modelo do Mundo Real. Abstração. Interpretação

UNIVERSIDADE FEDERAL DO PARANÁ - UFPR Bacharelado em Ciência da Computação

Conceitos de Programação Orientada por Objectos. Rui Camacho Programação 2

Creational Patterns Factory method

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Linguagem de Programação II Programação Orientada a Objetos. Orientação a Objetos

Programação Orientada a Objeto: Introdução. Professor: Adonai Estrela Medrado Data: 22/07/2008

CONCEITOS BÁSICOS E MODELO DE PROJETO

Programação com Objectos. 2º Teste 2015/2016 1º Semestre

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

INF1013 MODELAGEM DE SOFTWARE

3 Uma Arquitetura Distribuída via WEB

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

INF1013 MODELAGEM DE SOFTWARE

PATI-MVC: Padrões MVC para Sistemas de Informação. Gabriela T. De Souza Instituto Atlântico

Programação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs

Padrões de Projeto de Software

Segunda Parte (3 valores) Primeira Parte (7 valores) Nome: Número: PERGUNTA NOTA PERGUNTA RESPOSTA

Análise e Projeto Orientados por Objetos

Desenvolvimento de Sistemas Orientados a Objetos com UML UP/RUP: Projeto

O USO DOS PADRÕES DE PROJETO GOF NA ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

Desenho e documentação de arquitectura de software e de aplicações empresariais

Padrões Fábrica. Simple Factory Factory Method

PROGRAMAÇÃO ORIENTADA A OBJETOS: OCULTAR INFORMAÇÕES E ENCAPSULAMENTO

Padrões de Projeto de Software

PROJETO DE ARQUITETURA (PARTE 2)

Daniel Wildt

Módulo III Padrões GOF

Herança e Polimorfismo

Classes e Objetos. Sintaxe de classe em Java

p Imagine que um Sistema de Controle do Banco pode ser acessado, além dos Gerentes, pelos Diretores do Banco

Universidade Federal de Uberlândia Faculdade de Computação Prof. Fabiano Dorça. Introdução. Padrões de projeto

Análise e Projeto Orientados por Objetos

Introdução a Padrões, GRASP. Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé)

Classe Abstrata e Interface

Definição. Em POO, a abstração é o processo de esconder os detalhes de implementação de uma aplicação.

Conceitos de Programação Orientada a Objetos

Relacionamentos entre objetos

Análise e Projeto Orientados por Objetos

Tópicos Especiais em Informática Fatec Indaiatuba

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Padrões de Projeto. Conteúdo. Objetivos

SISMO - Sistemas e Mobilidade Departamento de Informática / UFMA. Junho de 2008

Programação Orientada a Objetos II

Agenda da Aula. Arquitetura de Software e Padrões Arquiteturais. Elementos de um Padrão. Arquitetura de Software. Arquitetura de Software

Tema da aula Introdução ao paradigma de programação: Orientado a Objetos

Etapas principais do desenvolvimento de software Padrões arquiteturais Padrões de projeto

Java 2 Standard Edition Classes internas

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

Factory Pattern. SISMO - Sistemas e Mobilidade Junho de Departamento de Informática / UFMA

Arquitectura de Sistemas de Software

Transcrição:

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS Departamento de Informática PUC-Rio Ivan Mathias Filho ivan@inf.puc-rio.br Programa Capítulo 17 Padrões de Design Singleton Facade Factory Method Observer Strategy Adapter 1

Programa Capítulo 17 Padrões de Design Singleton Facade Factory Method Observer Strategy Adapter Definições Os Padrões de Design representam soluções reutilizáveis para problemas recorrentes [Grand, 1998]; Os Padrões de Design formam um conjunto de regras que descrevem como realizar certas tarefas no âmbito do desenvolvimento de software [Pree, 1994]; Um Padrão de Design visa resolver um problema recorrente de design que surge em determinadas situações [Buschmann et al., 1996]; Os Padrões de Design identificam e definem abstrações que estão acima do nível de uma única classe e de suas instâncias, ou de componentes [Gamma et al., 1994]. 2

Princípios Novos problemas são geralmente similares a problemas já resolvidos anteriormente; As soluções para problemas similares seguem padrões recorrentes; Definem um vocabulário comum entre os projetistas, o que ajuda na disseminação de soluções bem sucedidas. Breve Histórico Os Padrões de Design foram baseados nos trabalhos publicados pelo arquiteto Christopher Alexander no final da década de 1970; Em 1987, Ward Cunningham e Kent Beck usaram algumas das idéias de Alexander no trabalho sobre GUI intitulado Using Pattern Languages for Object-Oriented Programs [OOPSLA-87]; Em 1994, Erich Gamma, Richard Helm, John Vlissides e Ralph Johnson publicaram um dos livros mais importantes de Engenharia de Software da década de 90: Design Patterns: Elements of Reusable Object-Oriented Software [GoF]. 3

Herança vs Composição (1) A herança é um mecanismo de reutilização caixa branca, pois expõe freqüentemente a estrutura das classes ancestrais; A herança é um mecanismo estático, não permitindo assim a reconfiguração dinâmica de um sistema; A herança cria um forte acoplamento entre uma classe e as suas classes ancestrais, diminuindo assim a possibilidade de reutilização de uma classe em um outro projeto. Herança vs Composição (2) A composição nos permite obter funcionalidades complexas através da colaboração de vários objetos que implementam funções mais simples; A composição é um mecanismo de reutilização caixa preta, pois os detalhes internos dos objetos não precisam ser expostos; A composição permite a reconfiguração dinâmica de um sistema. 4

Herança vs Composição (3) A composição aumenta as chances da reutilização de classes, pois favorece a criação de classes menores e mais coesas; O poder da composição aumenta ainda mais quando usado conjuntamente com o mecanismo de polimorfismo; Para tal, prefira o mecanismos de herança de interface em relação à de implementação. Delegação A delegação é uma maneira de tornar a composição um mecanismo de reutilização extremamente poderoso; Na delegação, um objeto recebe uma solicitação e delega a sua execução a um ou mais objetos; O objeto receptor atua freqüentemente como coordenador da execução de uma solicitação; Deste modo, muitas vezes é necessário que os objetos delegados consultem o estado do objeto receptor (callback); Para tal, o objeto receptor passa uma referência para si próprio (this) quando envia mensagens para os objetos delegados. 5

Descrição dos Padrões Os Padrões de Design são usualmente descritos através de um formato que inclui os seguintes itens: Uma descrição do problema, que inclui um exemplo concreto e uma solução para tal problema; Considerações que levam à formulação de uma solução geral; Uma solução geral; As conseqüências, boas e más, do uso de uma dada solução para o problema em questão; Uma lista de Padrões relacionados. Programa Capítulo 17 Padrões de Design Singleton Facade Factory Method Observer Strategy Adapter 6

O Padrão Singleton Objetivo Garantir que uma classe tenha somente uma única instância e fornecer um ponto global de acesso para tal instância; Algumas classes devem possuir exatamente uma instância; Tais classes geralmente estão envolvidas no gerenciamento de algum recurso, ou controlando alguma atividade (controller); O recurso pode ser externo (ex: uma conexão com um gerenciador de banco de dados) ou interno (ex: um objeto que mantém estatísticas de erro para um compilador). O Padrão Singleton Estrutura (1) O padrão Singleton é relativamente simples, uma vez que ele envolve uma única classe; A classe unitária possui uma variável estática que mantém uma referência para a única instância que se deseja manipular; Esta instância é criada quando a classe é carregada na memória ou quando ocorrer a primeira tentativa de acesso à instância. 7

O Padrão Singleton Estrutura (2) A classe unitária não pode permitir a criação de instâncias adicionais; Para tal, devemos nos assegurar que todos os construtores da classe unitária sejam declarados como privados. O Padrão Singleton Exemplo public class CtrlVenda private static CtrlVenda ctrl=null; private CtrlVenda() public static CtrlVenda getctrlvenda() if(ctrl==null) ctrl=new CtrlVenda(); return ctrl; public void encerravenda() public class UmaClasse public void ummetodo() CtrlVenda.getCtrlVenda().encerraVenda(); 8

Programa Capítulo 17 Padrões de Design Singleton Facade Factory Method Observer Strategy Adapter O Padrão Façade Objetivo Um objetivo comum a todos os projetos é minimizar a comunicação e as dependências entre os subsistemas que compõem uma aplicação; Estruturar um sistema em subsistemas ajuda a reduzir a complexidade; Pode-se alcançar este objetivo introduzindo um objeto façade (fachada), que fornece uma interface única para os recursos e facilidades mais gerais de um subsistema. 9

O Padrão Façade Estrutura Programa Capítulo 17 Padrões de Design Singleton Facade Factory Method Observer Strategy Adapter 10

O Padrão Factory Method Objetivo Criar uma classe que possa instanciar outras classes, de modo que o solicitante não dependa diretamente das classes instanciadas; O solicitante delega a instanciação a outro objeto e referencia as instâncias criadas através de uma interface (ou de uma classe abstrata). O Padrão Factory Method Exemplo Uma aplicação precisa criptografar suas mensagens. Existem vários algoritmos de criptografia que podem ser utilizados. O algoritmo escolhido deve ser definido em um arquivo de configuração. Deseja-se que a escolha do algoritmo de criptografia seja transparente às classes que irão usá-lo. 11

Definição da Interface Todas as classes que possuírem algoritmos de criptografia deverão implementar a interface Criptografia. Descrição dos Passos Uma classe cliente precisa criptografar mensagens. Para tal, ela irá solicitar a instanciação de um objeto à classe-fábrica. O método-fábrica irá analisar o arquivo de configuração para definir qual algoritmo deverá ser usado. Definido o algoritmo, uma instância da classe correspondente será criada e devolvida ao cliente. O cliente recebe uma instância da classe adequada e a utiliza através da interface Criptografia. A verdadeira classe desse objeto é transparente ao cliente. A classe-fábrica será implementada como um Singleton. 12

Visão Geral Aspectos Dinâmicos 13

Solicitação do Cliente public class Cliente public void executa() Criptografia c; FabricaCriptografia f; f=fabricacriptografia.getinstance(); c=f.getcriptografia("e:\\cap03.cfg"); if(c==null) System.out.println("Erro no arquivo de configuracao"); System.exit(-1); System.out.println(c.criptografa("Teste")); System.out.println(c.descriptografa("Teste")); Instanciação da Classe Escolhida public class FabricaCriptografia... public Criptografia getcriptografia(string p) Scanner s=null; try s=new Scanner(new File(p)); String cmd; while(s.hasnext()) cmd=s.nextline(); if(cmd.lastindexof("criptografia=")==0) if((cmd.lastindexof("des")>-1)) return new CriptografiaDES(); else if((cmd.lastindexof("rsa")>-1)) return new CriptografiaRSA(); else return null; s.close(); catch(filenotfoundexception e) return null; return null; 14

Programa Capítulo 17 Padrões de Design Singleton Facade Factory Method Observer Strategy Adapter O Padrão Observer Permite que um objeto (observado) registre dinamicamente outros objetos que dele dependem (observadores); Tais objetos são notificados quando houver mudanças no estado do observado; Isso permite que os observadores fiquem consistentes com o estado do objeto observado; Este padrão fornece um mecanismo flexível para a notificação de eventos. 15

Exemplo Estrutura 16

Aplicação (1) A figura a seguir mostra o diagrama de classes de design de um relógio que exibe as horas em uma interface gráfica: Aplicação (2) O painel de exibição será notificado quando houver modificação no tempo marcado pelo relógio interno. Para tal, o painel irá se registrar, através de um Controlador, junto ao Relogio; O Controlador, então, repassa a solicitação para o Relogio, que registra o painel como observador. 17

Aplicação (3) public class pnrelogio extends JPanel implements ObservadorIF public static final int TXT_X=100; public static final int TXT_Y=140; private int mm=0,ss=0; public pnrelogio() Ctrl.getInstance().registra(this);... public void notify(observadoif o) mm=o.get(1); ss=o.get(2); repaint(); Aplicação (4) class Relogio implements ObservadoIF,ActionListener private List<ObservadorIF> lst=new ArrayList<ObservadorIF>(); private int mm=59,ss=0; public void add(observadorif o) lst.add(o); private void atualiza() ListIterator<ObservadorIF> li=lst.listiterator(); while(li.hasnext()) li.next().notify(this);... 18

Aplicação (5) Após o recebimento da notificação, o observador envia mensagens (callback) para o objeto observado com o objetivo de obter os dados desejados. public class pnrelogio extends JPanel implements ObservadorIF public static final int TXT_X=100; public static final int TXT_Y=140; private int mm=0,ss=0; public pnrelogio() Ctrl.getInstance().registra(this);... public void notify(observadoif o) mm=o.get(1); ss=o.get(2); repaint(); Aplicação (6) O objeto observado, então, retorna as informações solicitadas. class Relogio implements ObservadoIF,ActionListener... public int get(int i) if(i==1) return mm; else return ss;... 19

Programa Capítulo 17 Padrões de Design Singleton Facade Factory Method Observer Strategy Adapter O Padrão Strategy Tem por objetivo definir uma família de algoritmos para uma certa operação; Cada algoritmo da família é encapsulado em um objeto; Permite a mudança dinâmica dos algoritmos, independentemente dos clientes que os utilizam. 20

Estrutura Geral O Padrão Comentários O padrão Strategy utiliza a composição em vez de herança; Isso permite uma melhor separação entre o comportamento e as classes que usam o comportamento; Os clientes podem solicitar a mudança de do comportamento em tempo de execução; Novos comportamentos podem ser acrescentados sem alterações significativas no código existente. 21

Definição da Estratégia Definição da Estratégia 22

Programa Capítulo 17 Padrões de Design Singleton Facade Factory Method Observer Strategy Adapter O Padrão Adapter Objetivos Converter a interface de uma classe em outra interface, esperada pelos clientes. Adapter permite que classes trabalhem juntas, o que não poderia ser feito sem o uso desse padrão, por causa da incompatibilidade de interfaces. Envolve uma classe existente em uma nova interface. Ajusta um componente antigo para operar em um novo sistema. 23

Problemas Componentes de prateleira oferecem funcionalidades interessantes poderiam ser usadas em novos sistemas. Entretanto, preconcepções sobre o ambiente operacional tornam esses componentes incompatíveis com a filosofia e arquitetura do sistema a ser desenvolvido. Solução 24

Class Adapter: Herança + Implementação de Interface Cliente: aplicação que colabora com objetos aderentes à interface Alvo. Alvo: define a interface requerida pelo Cliente. ClasseExistente: classe que requer adaptação. Adaptador (Adapter): adapta a interface do componente existente à interface Alvo. Object Adapter: Herança + Composição Alvo pode ser uma classe ou uma interface. Adaptador possui referência para objeto que terá sua interface adaptada (instância de ClasseExistente). Cada método de Adaptador chama o(s) método(s) adequado(s) na(s) classe(s) existente(s). Permite utilizar vários componentes pré-existentes. 25