Prototype, um Design Patterns de Criação



Documentos relacionados
Programação Orientada a Objetos. Padrões de Criação

PADRÕES DE SOFTWARE. Jerffeson Teixeira de Souza, Ph.D. Tarciane de Castro Andrade. Grupo de Padrões de Software da UECE (GPS.

Pasteur Ottoni de Miranda Junior. Alguns Padrões de Projeto Gamma

Curso - Padrões de Projeto Módulo 2: Padrões de Criação

Padrões de Projeto de Software Orientado a Objetos

Introdução a Java. Hélder Nunes

Programação Orientada a Objetos em Java

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)

Técnicas de Programação II

Implementando uma Classe e Criando Objetos a partir dela

SISTEMA TYR DIAGRAMAS DE CLASSE E SEQUÊNCIA Empresa: Academia Universitária

Orientação a Objetos

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Factory Method. Edeyson Andrade Gomes

Programação por Objectos. Java

Unisant Anna Gestão Empresarial com ERP 2014 Modelagem de Sistemas - UML e MER

Padrões de Projeto. Prof. Jefersson Alex dos Santos

Classes Abstratas e Interfaces

8 Classes Internas. Desenvolvimento OO com Java. Vítor E. Silva Souza

Padrão Arquitetura em Camadas

Para criar uma animação precisamos de uma imagem e que ela contenha alguns frames. O número de frames é uma escolha sua.

Análise e Projeto Orientados por Objetos

Padrões de Projeto WEB e o MVC

Laboratório de Computação VI JAVA IDL. Fabricio Aparecido Breve

Prof. Me. Marcos Echevarria

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS

Java 2 Standard Edition Como criar classes e objetos

LINGUAGEM DE BANCO DE DADOS

UML Aspectos de projetos em Diagramas de classes

Unidade Acadêmica: Faculdade de Computação FACOM Disciplina: Programação Orientada a Objetos I Professor: Fabiano Azevedo Dorça Prática 01

Java 2 Standard Edition. Fundamentos de. Objetos Remotos. Helder da Rocha

NOKIA. Em destaque LEE FEINBERG

Programação Orientada a Objetos e Java - Introdução. Carlos Lopes

Programação Orientada a Objetos em Java. Herança

7 RTTI e Interfaces. Desenvolvimento OO com Java. Vítor E. Silva Souza (vitorsouza@inf.ufes.br)

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

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

Aspectos técnicos do desenvolvimento baseado em componentes

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

Análise e Projeto Orientados por Objetos

Módulo 07 Características Avançadas de Classes

Curso de Aprendizado Industrial Desenvolvedor WEB

Padrões de projeto 1

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo

Padrões de Projeto. Singleton

2 Diagrama de Caso de Uso

Linguagem de Programação III

Como foi exposto anteriormente, os processos podem ter mais de um fluxo de execução. Cada fluxo de execução é chamado de thread.

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE ALAGOAS CURSO TECNICO EM INFORMATICA DISCIPLINA:

Reuso com Herança a e Composiçã

Java. Marcio de Carvalho Victorino

Programação Estruturada e Orientada a Objetos. Fundamentos Orientação a Objetos

Nome COMPLETO: Nº: Leia atentamente as notas que se seguem. Só depois deve iniciar o exame.

Programação Avançada. Padrões de Projeto de Software. Fonte: Oswaldo B. Peres e K19 Treinamentos

Programação Orientada a Objetos em java. Polimorfismo

Herança. Alberto Costa Neto DComp - UFS

Programação por Objectos. Java

Orientação a Objetos com Java

Programação Orientada a Objetos (DPADF 0063)

Especificação do 3º Trabalho

Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos

Padrão Básico de Projeto: Herança versus Composição

DEFINIÇÃO DE MÉTODOS

Adicionando Caixas de Verificação no seu Programa Java

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

Capítulo 4. Packages e interfaces

Roteiro para a escrita do documento de Especificação de Requisitos de Software (ERS)

A ) O cliente terá que implementar uma interface remota. . Definir a interface remota com os métodos que poderão ser acedidos remotamente

Padrão Básico de Projeto: Interfaces e Polimorfismo

Programação Orientada a Objetos Classes Abstratas Técnico em Informática. Prof. Marcos André Pisching, M.Sc.

Invocação de Métodos Remotos

Editor de Questões E24H

PADRÕES DE PROJETO. Prof.: Jean Carlo Mendes

Prof.ª Esp. Talita Pagani

3 Dicas MATADORAS Para Escrever s Que VENDEM Imóveis

Abstract Factory Pattern

MC-102 Aula 01. Instituto de Computação Unicamp

Roteiro do Programa e Entrada/Saída

J930. Padrões. Projeto. Introdução. argonavis.com.br. Helder da Rocha

Curso - Padrões de Projeto Módulo 1: Introdução

1Introdução Helder da Rocha

Programação Orientada a Objetos Herança Técnico em Informática. Prof. Marcos André Pisching, M.Sc.

Parte I. Orientação a objetos no PHP. Contato: <lara.popov@ifsc.edu.br> Site:

