Curso - Padrões de Projeto Módulo 2: Padrões 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.

Prototype, um Design Patterns de Criação

Padrões de Projeto. Singleton

Curso - Padrões de Projeto Módulo 5: Model-View- Controller

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

INF011 Padrões de Projeto. 02 Creational Patterns

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

1Introdução Helder da Rocha

Padrões de Projeto de Software Orientado a Objetos

Padrões de projeto 1

Guia de Fatores de Qualidade de OO e Java

Factory Method. Edeyson Andrade Gomes

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

Abstract Factory Pattern

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

Programação por Objectos. Java

Java. Marcio de Carvalho Victorino

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

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

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

Reuso com Herança a e Composiçã

Programação de Computadores - I. Profª Beatriz Profº Israel

Modulo IIa Extra: Object

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

Padrões GoF. Leonardo Gresta Paulino Murta

4 - Padrões de Construção

Um objeto é uma instância de uma 'classe'. Você define uma classe utilizando o trecho de código abaixo;

Orientação a Objetos com Java

Programação com Objectos

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

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

Programação Orientada a Objetos em Java

Orientação a Objetos

Análise e Projeto de Sistemas de Informação. Andrêza Leite andreza.lba@gmail.com

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

PRODUTO 1 (CONSTRUÇÃO DE PORTAL WEB)

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

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

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa

Herança. Alberto Costa Neto DComp - UFS

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

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

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

Métodos de Construção de Software: Orientação a Objetos. Mestrado em Ciência da Computação 2008 Profa. Itana Gimenes

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

2 Diagrama de Caso de Uso

Computação II Orientação a Objetos

Universidade Federal de Itajubá Instituto de Engenharia de Sistemas e Tecnologias da Informação-IESTI PCO203 Tópicos Especiais em Programação

PROGRAMAÇÃO SERVIDOR PADRÕES MVC E DAO EM SISTEMAS WEB. Prof. Dr. Daniel Caetano

Curso de Aprendizado Industrial Desenvolvedor WEB

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

PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

EAGLE TECNOLOGIA E DESIGN CRIAÇÃO DE SERVIDOR CLONE APCEF/RS

Java 2 Standard Edition Como criar classes e objetos

Técnicas de Programação II

CONVENÇÃO DE CÓDIGO JAVA

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

Linguagem de Programação III

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

UML Aspectos de projetos em Diagramas de classes

Desenho de Software. Desenho de Software 1

Engenharia de Software III

Semântica para Sharepoint. Busca semântica utilizando ontologias

Design Patterns (Factory Method, Prototype, Singleton)

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

Padrões clássicos ou padrões GoF O livro "Design Patterns (1994) de Erich Gamma, John Vlissides, Ralph Jonhson e Richard Helm, descreve 23 padrões de

Especialização em web com interfaces ricas. Padrões de Projeto - Estruturais

Autor: Ricardo Francisco Minzé Júnior - ricardominze@yahoo.com.br Desenvolvendo aplicações em camadas com PHP 5.

Modelagem OO com UML. Vítor E. Silva Souza ~ vitorsouza

UFG - Instituto de Informática

Curso: Redes II (Heterogênea e Convergente) Tema da Aula: Características Roteamento


Paradigmas da Programação PPROG. Linguagem JAVA. Interfaces. (Livro Big Java, Late Objects Capítulo 9) Nelson Freire (ISEP DEI-PPROG 2013/14) 1/33

sobre rogério gonçalves gerente de projetos > digitale agência digital rogerio@digitale.com.br h7p:// h7p://leveme.

Figura 1. A Classe Java

Design Patterns. Viviane Torres da Silva

JSP - ORIENTADO A OBJETOS

Padrão Arquitetura em Camadas

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

Criando & Consumindo um WebService com ASP.NET 2.0 Publicado em: 25 de Agosto de 2007 Por Herman Ferdinando Arais

Capítulo 11. Conceitos de Orientação a Objetos. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

Introdução à orientação a objetos. João Tito Almeida Vianna 25/05/2013

ABORDAGEM DE FRAMEWORKS PARA JSF QUE AUXILIAM O DESENVOLVIMENTO DE SOFTWARE

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi

Organizando Classes em Pacotes. Profa. Thienne Johnson EACH/USP

Implementando uma Classe e Criando Objetos a partir dela

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

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais

Evolução do Design através de Testes e o TDD

Processos e Threads (partes I e II)

