Padrões Fábrica. Simple Factory Factory Method

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

Padrões de Projeto. Factory Method

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

INF011 Padrões de Projeto. 05 Factory Method

Creational Patterns Factory method

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

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

Universidade Federal de Uberlândia Faculdade de Computação Prof. Fabiano Azevedo Dorça Programação Orientada a Objetos II. Padrões de Projeto

Padrões de Projeto. Factory Method

Computação II Orientação a Objetos

Universidade Federal de Uberlândia

Universidade Federal de Uberlândia Faculdade de Computação Programação Orientada a Objetos 2 Prof. Fabiano Dorça. Padrões de Projeto.

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

Padrão de projeto de software

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

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

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

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

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

Classes e Objetos. Sintaxe de classe em Java

Universidade Federal de Uberlândia Disciplina: POO2 Prof. Fabiano Dorça. Padrões de Projeto. Padrão Command

Introdução. Atributos em Java. Atributos. Acesso à atributos em Java. Atributo versus variável. Atributos, métodos e encapsulamento.

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

Herança e Polimorfismo

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

Introdução. Universidade Federal de Uberlândia. Programação Orientada a Objetos. Prof. Fabiano Dorça

Análise e Projeto Orientados por Objetos

Classe Abstrata e Interface

Notação de Classes e Objetos

Java para Desktop. Programação Orientada à Objetos 2 JSE

