Padrão de Construção Factory Method

Slides:



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

Padrão de Projeto Iterator
PADRÕES DE PROJETO..
Design Patterns Patrícia Mateus nº3343 Carla Guerreiro nº3157
Modelagem de Software Orientado a Objetos
Design Patterns Builder Pattern
Projeto de Sistemas de Software Hazel, Juliana e Luana
Projeto de Sistemas de Software
Projeto de Sistemas de Software Fernando de Freitas Silva
Padrão de Projeto Memento
Projeto de Sistemas de Software
Projeto de Sistemas de Software
Abstract Factory – Gustavo Lopes Mourad.
Projeto de Sistemas de Software Leandra Mara da Silva
Padrão Abstract Factory
1 Introdução aos padrões de projeto (GoF) Conceitos preliminares –Mecanismos de herança –Princípio de Substituição de Liskov –Acoplamento concreto x Acoplamento.
Abstract Factory Intenção: fornecer uma interface comum para a criação de famílias de objetos relacionados ou dependentes, sem especificar suas classes.
Eduardo Bezerra Padrões GoF Eduardo Bezerra
Chain of Responsibility
Padrões - introdução O que é um padrão?
Padrão de Projeto Chain of Responsability e Template Method
Design Patterns Projeto de Sistemas de Software.
Fundamentos da Engenharia de Software
Padrões de projeto detalhados Factory Method, Abstract Factory
Singleton e Adapter Professor: Nazareno Andrade
Módulo III Padrões GOF Professores
Projeto de Sistemas de Software
Padrões de Projeto Aplicações empresariais são complexas
Estudo de Caso: um editor de documentos
Adriano S. Castro André Abdalla
Rodrigo Cândido da Silva Instrutor VOffice / Globalcode
Padrões de Projeto These slides complement the E-book, Programming in the Large With Design Patterns available on both Kindle and Nook. Additional supporting.
Design Pattern (Padrões de Projeto)
1 Padrões de Software Padrões GoF (Parte 2) Eduardo Bezerra Outubro/2005.
Padrões de Projeto.
Introdução Padrões de Projeto
Design Patterns (Padrões de Projeto)
Padrão de Projeto Iterator Projeto de Sistemas de Software Thiago Pinheiro de Araújo.
Trabalho Final de Padrões de Projeto
Padrões de Design Toacy Cavalcante de Oliveira. 2 April 20, 2015 Problema.
Padrões de Projeto Abstract Factory.
Padrões de Projeto.
Factory.
Design Patterns A adoção dos padrões terá um efeito profundo e duradouro sobre a forma de escrevermos programas Ward Cunningham e Ralph Johnson.
Padrões de Projeto de Software Orientado a Objetos
Padrões de Projeto Alcides Calsavara
1 Padrões: Composite (p. 163) Objetivo: compor objetos em estruturas de árvores para representar relações de parte/todo. “Composite” permite tratar objetos.
Padrões de projeto M.Sc. Sílvio Bacalá Jr..
1 Design Patterns Israel Rios. 2 Origens A idéia de padrões de projeto não teve origem na ciência da computação Christopher Alexander A Pattern Language:
Padrão Composite Definição
Jobson Ronan Padrões GoF Jobson Ronan
Introdução a Orientação a Objetos
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ANÁLISE E PROJETO DE SISTEMAS Semana /08/2012 Professor Leomir J. Borba-
1 - Introdução a Padrões de Projeto
Módulo II Capítulo 1: Orientação a Objetos
Padrões de Projetos Professora Lucélia. Conceitos É uma solução conhecida para um problema comum São técnicas que nos dão uma boa solução para determinados.
Padrões de Projetos Orientados a Objetos I Wolley W. Silva.
Padrões de Projeto. O que são?  Soluções provenientes de diversos projetos e utilizados por diversos programadores;  Documentados em catálogos como.
UCSal – Bacharelado em Informática Tópicos Especiais em Informática II Profa. Semíramis Assis
©2003, Alexandre Vasconcelos & Augusto Sampaio CIn-UFPE1/65 Padrões de Projeto.
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ANÁLISE E PROJETO DE SISTEMAS Aula /08/2012 Professor Leomir J. Borba-
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.
1 Padrões de Projeto de Software Orientado a Objetos Programação Orientada a Objetos Prof. Fabio Kon - IME/USP.
1 Introdução aos Padrões de Projetos Créditos: Prof. Fabio Kon - IME/USP Adaptações: Prof. Nécio de Lima Veras.
Introdução a Padrões de Projeto Padrões de Projeto Orientado a Objetos Profa. Danielle Martin Universidade de Mogi das Cruzes.
Programação Orienta a Objetos (SI) Análise e Projetos de Sistemas (LCC) 1 - Introdução a Padrões de Projeto Eduardo de Lucena Falcão.
Introdução a Padrões de Projeto Padrões de Projeto Orientado a Objetos Profa. Danielle Martin Universidade de Mogi das Cruzes.
Padrões de Projeto.
Arquitetura e padrões de software
Transcrição da apresentação:

Padrão de Construção Factory Method Equipe: Danielle, Gerson e Samuel

"Definir uma interface para criar um objeto mas deixar que subclasses decidam que classe instanciar. Factory Method permite que uma classe delegue a responsabilidade de instanciamento às subclasses." [GoF]

1. Introdução A maneira padrão de construir objetos em Java é através de construtores.

2. Problema O acesso a um objeto concreto será através da interface conhecida através de sua superclasse, mas cliente também não quer (ou não pode) saber qual implementação concreta está usando.

3. Padrões de Construção • Builder: obtém informação necessária em passos antes de requisitar a construção de um objeto • Factory Method: adia a decisão sobre qual classe concreta instanciar • Abstract Factory: constuir uma família de objetos que compartilham um "tema" em comum • Prototype: especificar a criação de um objeto a partir de um exemplo fornecido • Memento: reconstruir um objeto a partir de uma versão que contém apenas seu estado interno

4. Factory Method É possível criar um objeto sem ter conhecimento algum de sua classe concreta? • Esse conhecimento deve estar em alguma parte do sistema, mas não precisa estar no cliente • FactoryMethod define uma interface comum para criar objetos • O objeto específico é determinado nas diferentes implementações dessa interface Factory methods são métodos estáticos que retornam uma instância de uma classe. Exemplo:Calendar.getInstance public class ComplexNumber { /** * Static factory method returns an object of this class. */ public static ComplexNumber valueOf(float aReal, float aImaginary) { return new ComplexNumber(aReal, aImaginary); } //private constructor prevents subclassing private ComplexNumber (float aReal, float aImaginary) { fReal = aReal; fImaginary = aImaginary; private float fReal; private float fImaginary;

5. Estrutura do Padrão

5. Estrutura do Padrão

5. Estrutura do Padrão

5. Estrutura do Padrão

6. Implementação /*** MazeGame sem factory method.*/ public class MazeGame { // Create the maze. public Maze createMaze() { Maze maze = new Maze(); Room r1 = new Room(1); Room r2 = new Room(2); Door door = new Door(r1, r2); maze.addRoom(r1); maze.addRoom(r2); r1.setSide(MazeGame.North, new Wall()); r1.setSide(MazeGame.East, door); r1.setSide(MazeGame.South, new Wall()); r1.setSide(MazeGame.West, new Wall()); r2.setSide(MazeGame.North, new Wall()); r2.setSide(MazeGame.East, new Wall()); r2.setSide(MazeGame.South, new Wall()); r2.setSide(MazeGame.West, door); return maze; } E se quiséssemos uma DoorWithLock ou um WallWithHiddenDoor? Teríamos que fazer mudanças significativas na classe já que as instanciações estão sendo feitas usando o operador new dentro do createMaze().

6. Implementação /*** MazeGame com factory method.*/ public class MazeGame { public Maze makeMaze() { return new Maze(); } public Room makeRoom(int n) { return new Room(n); public Wall makeWall() { return new Wall(); public Door makeDoor(Room r1, Room r2){ return new Door(r1, r2); public Maze createMaze() { Maze maze = makeMaze(); Room r1 = makeRoom(1); Room r2 = makeRoom(2); Door door = makeDoor(r1, r2); maze.addRoom(r1); maze.addRoom(r2); r1.setSide(MazeGame.North, makeWall()); r1.setSide(MazeGame.East, door); r1.setSide(MazeGame.South, makeWall()); r1.setSide(MazeGame.West, makeWall()); r2.setSide(MazeGame.North, makeWall()); r2.setSide(MazeGame.East, makeWall()); r2.setSide(MazeGame.South, makeWall()); r2.setSide(MazeGame.West, door); return maze;}} public class EnchantedMazeGame extends MazeGame { public Room makeRoom(int n) { return new EnchantedRoom(n); } public Wall makeWall() { return new EnchantedWall(); public Door makeDoor(Room r1, Room r2) { return new EnchantedDoor(r1, r2); Dessa forma, nós podemos fazer createMaze() um pouco mais complexa, mas muito mais flexível. O método createMaze() é herdado em EhchantedMazeGame e pode ser usado para criar mazes normais ou enchanted mazes sem mudança.

7. Vantagens 8. Desvantagens • Criação de objetos é desacoplada do conhecimento do tipo concreto do objeto • Conecta hierarquias de class 8. Desvantagens • Ainda é preciso saber a classe concreta do criador de instâncias (pode-se usar uma classe Factory, com método estático e parametrizado que chame diretamente o Factory Method):

Perguntas?

Design Patterns Parte 1

• É uma interface para instanciação de objetos que mantém isoladas as classes concretas usadas da requisição da criação destes objetos. • Separa assim: uma “família” de classes dotadas da mesma interface (“produtos”); e uma classe (“fábrica”) que possui um método especial (o factory method) que cria tais objetos.

Referências Bibliográficas [1] ALEXANDER, C., ISHIKAWA, S., SILVERSTEIN, M., JACOBSON, M., FIKSDAHL-KING, I., ANGEL, S. "A Pattern Language". New York, NY (USA): Oxford University Press, 1977. [2] COPLIEN, J. O. "Software Patterns". New York, NY (USA): SIGS Books, 1996. [3] GAMMA, E., HELM, R., JOHNSON, R., VLISSIDES, J. "Design Patterns: Elements of Reusable Object-Oriented Software". Reading, MA: Addison Wesley, 1995. [4] GEARY, D. ”A look at the Composite pattern". IN JavaWorld, setembro, 2002. [http://www.javaworld.com/javaworld/jw-09-2002/jw-0913-designpatterns_p.html]

Design Patterns Parte 2

Padrão Factory Method (Fábrica) Permite que uma classe genérica (escrita para ser reusada) instancie outras classes sem que seja dependente de tais classes, isto é, sem que faça menção explícita a essas. A classe genérica se mantém independente das classes que instancia através da delegação para um outro objeto da escolha de qual classe instanciar e somente refere-se ao objeto então criado através de uma interface comum. Permite criar objetos desejados utilizando métodos que retornam os objetos.

Padrão Factory Method – Geral

Padrão Factory Method – Exemplo

Classificação e Catálogo de Design Patterns

Classificações de Patterns Podem ser classificados quanto ao: Escopo: Classes; Objetos. Quanto ao seu propósito: Criacional; Estrutural; Comportamental.

Organização de Design Patterns Quanto ao escopo: classes: patterns tratam do relacionamento entre classes e subclasses; objetos: patterns tratam relacionamentos entre objetos e por isso podem ser alterados em tempo de execução. Ex: Um padrão estrutural de classe utiliza herança para compor as classes, enquanto um padrão estrutural de objeto descreve como estes devem ser agrupados.

Organização de Design Patterns Quanto ao seu propósito: Criacional; Estrutural; Comportamental.

Organização de Design Patterns Quanto ao seu propósito: Criacional: Diz respeito ao processo de criação de um objeto; Ex1: Builder - separa a construção de um objeto complexo de sua representação, desta maneira um mesmo processo pode ser utilizado para criar diferentes representações. Estrutural; Comportamental.

Organização de Design Patterns Quanto ao seu propósito: Criacional; Estrutural: Diz respeito a composição de objetos e classes; Ex: Composite - Compõe objetos em árvores de agregação (relacionamento parte-todo). O Composite permite que objetos agregados sejam tratados como um único objeto. Comportamental.

Organização de Design Patterns Quanto ao seu propósito: Criacional; Estrutural; Comportamental: Caracteriza o modo como classes e objetos interagem e compartilham responsabilidades. Ex: Iterator - Provê um modo de acesso a elementos de um agregado de objetos, seqüencialmente, sem exposição de estruturas internas.

Organização dos Design Patterns

Catálogo de Design Patterns Abstract Factory: Provê uma interface para criação de famílias de objetos relacionados ou interdependentes. Remove a dependência entre o cliente, que usa os objetos, e a classe dos objetos produzidos. Adapter: Converte a interface de uma classe em outra, esperada pelo cliente. O Adapter permite que classes que antes não poderiam trabalhar juntas, por incompatibilidade de interfaces, possam agora fazê-lo. Bridge: Separa uma abstração de sua implementação, de modo que ambas possam variar independentemente. Builder: Provê uma interface genérica para a construção incremental de agregações. Um Builder esconde os detalhes de como os componentes são criados, representados e compostos.

Catálogo de Design Patterns Chain of Responsibility: Encadeia os objetos receptores e transporta a mensagem através da corrente até que um dos objetos a responda. Assim, separa (provê loose coupling) objetos transmissores dos receptores, dando a chance de mais de um objeto poder tratar a mensagem. Command: Encapsula uma mensagem como um objeto, de modo que se possa parametrizar clientes com diferentes mensagens. Separa, então, o criador da mensagem do executor da mesma. Composite: Compõe objetos em árvores de agregação (relacionamento parte-todo). O Composite permite que objetos agregados sejam tratados como um único objeto. Decorator: Anexa responsabilidades adicionais a um objeto dinâmicamente. Provê uma alternativa flexível para extensão de funcionalidade, sem ter que usar Herança.

Catálogo de Design Patterns Facade: Provê uma interface unificada para um conjunto de interfaces em um subsistema. O Facade define uma interface alto nível para facilitar o uso deste subsistema. Factory Method: Define uma interface para criação de um objeto, permitindo que as suas subclasses decidam qual classe instanciar. O Factory Method deixa a responsabilidade de instanciação para as subclasses. Flyweight: Usa o compartilamento para dar suporte eficiente a um grande número de objetos com alto nível de granularidade. Interpreter: Usado para definição de linguagem. Define representações para gramáticas e abstrações para análise sintática. Iterator: Provê um modo de acesso a elementos de um agregado de objetos, sequencialmente, sem exposição de estruturas internas.

Catálogo de Design Patterns Mediator: Desacopla e gerencia as colaborações entre um grupo de objetos. Define um objeto que encapsula as interações dentre desse grupo. Memento: Captura e externaliza o estado interno de um objeto (captura um "snapshot"). O Memento não viola o encapsulamento. Observer: Provê sincronização, coordenação e consistência entre objetos relacionados. Prototype: Especifica os tipos de objetos a serem criados num sistema, usando uma instância protótipo. Cria novos objetos copiando este protótipo. Proxy: Provê Design para um controlador de acesso a um objeto. Singleton: Assegura que uma classe tenha apenas uma instância e provê um ponto global de acesso a ela.

Catálogo de Design Patterns State: Deixa um objeto mudar seu comportamento quando seu estado interno muda, mudando, efetivamente, a classe do objeto. Strategy: Define uma família de algoritmos, encapsula cada um deles, e torna a escolha de qual usar flexível. O Strategy desacopla os algoritmos dos clientes que os usa. Template Method: Define o esqueleto de um algoritmo em uma operação. O Template Method permite que subclasses componham o algoritmo e tenham a possibilidade de redefinir certos passos a serem tomados no processo, sem contudo mudá-lo. Visitor: Representa uma operação a ser realizada sobre elementos da estrutura de um objeto. O Visitor permite que se crie um nova operação sem que se mude a classe dos elementos sobre as quais ela opera.