Fábrica de Software 29/04/2015

3.1 Definições Uma classe é a descrição de um tipo de objeto.

Bem- Vindo ao manual de instruções do ECO Editor de COnteúdo.

Construção Páginas de Internet

PROGRAMAÇÃO SERVIDOR PADRÕES DAO, VIEW CONTROL E FRONT CONTROL EM SISTEMAS WEB. Prof. Dr. Daniel Caetano

Transcrição:

Curso - Padrões de Projeto Módulo 2: Padrões de Criação Vítor E. Silva Souza vitorsouza@gmail.com http://www.javablogs.com.br/page/engenho http://esjug.dev.java.net

Sobre o Instrutor Formação: Java: Graduação em Ciência da Computação, com ênfase em Engenharia de Software, pela Universidade Federal do Espírito Santo (UFES); Mestrado em Informática (em andamento) na mesma instituição. Desenvolvedor Java desde 1999; Especialista em desenvolvimento Web; Autor do blog Engenho www.javablogs.com.br/page/engenho. Profissional: Consultor em Desenvolvimento de Software Orientado a Objetos Engenho de Software Consultoria e Desenvolvimento Ltda. 2

Estrutura do Curso Módulo 1 Módulo 2 Módulo 3 Módulo 4 Módulo 5 Introdução Padrões de Criação Padrões de Estrutura Padrões de Comportamento O Padrão Model-View-Controller 3

Conteúdo deste módulo Introdução; Abstract Factory; Builder; Factory Method; Prototype; Singleton; Conclusões. 4

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

Criação de Objetos Em um sistema OO, precisamos criar objetos que irão interagir para construir a solução do problema. 6

Abordagens para criação I Dependencia d = new Dependencia(); Solução inflexível: Cliente se refere a uma implementação específica de sua dependência; Cliente constrói diretamente uma instância específica de sua dependência. 7

Abordagens para criação II Dependencia d = new DependenciaImpl(); Alguma flexibilidade: Cliente já não mais associa-se com uma classe concreta; Porém, instancia a mesma diretamente. 8

Abordagens para criação III FabricaDependencias fabrica = new FabricaDependencias(); Dependencia d = fabrica.construirdependencia(); Maior flexibilidade: A fábrica pode escolher a melhor classe concreta de acordo com um critério: hard-coded, meta-dado, parâmetro, etc. 9

Injeção de Dependências obterbean("janela"); Fábrica de Beans Programa Configuração bean: Janela classe: janelas.estiloa.janelaprincipal dependência: aplicacao = bean Aplicacao bean: Aplicacao classe: aplicacao.nucleo.aplicacaoprincipal dependência: acessodados = bean AcessoDados bean: AcessoDados classe: persistencia.mysql.acessodados 10

Cuidados com a flexibilização Maior flexibilização = Menor chance de ter que reprojetar; Menor desempenho; Maior dificuldade de realizar coisas simples; Maior dificuldade de compreender o código. Ex.: meta-data hell. 11

Padrões de Criação Abstraem o processo de instanciação, ajudando a tornar o sistema independente da maneira que os objetos são criados, compostos e representados. Escopo de Classe Escopo de Objeto Factory Method Abstract Factory Builder Prototype Singleton 12

Curso - Padrões de Projeto Módulo 2: Padrões de Criação Abstract Factory (Fábrica Abstrata) Criação / Objeto

Descrição Intenção: Prover uma interface para criação de famílias de objetos relacionados sem especificar suas classes concretas. Também conhecido como: Kit. 14

O problema O sistema acima utiliza APIs específicas da plataforma para criar o Look & Feel ; Como desenvolvê-lo já preparado para ser portado para outra plataforma? 15

A solução java.awt.toolkit implementa este padrão. Uma das fábricas de componentes se encarregará da criação dos objetos; Cliente não conhece as classes concretas. 16

Estrutura 17

Analogia Non-Software Examples of Software Design Patterns by Michael Duell http://www2.ing.puc.cl/~jnavon/iic2142/patexamples.htm 18

Usar este padrão quando... o sistema tiver que ser independente de como seus produtos são criados, compostos ou representados; o sistema tiver que ser configurado com uma ou mais famílias de produtos (classes que devem ser usadas sempre em conjunto); você quiser construir uma biblioteca de produtos e quiser revelar apenas suas interfaces e não suas implementações. 19