Módulo 5 JPATransaction Camadas Turma Turma TurmaBC TurmaBC TurmaBC TurmaBC

CURSO DE PROGRAMAÇÃO EM JAVA

Feature-Driven Development

Projeto de Software Orientado a Objeto

4 - Padrões de Construção

Universidade da Beira Interior. Sistemas Distribuídos

Prof. Esp. Adriano Carvalho

POO Programação Orientada a Objetos. Classes em Java

Possui como idéia central a divisão de um universo de dados a ser organizado em subconjuntos mais gerenciáveis.

Introdução ao GED Simone de Abreu

Transcrição:

Prototype, um Design Patterns de Criação José Anízio Pantoja Maia Este artigo tem como finalidade compreender o funcionamento do padrão de projeto prototype, serão abordados os participantes que compõe este padrão, seus objetivos de uso, quando usá-lo, conseqüências de uso, suas desvantagens e um exemplo prático em Java. Introdução Os Design Patterns (Padrões de Projeto, em português) são soluções genéricas para problemas que geralmente ocorrem no desenvolvimento de sistemas computacionais. Os mais conhecidos são os 23 Patterns catalogados pelos quatro amigos (Eric Gamma, Richard Helm, Ralph Johnson e John Vlissides), que ficaram conhecidos como a Gang dos Quatro (Gang of Four - GoF). Depois da publicação deste catalogo de Patterns, surgiram outros padrões, mas, a maior referência ainda é o conjunto de Patterns publicado pelos quatro amigos. O Pattern Prototype está entre os 23 publicados pelo GoF, este Pattern está na categoria dos padrões de criação e nosso objetivo é estudar e compreender seu funcionamento com exemplo prático. Descrição O Pattern Prototype tem como objetivo criar objetos específicos a partir da instância de um protótipo. Isso permite criar novos objetos através da cópia deste protótipo. O uso de células representa perfeitamente os objetivos deste pattern. Uma célula dividia em duas se tornam duas células idênticas com as mesmas funcionalidades. Supondo que estamos construindo um software que clona células para um grupo de cientistas que já nos ensinaram como é o processo de clonar células. Projetando a definição de prototype acima, poderíamos ter a seguinte situação: Agora vamos colaborar com estes cientistas malucos, que criam frutas e animais mutantes e construir um software para clonar células. A estrutura para clonar células pode ser vista no diagrama de classe (Figura 1). Figura 1: objetivos do pattern Prototype Grupo de Usuários Java http://www.guj.com.br Página 1

Estrutura Genérica A estrutura genérica trata-se de um modelo padrão proposto pelo GoF que mostra através do diagrama de classe (Figura 2) o funcionamento do Prototype. É chamada genérica porque a proposta deverá ser adaptada de acordo com o problema a ser aplicado, ou seja, não é obrigatório seguir exatamente o modelo, mas, usar a idéia e aplicar no problema que estamos tentando resolver. Figura 2: estrutura genérica Descrição dos Participantes da Estrutura Genérica 1. Cliente solicita a um protótipo que crie uma cópia de si mesmo, gerando outro objeto. 2. Prototype específica uma interface para clonar a si próprio. 3. Concrete Prototype implementa uma operação para clonar a si próprio. Conseqüências do uso do Prototype 1. Adição e remoção de produtos em tempo de execução incorpora uma nova classe concreta de produto a um sistema simplesmente registrando uma instância protótipo com o cliente. 2. Especificação de novos objetos pela variação de valores define novos comportamentos através da composição de objetos, por exemplo, pela especificação de valores para as variáveis de um objeto e não pela definição de novas classes. Com isso, define-se novos tipos de objetos pela instanciação das classes existentes e registrando as instâncias como protótipo dos objetoscliente. Um cliente pode exibir um novo comportamento através de delegação de responsabilidades para o protótipo. 3. Redução do número de subclasses permite clonar um protótipo em vez de pedir a um método para construir um novo objeto. Então, não será necessário uma hierarquia de classe. Grupo de Usuários Java http://www.guj.com.br Página 2

