Padrões de Projeto. Factory Method

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

INF011 Padrões de Projeto. 05 Factory Method

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

Padrões de Projeto. Factory Method

Creational Patterns Factory method

Padrões Fábrica. Simple Factory Factory Method

INF011 Padrões de Projeto. 03 Abstract Factory

Padrões de Projeto. Abstract Factory

Padrões de Projeto de Software

M e d iator. Padrões de Projeto. Mediator. Prof. Alexandre Vidal DEINF-UFMA. M e di a t or

T ó p i c o s A v a n ç a d o s e m L i n g u a g e m d e P r o g r a m a ç ã o. Padrões de Projeto. Prof. Alexandre Vidal. DEINF-UFMA Janeiro de 2007

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

Computação II Orientação a Objetos

Notação de Classes e Objetos

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

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

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

Computação II Orientação a Objetos

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

Padrões de Projeto. B r i dge. B r i d ge. T ó p i c o s A v a n ç a d o s e m L i n g u a g e m d e P r o g r a m a ç ã o. Classificação: Intenção:

Análise e Projeto Orientados por Objetos

Padrões de Projeto. Intenção: Observer. Motivação: Motivação:

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

Padrões de Projeto de Software Orientado a Objetos

UNIVERSIDADE FEDERAL DE SANTA CATARINA CURSO DE PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO

INF011 Padrões de Projeto. 02 Creational Patterns

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

Strategy e Template Method. Professor: Hyggo Almeida

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

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

Padrões de Projeto de Software

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

Análise e Projeto Orientados por Objetos

Abstract Factory Pattern

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

Conceitos de Programação Orientada a Objetos

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

Abstract Factory. Edeyson Andrade Gomes

Padrões de Projeto de Software

C com introdução a OO

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

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

INF011 Padrões de Projeto. 04 Builder

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

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

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

Padrão de projeto de software

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

9 Classes Abstractas e Interfaces

Classes e Objetos. Sintaxe de classe em Java

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

3 Uma Abordagem Orientada a Aspectos para o Desenvolvimento de Frameworks

Análise e Projeto Orientados por Objetos

Classe Interna (Inner)

Classe Abstrata e Interface

Linguagem de Programação III

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

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Análise e Projeto Orientados por Objetos

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

Modificadores de Acesso JAVA

Universidade Federal de Uberlândia

As classes Formatador e ElementosAFormatar

Profa. Thienne Johnson

COMPORTAMENTOS - Observações

Unidade: Classes Abstratas, Polimorfismo, Sobreposição e Interfaces

INF011 Padrões de Projeto. 10 Bridge

Interfaces e Classes Abstratas

Aula 9 Herança. Prof. Jefersson Alex dos Santos

Análise e Projeto Orientados por Objetos

Padrões de Projeto. T ó p i c o s A v a n ç a d o s e m L i n g u a g e m d e P r o g r a m a ç ã o. Prof. Alexandre Vidal

Módulo III Padrões GOF

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

Computação II Orientação a Objetos

Análise e Projeto Orientados por Objetos

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

Mas o que é mesmo Padrão de Projeto?

Laboratório de programação II

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

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

Linguagem de Programação Orientada a Objeto Abstração - Encapsulamento

Padrões de Projeto de Software

Encapsulamento e Modularização

VB.NET - Orientação a objetos : conceitos básicos em 10

Encapsulamento e Modularização

Computação II Orientação a Objetos

Java First-Tier: Aplicações. Herança: Simples Múltipla. Orientação a Objetos em Java (III) Problemas de Herança Múltipla.

Linguagem de Programação I

TRATAMENTO DE EXCEÇÕES

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

Interfaces POO. Prof. Marcio Delamaro

Aula 4 Encapsulamento e Relacionamento Cleverton Hentz

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

Frameworks. Viviane Torres da Silva

ORIENTAÇÃO A OBJETOS SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

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

Transcrição:

Tópicos Avançados em Linguagem de Programação Padrões de Projeto Prof. Alexandre Vidal DEINF-UFMA Classificação: Propósito: Criacional Escopo: Objetos Intenção: Construção Intenção: define uma interface para criar um objeto, mas deixa as subclasses decidirem que classes instanciar. a.k.a. virtual constructor Motivação frameworks: considere um arcabouço para aplicações que pode apresentar múltiplos documentos para o usuário o arcabouço define duas classes abstratas: Application e Document o tipo de documento que a aplicação deve abrir depende do tipo de aplicação o arcabouço deve instanciar classes, mas só conhece classes abstratas

Motivação aplicabilidade (use 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; quiser localizar o conhecimento a respeito de subclasses às quais são delegadas responsabilidades específicas (em hierarquias de classes paralelas) aplicabilidade (hirarquias de classes paralelas)

Estrutura Participantes Product: define a interface dos objetos criados pelo método fábrica; ConcreteProduct: implementa a interface definida em Product; Creator: declara o método fábrica (que retorna um objeto do tipo Product; ConcreteCreator: redefine o método fábrica para retornar uma instância da classe ConcreteProduct. Colaborações Creator depende de suas subclasses para definir o método fábrica que retorne uma instância do ConcretProduct apropriado

Conseqüências o código lida somente com a interface de Product é mais vantajoso quando Creator precisa ter subclasses de qualquer maneira conecta hierarquia de classes paralelas que ocorrem quando uma classe delega algumas de suas responsabilidades para uma classe separada Implementação (alternativas) Creator é uma classe abstrata e não fornece implementação para o método fábrica; Creator é uma classe concreta e fornece implementação por omissão (default) para o método fábrica; métodos fábrica parametrizados; templates para evitar o uso de subclasses. Exemplo de código class MazeGame { Maze* CreateMaze(); // builds and returns a maze // factory methods: virtual Maze* MakeMaze() const { return new Maze; } virtual Room* MakeRoom(int n) const { return new Room(n); } virtual Wall* MakeWall() const { return new Wall; } virtual Door* MakeDoor(Room* r1, Room* r2) const { return new Door(r1, r2); } };

Maze* MazeGame::CreateMaze () { // implementando CreateMaze Maze* amaze = MakeMaze(); Room* r1 = MakeRoom(1); Room* r2 = MakeRoom(2); Door* thedoor = MakeDoor(r1, r2); amaze->addroom(r1); amaze->addroom(r2); r1->setside(north, MakeWall()); r1->setside(east, thedoor); r1->setside(south, MakeWall()); r1->setside(west, MakeWall()); r2->setside(north, MakeWall());... return amaze; } class BombedMazeGame : public MazeGame { BombedMazeGame(); virtual Wall* MakeWall() const { return new BombedWall; } virtual Room* MakeRoom(int n) const { return new RoomWithABomb(n); } }; // An EnchantedMazeGame variant... class EnchantedMazeGame : public MazeGame { EnchantedMazeGame(); virtual Room* MakeRoom(int n) const { return new EnchantedRoom(n, CastSpell()); } virtual Door* MakeDoor(Room* r1, Room* r2) const { return new DoorNeedingSpell(r1,r2); } protected: Spell* CastSpell() const; }; Usos conhecidos ver página 120 no GoF (traduzido); Padrões Relacionados Abstract Factory pode ser implementado usando o Template Method costuma chamar s Prototype introduz um método Initialize na classe Creator do