Vantagens e desvantagens Isola classes concretas: Fábricas cuidam da instanciação, o cliente só conhece interfaces. Facilita a troca de famílias de classes: Basta trocar de fábrica concreta. Promove consistência interna: Não dá pra usar um produto de uma família com um de outra. Criar novos produtos é trabalhoso: É necessário alterar as implementações de todas as fábricas para suportar o novo produto. 20

Curso - Padrões de Projeto Módulo 2: Padrões de Criação Builder (Construtor) Criação / Objeto

Descrição Intenção: Separar o processo de construção de um objeto complexo de sua representação para que o mesmo processo possa criar diferentes representações. 22

O problema Um objeto lê um texto em RTF e converte para HTML como produto final de um processamento; Como fazer para preparar este sistema para uma eventual mudança de formato (texto puro, por exemplo)? 23

A solução Para um sistema que mostre o resultado em texto puro, basta trocar o construtor. 24

Estrutura 25

Algoritmo 26

Analogia Non-Software Examples of Software Design Patterns by Michael Duell http://www2.ing.puc.cl/~jnavon/iic2142/patexamples.htm 27

Usar este padrão quando... o algoritmo para criação de objetos complexos tiver que ser independente das partes que compõem o objeto e como elas são unidas; o processo de construção tiver que permitir diferentes representações do objeto construído. 28

Vantagens e desvantagens Permite que varie a representação interna de um produto: Basta construir um novo builder. Separa o código de construção: Melhora a modularidade, pois o cliente não precisa saber da representação interna do produto. Maior controle do processo de construção: Constrói o produto passo a passo, permitindo o controle de detalhes do processo de construção. 29

Curso - Padrões de Projeto Módulo 2: Padrões de Criação Factory Method (Método Fábrica) Criação / Classe

Descrição Intenção: Definir uma interface para criação de objetos mas deixar as subclasses decidirem qual classe instanciar. Em outras palavras, delega a instanciação para as subclasses. Também conhecido como: Virtual Constructor. 31

O problema d = new DocumentoMultimidia(); docs.add(d); d.abrir(); Framework específico para uma aplicação que manipula documentos multimídia; É possível criar um framework mais genérico, para qualquer aplicação de manipulação de documentos? 32

A solução d = construirdocumento(); docs.add(d); d.abrir(); return new DocumentoMultimidia(); Classes abstratas implementam as funções comuns a todo tipo de documento; Método fábrica é definido na superclasse e implementado na subclasse. 33

Estrutura... product = factorymethod();... return new ConcreteProduct(); 34

Analogia Non-Software Examples of Software Design Patterns by Michael Duell http://www2.ing.puc.cl/~jnavon/iic2142/patexamples.htm 35

Usar este padrão quando... uma classe não tem como saber a classe dos objetos que precisará criar; uma classe quer que suas subclasses especifiquem o objeto a ser criado. 36

Vantagens e desvantagens Melhor extensibilidade: Não é necessário saber a classe concreta do objeto para criá-lo. Obrigatoriedade da subclasse fábrica: Não é possível criar somente um produto novo sem fábrica (exceto no caso do parametrizado). Mostraremos a seguir: Extensão pela subclasse, método fábrica parametrizado e hierarquias paralelas. 37

Extensão pela subclasse Retorna uma janela genérica para localizar um documento no disco e abrir. Retorna uma janela específica para localizar documentos multimídia. 38

Método fábrica parametrizado Forma f = FabricaForma. obterforma("oval"); FabricaForma fab = mapafabricas.get("oval"); return fab.construirforma(); 39

Hierarquias paralelas Forma f = FabricaForma. obterforma("oval"); ManipuladorForma mf = f.obtermanipulador(); 40

Curso - Padrões de Projeto Módulo 2: Padrões de Criação Prototype (Protótipo) Criação / Objeto

Descrição Intenção: Especificar o tipo de objeto a ser criado utilizando uma instância como protótipo e criar novos objetos copiando este protótipo. 42

O problema Existe um framework para edição de documentos genéricos; A ferramenta gráfica para um editor musical precisa conhecer os gráficos específicos, o que anula o benefício conseguido anteriormente. 43

A solução A ferramenta gráfica é configurada com protótipos dos objetos gráficos; Quando precisar criar algum deles, chama o método clone(), que retorna uma cópia de si mesmo. 44

Estrutura 45

Analogia Non-Software Examples of Software Design Patterns by Michael Duell http://www2.ing.puc.cl/~jnavon/iic2142/patexamples.htm 46