nome = n; cargo = c; salario = s; public void print() { System.out.println(nome cargo salario); public void aumento( double fator){

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

4 Conceito de Herança

Análise e Projeto Orientados por Objetos

Computação II - Java - Prova 1 Prof. Adriano Joaquim de Oliveira Cruz /05/13. Questão: Total Pontos: Gráu:

Computação II Orientação a Objetos

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

Universidade Federal de Itajubá Instituto de Engenharia de Sistemas e Tecnologias da Informação-IESTI CCO002 Engenharia de Software

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

Encapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos

CONCEITOS BÁSICOS DE ORIENTAÇÃO A OBJETOS PROF. ME. HÉLIO ESPERIDIÃO

Padrões de Projeto de Software

Conceitos de Programação Orientada a Objetos

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Computação II Orientação a Objetos

Interfaces. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Herança. Fátima L. S. Nunes Luciano A. Digiampietri Norton T. Roman SISTEMAS DE INFORMAÇÃO 1

Algoritmos e Programação 2. Objetos e Classes em Java. Classes. Revisão. Definições de classes incluem (geralmente):


Linguagem de Programação III

Computação II - Java - Teste 1.2 Prof. Adriano Joaquim de Oliveira Cruz 2015/04/27

Aula 4 Encapsulamento e Relacionamento Cleverton Hentz

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

INF1013 MODELAGEM DE SOFTWARE

INF011 Padrões de Projeto. 03 Abstract Factory

Herança e Propriedades

Análise e Projeto Orientados por Objetos

Tratamento de Erros. Sérgio Luiz Ruivace Cerqueira

Lição 11 Herança, polimorfismo e interfaces

Profa. Thienne Johnson

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

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

Programação orientada a objetos em Java

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

Sabemos que a classe é responsável por definir a estrutura e o comportamento de seus objetos. Portanto, os objetos são instâncias das classes.

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

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

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

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

Programação Estruturada e Orientada a Objetos

Programação com Objectos. Processamento de Dados I. 2. Classes, Atributos e Métodos

POO29004 Programação Orientada a Objetos

Dados armazenados em um objeto podem ser tanto primitivos, tais como inteiros ou caracteres, ou referências para outros objetos.

E N C A P S U L A M E N T O P R O F. M E. H É L I O E S P E R I D I Ã O

Iterator. Professor: Hyggo Almeida

Tópicos Avançados em Linguagem de Programação. Builder. Builder. Builder. Classificação: Padrões de Projeto. Builder Pattern.

Programação Orientada a Objetos Classes Abstratas. Sérgio Soares

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 II Implementação

Relacionamentos entre objetos

Computação Paralela. Conceitos de Programação Orientada ao Objecto. João Luís Ferreira Sobral Departamento do Informática Universidade do Minho

Linguagem de Programação II Implementação

Análise e Projeto Orientados por Objetos

Aula 5 POO 1 Encapsulamento. Profa. Elaine Faria UFU

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

Polimorfismo. O que é polimorfismo?

POO UML e Outros Conceitos. Prof. Vicente Paulo de Camargo

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

POO29004 Programação Orientada a Objetos

Atributos e Métodos Estáticos

Computação II Orientação a Objetos

Classe Interna (Inner)

Sumário. Prefácio 12. Capítulo 1 - Técnicas Simples Para um Código Limpo 23

Análise e Projeto Orientados por Objetos

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

Dada a linguagem, números romanos, construir uma representação para a gramática dela junto com um interpretador para essa gramática.

Transcrição:

Universidade Federal de Uberlândia Faculdade de Computação Disciplina: POO2 Prof. Fabiano Azevedo Dorça Padrões Fábrica Simple Factory

Padrões Fábrica Padrão Simple Factory: fornece interfaces para criar objetos sem expor a lógica de criação para o cliente. Padrão : fornece interfaces para criar objetos, mas permite que subclasses determinem qual classe instanciar. Padrão Abstract Factory: permite criar famílias de objetos relacionados sem expor as suas classes.

Simple Factory Simple factory: Visa encapsular a criação de objetos em um método. Isto permite manter em um único local comandos new ClasseConcreta(). Desacopla o cliente dos objetos que deseja criar. Permite ao cliente transferir a responsabilidade de instanciação de objetos complexos a uma fábrica.

Simple Factory Evita modificação de código quando novas classes são criadas Evita modificação de código quando a forma de instanciar objetos é modificada. Exemplo: novos decoradores são criados, afetando vários pontos do código. Facilita manutenção de código já que a replicação de código de instanciação está em um único local.

Simple Factory Participantes: Client: requisita objetos à fábrica; SimpleFactory: recebe requisiçoes do cliente e devolve objetos instanciados; Product Interface: interface que representa os produtos a serem criados pela fábrica; Concrete Product: classes concretas representando os produtos a serem instanciados pela fábrica.

Simple Factory

Simple Factory

Fábrica de pizza Classe abstrata Freeman. Padrões de Projeto Use a Cabeça.

Freeman. Padrões de Projeto Use a Cabeça.

Freeman. Padrões de Projeto Use a Cabeça.

Freeman. Padrões de Projeto Use a Cabeça.

Simple Factory Exemplo: Uma fábrica de personagens public class SimplePersonagemFactory{ public [static] Personagem createpersonagem(int tipo){ Personagem p = null; if (tipo == 1) p = new Mago(); else if (tipo ==2) p = new Feiticeiro(); else if (tipo == 3) p = new Campones(); else p = new Lanceiro; return p;

Simple Factory Exemplo: Uma fábrica de personagens com ataques decorados com armas especificas public class SimplePersonagemFactory{ public [static] Personagem createpersonagem(int tipo){ Personagem p = new Personagem(); if (tipo == 1) //mago p.setataque(new Magia(new Ataque1())); else if (tipo ==2) //feiticeiro p.setataque(new Feitico(new Ataque2())); else if (tipo == 3) //campones p.setataque(new Facao(new Ataque3())); else p = new Lanceiro; return p;

Simple Factory Exemplo: Uma fábrica de personagens com diversos métodos de criação public class SimplePersonagemFactory{ public [static] Personagem createmago(){ return new Mago(); public [static] Personagem createfeiticeiro(){ return new Feiticeiro(); public [static] Personagem createcampones(){ return new Campones();

Simple Factory Exemplo: Uma fábrica de personagens com estratégias public class SimplePersonagemFactory{ public [static] Personagem createpersonagem(int tipo){ Personagem p = new Personagem(); if (tipo == 1) { p.setataque(new AtaqueFraco()); p.setcorrida(new CorridaRapida()); else if (tipo ==2) { p.setataque(new AtaqueForte()); p.setcorrida(new CorridaLenta());.. return p;

Simple Factory Algumas possibilidades incluem: a geração automática randomica dos personagens. a modificação da forma de instanciação de um objeto sem alteração do restante do código

Simple Factory Conclusões Além de evitar problemas de manutenção futuros, o padrão simple factory abre novas possibilidades relacionadas à instanciação de objetos. Facilita a implementação quando a classe concreta a ser instanciada é definida em tempo de execução. Evita problemas quando o código que instancia objetos é uma área de mudanças frequentes. Evita duplicação de código de instanciação e fornece um local único para fazer a manutenção. Encapsula a instanciação de objetos complexos, como cadeias, decorators, composites, etc.

* Define uma interface para instanciação de objetos, mas deixa as subclasses decidirem que classes instanciar. * Permite a uma classe postergar a instanciação às subclasses. * Regra: Criar objetos numa operação separada de modo que subclasses possam redefinir a maneira como eles são criados. * Essa regra permite que projetistas de subclasses possam mudar a classe de objetos que a classe ancestral instancia.

Aplicabilidade Use o padrão factory method quando: * Uma classe não pode antecipar a classe de objetos que deve criar; * Uma classe quer que suas subclasses especifiquem os objetos que criam.

Participantes: As classes e/ou objetos que participam do padrão são: Product: Define uma interface de objetos que o método-fábrica cria. ConcreteProduct: Implementa a interface Product, criando um produto concreto. Creator: Declara o método-fábrica, que retorna um objeto do tipo Product. ConcreteCreator: Sobrescreve o método-fábrica para retornar uma instância de ConcreteProduct.

Diagrama

Na construção de frameworks... * Os factory methods eliminam a necessidade de anexar classes específicas das aplicações cliente no código do framework. * O código lida somente com interface Product. * Portanto ele pode trabalhar com quaisquer classes ConcreteProduct definidas pelo usuário.

Freeman. Padrões de Projeto Use a Cabeça.

Freeman. Padrões de Projeto Use a Cabeça.

Consequências importantes: Fornece ganchos para subclasses. * Criar objetos dentro de uma classe com um método fábrica é sempre mais flexível do que criar um objeto diretamente. * Factory method dá às classes um gancho para que se possa implementar diferentes versões da fábrica.

Implementação: Três variações principais: (1) o caso em que a classe Creator é uma classe abstrata e não fornece uma implementação para o método fábrica que ele declara. (2) o caso em que o Creator é uma classe concreta e fornece uma implementação default para o método fábrica. (3) o caso em que o Creator é uma classe abstrata que define uma implementação default para o método fábrica.

Exemplo: public abstract class Game{ public Personagem createpersonagem(int tipo); public void Jogar(){ //logica de execução (controller) Personagem p1 = createpersonagem(1); Personagem p2 = createpersonagem(2); p1.atarcar(p2); p1.correr(); p2.atacar(p1);

public class TradicionalGame extends Game{ public Personagem createpersonagem(int tipo){ Personagem p = new Personagem(); if (tipo == 1) { p.setataque(new AtaqueFraco()); p.setcorrida(new CorridaRapida()); else if (tipo ==2) { p.setataque(new AtaqueForte()); p.setcorrida(new CorridaLenta());.. return p;

public class AdvancedGame extends Game{ public Personagem createpersonagem(int tipo){ Personagem p = new Personagem(); if (tipo == 1) { p.setataque(new PoderFogo(new AtaqueFraco())); p.setcorrida(new CorridaRapida()); else if (tipo ==2) { p.setataque(new PoderVento(AtaqueForte())); p.setcorrida(new CorridaLenta());.. return p;

Exemplo: Framework para manipulação de diferentes tipos de documentos.

// Product abstract class Page { public void print() { System.out.println(this.getClass().getName()); // ConcreteProducts class SkillsPage extends Page {... // ConcreteProduct class EducationPage extends Page {... // ConcreteProduct class ExperiencePage extends Page {...

// ConcreteProduct class BibliographyPage extends Page {... // ConcreteProduct class ResultsPage extends Page {... // ConcreteProduct class ConclusionPage extends Page { // ConcreteProduct class IntroductionPage extends Page {... // ConcreteProduct class SummaryPage extends Page {...

// Creator public abstract class Document{ private ArrayList<Page> pages; public void novo(){ pages = createpages(); public void print() { for (Page p: pages) System.out.println(p.print()); protected abstract ArrayList<Page> createpages(); Factory method

// ConcreteCreator class Resume extends Document{ protected ArrayList<Page> createpages() { ArrayList<Page> pages = new ArrayList<Page>() pages.add (new SkillsPage()); pages.add (new EducationPage()); pages.add (new ExperiencePage()); return pages;

// ConcreteCreator class Report extends Document { protected ArrayList<Page> createpages() { ArrayList<Page> pages = new ArrayList<Page>() pages.add (new IntroductionPage()); pages.add (new ResultsPage()); pages.add (new ConclusionPage()); pages.add (new SummaryPage()); pages.add (new BibliographyPage()); return pages;

// Client class Test { public static void main( String[] args) { Document docs; docs = new Resume(); docs.novo(); docs.print();. docs = new Report(); docs.novo(); docs.print();...

Vantagem... O framework pode ser facilmente expandido com novos tipos de documentos através do gancho dado pelo método fábrica.

Freeman. Padrões de Projeto Use a cabeça.

Conclusão * Todos os padrões factory encapsulam a criação de objetos. * O padrão factory method encapsula a criação de objetos deixando as subclasses decidirem quais objetos concretos criar.

Fim!