Quando usar Prototype Devemos usá-lo quando precisamos criar instâncias de classe e essa tarefa acaba sendo demorada/custosa e complexa de algum modo. Então, no lugar de criar várias instâncias, criamos cópias da instância original e usamos de acordo com as necessidades. Este pattern também pode ser usado sempre que precisamos de classes que só diferem o tipo de processamento que elas oferecem, por exemplo, no caso de um grande banco de dados onde precisamos fazer um número de questões para construir uma resposta. De posse desta resposta em uma tabela, poderíamos querer manipular esta tabela para produzir outras respostas sem emitir questões adicionais. Outro caso como um banco de dados contendo um número grande de nadadores de uma liga ou organização qualquer. Cada nadador, nada vários metros de distâncias ao longo de seus períodos de treino, os melhores tempos dos nadadores são agrupado por idade, e muitos nadadores vão fazer aniversários em seus respectivos grupos de idade e período de treino. Assim, determinar quais nadadores fizeram o melhor tempo no grupo de idade e em que período de treino se encontra cada nadador aniversariante. O cálculo computacional para juntar esta tabela de tempos deverá ser bastante considerável. Tendo uma classe que contenha esta tabela de tempos e ordenada por sexo, poderíamos imaginar tentar fazer uma buscar desta informação ordenando antes por tempo, ou por idade atual no lugar de grupo de idade. Não seria sensato re-computar estes dados, não queremos destruir os dados originais, mas, obter algum tipo de cópia do objeto de dados seria desejável. Desvantagem Cada subclasse de Prototype deve implementar a operação clone, o que pode ser difícil. Por exemplo, acrescentar clone é difícil quando as classes consideradas já existem. A implementação de clone pode ser complicada quando uma estrutura interna da classe inclui objetos que não suportam operação de cópia ou têm referencias circulares. Exemplo Prático Clonar uma célula foi somente um treino. Agora os cientistas malucos querem clonar um animal. Então vamos clonar um animal ovelha que se chamará Dolly, eu acho que esse nome é familiar! Aplicando a estrutura genérica do Prototype no problema, implementamos as seguintes classes: Classe cliente será responsável por fazer as solicitações de clones de ovelhas. * Está é a classe cliente que solicita o clone de um objeto ovelha * Aqui é solicitado o clone de um objeto ovelha chamada Dolly class Cliente { public static void main(string[] args) { PrototypeFactory prototype = new PrototypeFactory(new Ovelha("Dolly")); //solicita o clone de uma ovelha Animal animal = prototype.criaclone(); System.out.println("Nome do animal: " + animal.getnameanimal()); Grupo de Usuários Java http://www.guj.com.br Página 3

Classe PrototypeFactory retorna o clone de objetos quando solicitado pela classe cliente. * Está classe é responsável por criar e retornar clone de objetos public class PrototypeFactory { Animal prototypeanimal; //construtor public PrototypeFactory(Animal animal) { prototypeanimal = animal; * retorna um clone de um objeto * @return clone - clone de um objeto public Animal criaclone() { return (Animal) prototypeanimal.clone(); Classe Ovelha é o objeto que está sendo clonado. Ela implementa os métodos da classe abstrata Animal. * Está classe é uma classe Animal, mas agora especializada * É um animal específico, um animal ovelha. public class Ovelha extends Animal { // construtor public Ovelha(String nameovelha) { this.animalnome = nameovelha; setnomeanimal(animalnome); andar(); comer(); Grupo de Usuários Java http://www.guj.com.br Página 4

Classe Animal É uma classe abstrata que implementa a interface Cloneable do Java que possui um método clone responsável por retornar clone de objetos quando implementado corretamente. * Está classe implementa a classe Cloneable que fornece o método clone * responsável por clonar objetos public abstract class Animal implements Cloneable { String animalnome; public void setnomeanimal(string animalnome) { this.animalnome = animalnome; public String getnameanimal() { return this.animalnome; public void comer() { System.out.println(animalNome + " está comendo..."); public void andar() { System.out.println(animalNome + " está andando..."); * método responsável por clonar objetos public Object clone() { Object object = null; try { object = super.clone(); catch (CloneNotSupportedException exception) { System.err.println("A Ovelha não foi clonada"); return object; Saída ao Compilar Ao compilar este programa a saída deverá ser algo do tipo: Dolly está andando... Dolly está comendo... Nome do animal: Dolly Grupo de Usuários Java http://www.guj.com.br Página 5

Estrutura do Programa Exemplo O diagrama de classe abaixo (Figura 3) mostra a estrutura do programa acima usado como exemplo. Figura 3: diagrama de classe do exemplo proposto Sugestão de Treino para Fixar Conhecimento Criar novos animais estendendo a classe abstrata Animal, depois tentar clonar estes objetos usando a fábrica de protótipos PrototypeFactory, não esquecendo de fazer solicitações de clone usando a classe Cliente. Conclusão Desde a publicação do primeiro livro sobre padrões de projeto, cada vez mais se tem falado sobre tais padrões, muitos projetistas e programadores se interessam pelo assunto, mas muitos ignoram por não saberem os benefícios que os patterns podem trazer, ou talvez porque gostem de reinventar a roda. Prototype assim como os outros Patterns podem ser causadores de confiabilidade, reusabilidade e manutenibilidade de código, também podem ser capazes de economizar tempo e custo. Podemos perceber que as vantagens são maiores que as desvantagens, então, porque não usar? José Anízio Pantoja Maia (gorran4@hotmail.com / anizio_maia@yahoo.com.br) graduado em Sistemas de Informação, participou a implantação e operação do SIPAM (Sistema de proteção da Amazônia), certificado em Java atualmente trabalha com desenvolvimento de dispositivos móveis usando a Plataforma Java Micro Edition e é um dos fundadores do JugManaus (). Referencias: GAMA, Erich, HELM, Richard, JOHNSON, Ralph, VLISSIDES, John: Padrões de Projeto Soluções Reutilizáveis de Software Orientado a Objetos. Ed. Bookman, Port Alegre, 2000. http://www.fluffycat.com/java/javanotes-gofprototype.html Grupo de Usuários Java http://www.guj.com.br Página 6