Prototype em Java Método Object.clone() é um exemplo; Nota n = new Nota(Nota.SOL); Nota copia = n.clone(); Implementação: class Nota implements Cloneable { private Tempo tempo; private int som; public Object clone() { try { Nota n = (Nota)super.clone(); n.tempo = tempo.clone(); // Tempo deve ser clonável return n; } catch (CloneNotSupportedException e) { return null; } } } 47

Usar este padrão quando... o sistema deve ser independente de como seus produtos são criados, compostos e representados e... as classes que devem ser criadas são especificadas em tempo de execução; ou você não quer construir uma fábrica para cada hierarquia de produtos; ou as instâncias da classe clonável só tem alguns poucos estados possíveis, e é melhor clonar do que criar objetos. 48

Vantagens e desvantagens Esconde a implementação do produto; Permite adicionar e remover produtos em tempo de execução (configuração dinâmica da aplicação); Não necessita de uma fábrica para cada hierarquia de objetos; Implementar clone() pode ser complicado. 49

Curso - Padrões de Projeto Módulo 2: Padrões de Criação Singleton (Objeto Único) Criação / Objeto

Descrição Intenção: Garantir que uma classe possui somente uma instância e prover um ponto de acesso global a ela. 51

O problema Algumas vezes você precisa que uma classe só tenha uma instância para todo o sistema; Prover um ponto de acesso static não é suficiente, pois classes poderão ainda construir outra instância diretamente. 52

A solução public static ObjetoUnico instancia() { if (instanciaunica == null) { instanciaunica = new ObjetoUnico(); } return instanciaunica; } Há um ponto de acesso global (método static); Construtor privado ou protected? Depende se as subclasses devem ter acesso; Bloco de criação poderia ser synchronized para maior seguranças em ambientes multithread; A instância única poderia ser pré-construída. 53

Estrutura public static Singleton instance() { if (uniqueinstance == null) { uniqueinstance = new Singleton(); } return uniqueinstance; } 54

Analogia Non-Software Examples of Software Design Patterns by Michael Duell http://www2.ing.puc.cl/~jnavon/iic2142/patexamples.htm 55

Usar este padrão quando... tiver que haver exatamente uma instância de uma classe e ela tiver que estar acessível a todos num local bem definido; quiser permitir ainda que esta classe tenha subclasses (construtor protected). 56

Vantagens e desvantagens Acesso controlado à instância: A própria classe contrla sua instância única. Não há necessidade de variáveis globais: Variável globais poluem o espaço de nomes. Permite extensão e refinamento: A classe Singleton pode ter subclasses. Permite número variado de instâncias: Você pode controlar este número. Mais flexível do que operações de classe: Usar membro static perde flexibilidade. 57

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

Atenção na criação de objetos Como representar e como criar objetos é um conceito chave do seu projeto: Pode facilitar ou dificultar o desenvolvimento; Pode flexbilizar ou enrijecer sua estrutura de classes. Padrões de criação mostram diversas alternativas para criação. 59

Os padrões e seus usos Controlar o número de instâncias = Singleton; Processo de construção for complexo, envolvendo várias partes = Builder; Simplesmente flexibilizar a criação: Abstract Factory: famílias de objetos; Factory Method: uma fábrica por hierarquia; Prototype: a fábrica é a própria classe. 60

Fábricas auxiliam até casos muito simples Métodos fábrica vs. Construtores: Podem ter nomes mais significativos; Ex.: BigInteger.probablePrime(). Não precisam criar um objeto novo toda vez; Ex.: Boolean.valueOf(). Podem retornar instâncias de subclasses: Collections.synchronizedCollection(). Classes sem construtores public ou protected não podem ter subclasses; Não é clara a distinção entre métodos fábrica e outros métodos da classe (static). 61

Conclusões Estude os padrões: Existem outras alternativas para criação; Existem casos em que são necessárias; Amplia sua visão como projetista. Atenção aos anti-padrões: Singleton é considerado por alguns um anti-padrão. Argumentos: Algo ter que ser global = projeto ruim; Clientes ficam acoplados (dificulta os testes); Viola o princípio da responsabilidade única. 62

Curso - Padrões de Projeto Módulo 2: Padrões de Criação Vítor E. Silva Souza vitorsouza@gmail.com http://www.javablogs.com.br/page/engenho http://esjug.dev.java.net