SlideShare una empresa de Scribd logo
1 de 26
1
5508 - APLICANDO DESIGN
PATTERNS EM APLICAÇÕES
CORPORATIVAS
PADRÕES DE PROJETO DE SOFTWARE
OO
• Também conhecidos como
– Padrões de Design de Software OO
– ou simplesmente como Padrões.
A INSPIRAÇÃO
A ideia de padrões foi apresentada por Christopher Alexander em
1977 no contexto de Arquitetura (de prédios e cidades):
Cada padrão descreve um problema que ocorre repetidamente de novo
e de novo em nosso ambiente, e então descreve a parte central da
solução para aquele problema de uma forma que você pode usar esta
solução um milhão de vezes, sem nunca implementa-la duas vezes da
mesma forma.
Livros
The Timeless Way of Building
A Pattern Language: Towns, Buildings, and Construction
serviram de inspiração para os desenvolvedores de software.
CATÁLOGO DE SOLUÇÕES
Um padrão encerra o conhecimento de uma pessoa muito
experiente em um determinado assunto de uma forma que este
conhecimento pode ser transmitido para outras pessoas menos
experientes.
Outras ciências (p.ex. química) e engenharias possuem catálogos de
soluções.
Desde 1995, o desenvolvimento de software passou a ter o seu
primeiro catálogo de soluções para projeto de software: o livro GoF.
GANG OF FOUR (GOF)
• E. Gamma and R. Helm and R.
Johnson and J. Vlissides. Design
Patterns - Elements of Reusable
Object-Oriented Software.
Addison-Wesley, 1995.
GANG OF FOUR (GOF)
• Passamos a ter um vocabulário comum para conversar sobre
projetos de software.
• Soluções que não tinham nome passam a ter nome.
• Ao invés de discutirmos um sistema em termos de pilhas, filas,
árvores e listas ligadas, passamos a falar de coisas de muito mais
alto nível como Fábricas, Fachadas, Observador, Estratégia, etc.
• A maioria dos autores eram entusiastas de Smalltalk,
principalmente o Ralph Johnson.
• Mas acabaram baseando o livro em C++ para que o impacto junto à
comunidade de CC fosse maior. E o impacto foi enorme, o livro
vendeu centenas de milhares de cópias.
O FORMATO DE UM PADRÃO
• TODO PADRÃO INCLUI
Nome
Problema
Solução
Conseqüências / Forças
existem outros tipos de padrões
O FORMATO DOS PADRÕES NO GOF
 Nome (inclui número da página)
o um bom nome é essencial para que o padrão caia na boca do povo
 Objetivo / Intenção
 Também Conhecido Como
 Motivação
o um cenário mostrando o problema e a necessidade da solução
 Aplicabilidade
o como reconhecer as situações nas quais o padrão é aplicável
 Estrutura
o uma representação gráfica da estrutura de classes do padrão
(usando OMT91) em, às vezes, diagramas de interação (Booch 94)
 Participantes
o as classes e objetos que participam e quais são suas responsabilidades
 Colaborações
o como os participantes colaboram para exercer as suas responsabilidades
O FORMATO DOS PADRÕES NO GOF
 Conseqüências
o vantagens e desvantagens, trade-offs
 Implementação
o com quais detalhes devemos nos preocupar quando implementamos o padrão
o aspectos específicos de cada linguagem
 Exemplo de Código
o no caso do GoF, em C++ (a maioria) ou Smalltalk
 Usos Conhecidos
o exemplos de sistemas reais de domínios diferentes onde o padrão é utilizado
 Padrões Relacionados
o quais outros padrões devem ser usados em conjunto com esse
o quais padrões são similares a este, quais são as diferenças
TIPOS DE PADRÕES DE PROJETO
• Categorias de Padrões do GoF
– Padrões de Criação
– Padrões Estruturais
– Padrões Comportamentais
• Vamos ver um exemplo de cada um deles.
• Na aula de hoje:
– Fábrica Abstrata (Abstract Factory (87))
- padrão de Criação de objetos
FÁBRICA ABSTRATA
ABSTRACT FACTORY (87)
Objetivo:
• prover uma interface para criação de famílias
de objetos relacionados sem especificar sua
classe concreta.
ABSTRACT FACTORY - MOTIVAÇÃO
• Considere uma aplicação com interface gráfica que é implementada
para plataformas diferentes (Motif para UNIX e outros ambientes para
Windows e MacOS).
• As classes implementando os elementos gráficos não podem ser
definidas estaticamente no código. Precisamos de uma implementação
diferente para cada ambiente. Até em um mesmo ambiente,
gostaríamos de dar a opção ao usuário de implementar diferentes
aparências (look-and-feels).
• Podemos solucionar este problema definindo uma classe abstrata para
cada elemento gráfico e utilizando diferentes implementações para
cada aparência ou para cada ambiente.
• Ao invés de criarmos as classes concretas com o operador new,
utilizamos uma Fábrica Abstrata para criar os objetos em tempo de
execução.
• O código cliente não sabe qual classe concreta utilizamos.
ABSTRACT FACTORY - APLICABILIDADE
Use uma fábrica abstrata quando:
• um sistema deve ser independente da forma
como seus produtos são criados e
representados;
• um sistema deve poder lidar com uma família de
vários produtos diferentes;
• você quer prover uma biblioteca de classes de
produtos mas não quer revelar as suas
implementações, quer revelar apenas suas
interfaces.
14 / 28
ABSTRACT FACTORY - ESTRUTURA
AbstractProductA
ProductA1
Client
ProductA2
AbstractFactory
CreatProductA()
CreatProductB()
ConcreteFactory2
CreatProductA()
CreatProductB()
ConcreteFactory1
CreatProductA()
CreatProductB()
AbstractProductB
ProductB1ProductB2
ABSTRACT FACTORY - PARTICIPANTES
• AbstractFactory (WidgetFactory)
• ConcreteFactory (MotifWidgetFactory,
WindowsWidgetFactory)
• AbstractProduct (Window, ScrollBar)
• ConcreteProduct (MotifWindow,
MotifScrollBar, WindowsWindow,
WindowsScrollBar)
• Client - usa apenas as interfaces declaradas
pela AbstractFactory e pelas classes
AbstratProduct
ABSTRACT FACTORY - COLABORAÇÕES
• Normalmente, apenas uma instância de
ConcreteFactory é criada em tempo de execução.
• Esta instância cria objetos através das classes
ConcreteProduct correspondentes a uma família de
produtos.
• Uma AbstractFactory deixa a criação de objetos para
as suas subclasses ConcreteFactory.
ABSTRACT FACTORY - CONSEQUÊNCIAS
O padrão
1. isola as classes concretas dos clientes;
2. facilita a troca de famílias de produtos (basta
trocar uma linha do código pois a criação da
fábrica concreta aparece em um único ponto do
programa);
3. promove a consistência de produtos (não há o
perigo de misturar objetos de famílias diferentes);
4. dificulta a criação de novos produtos ligeiramente
diferentes (pois temos que modificar a fábrica
abstrata e todas as fábricas concretas).
ABSTRACT FACTORY - IMPLEMENTAÇÃO
1. Fábricas abstratas em geral são implementadas como
(127).
2. Na fábrica abstrata, cria-se um método fábrica para cada tipo
de produto. Cada fábrica concreta implementa o código que
cria os objetos de fato.
3. Se tivermos muitas famílias de produtos, teríamos um excesso
de classes “fábricas concretas”.
Para resolver este problema, podemos usar o Prototype
(117): criamos um dicionário mapeando tipos de produtos em
instâncias prototípicas destes produtos.
Então, sempre que precisarmos criar um novo produto pedimos
à sua instância prototípica que crie um clone (usando um
método como clone() ou copy()).
ABSTRACT FACTORY - IMPLEMENTAÇÃO
4. Em linguagens dinâmicas como Smalltalk onde classes são
objetos de primeira classe, não precisamos guardar uma
instância prototípica, guardamos uma referência para a própria
classe e daí utilizamos o método new para construir as novas
instâncias.
5. Definindo fábricas extensíveis.
• normalmente, cada tipo de produto tem o seu próprio método
fábrica; isso torna a inclusão de novos produtos difícil.
• solução: usar apenas um método fábrica
• Product make (string thingToBeMade)
• isso aumenta a flexibilidade mas torna o código
menos seguro (não teremos verificação de tipos pelo
compilador).
ABSTRACT FACTORY -
EXEMPLO DE CÓDIGO
http://www.dofactory.com/net/abstract-factory-design-pattern
ABSTRACT FACTORY - USOS CONHECIDOS
• InterViews usa fábricas abstratas para encapsular
diferentes tipos de aparências para sua interface gráfica
• ET++ usa fábricas abstratas para permitir a fácil
portabilidade para diferentes ambientes de janelas
(XWindows e SunView, por exemplo)
• Sistema de captura e reprodução de vídeo feito na UIUC
usa fábricas abstratas para permitir portabilidade entre
diferentes placas de captura de vídeo.
• Em linguagens dinâmicas como Smalltalk (e talvez em
POO em geral) classes podem ser vistas como fábricas
de objetos.
ABSTRACT FACTORY -
PADRÕES RELACIONADOS
• Fábricas abstratas são normalmente implementadas
com métodos fábrica (FactoryMethod (107)) mas
podem também ser implementados usando
Prototype (117).
• O uso de protótipos é particularmente importante em
linguagens não dinâmicas como C++ e em linguagens
"semi-dinâmicas" como Java.
• Em Smalltalk, não é tão relevante.
– Curiosidade: a linguagem Self não possui classes, toda criação de objetos é
feita via clonagem.
• Uma fábrica concreta é normalmente um
Singleton (127)
OS 23 PADRÕES DO GOF
CRIAÇÃO
• Abstract Factory
• Builder
• Factory Method
• Prototype
• Singleton
OS 23 PADRÕES DO GOF
ESTRUTURAIS
• Adapter
• Bridge
• Composite
• Decorator
• Façade
• Flyweight
• Proxy
OS 23 PADRÕES DO GOF
COMPORTAMENTAIS
• Chain of Responsibility
• Command
• Interpreter
• Iterator
• Mediator
• Memento
• Observer
• State
• Strategy
• Template Method
• Visitor

Más contenido relacionado

La actualidad más candente

Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projetoejdn1
 
Seminário flyweight
Seminário flyweightSeminário flyweight
Seminário flyweightMateus Amaral
 
IHC - Trabalho de Prototipação - Eduardo Bertolucci e Colegas e Classe - UNOP...
IHC - Trabalho de Prototipação - Eduardo Bertolucci e Colegas e Classe - UNOP...IHC - Trabalho de Prototipação - Eduardo Bertolucci e Colegas e Classe - UNOP...
IHC - Trabalho de Prototipação - Eduardo Bertolucci e Colegas e Classe - UNOP...Eduardo Bertolucci
 
Estratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de VersãoEstratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de VersãoComunidade NetPonto
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHGiovanni Bassi
 
Bolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aíBolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aíPriscila Mayumi
 
Princípios da engenharia de software (marcello thiry)
Princípios da engenharia de software (marcello thiry)Princípios da engenharia de software (marcello thiry)
Princípios da engenharia de software (marcello thiry)Marcello Thiry
 
Domain Driven Design - Aplicando estrategias e padrões
Domain Driven Design - Aplicando estrategias e padrõesDomain Driven Design - Aplicando estrategias e padrões
Domain Driven Design - Aplicando estrategias e padrõesJoao Paulo Oliveira dos Santos
 
Domain Driven Design – DDD além da teoria!, por Paulo Victor Gomes
Domain Driven Design – DDD além da teoria!, por Paulo Victor GomesDomain Driven Design – DDD além da teoria!, por Paulo Victor Gomes
Domain Driven Design – DDD além da teoria!, por Paulo Victor GomesiMasters
 
Metodologias ágeis de desenvolvimento de software por Givanaldo Rocha
Metodologias ágeis de desenvolvimento de software por Givanaldo RochaMetodologias ágeis de desenvolvimento de software por Givanaldo Rocha
Metodologias ágeis de desenvolvimento de software por Givanaldo RochaFernando Palma
 
Entendendo Domain-Driven Design
Entendendo Domain-Driven DesignEntendendo Domain-Driven Design
Entendendo Domain-Driven DesignRafael Ponte
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoLuiz Costa
 

La actualidad más candente (20)

DDD - Domain Driven Design
DDD - Domain Driven DesignDDD - Domain Driven Design
DDD - Domain Driven Design
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projeto
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Design Patterns - Com Java
Design Patterns  - Com JavaDesign Patterns  - Com Java
Design Patterns - Com Java
 
Seminário flyweight
Seminário flyweightSeminário flyweight
Seminário flyweight
 
IHC - Trabalho de Prototipação - Eduardo Bertolucci e Colegas e Classe - UNOP...
IHC - Trabalho de Prototipação - Eduardo Bertolucci e Colegas e Classe - UNOP...IHC - Trabalho de Prototipação - Eduardo Bertolucci e Colegas e Classe - UNOP...
IHC - Trabalho de Prototipação - Eduardo Bertolucci e Colegas e Classe - UNOP...
 
Estratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de VersãoEstratégias de Estruturação de Código-fonte e Controlo de Versão
Estratégias de Estruturação de Código-fonte e Controlo de Versão
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BH
 
Arquitetura de Sofware
Arquitetura de SofwareArquitetura de Sofware
Arquitetura de Sofware
 
Bolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aíBolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aí
 
Princípios da engenharia de software (marcello thiry)
Princípios da engenharia de software (marcello thiry)Princípios da engenharia de software (marcello thiry)
Princípios da engenharia de software (marcello thiry)
 
Domain Driven Design - Aplicando estrategias e padrões
Domain Driven Design - Aplicando estrategias e padrõesDomain Driven Design - Aplicando estrategias e padrões
Domain Driven Design - Aplicando estrategias e padrões
 
Domain Driven Design – DDD além da teoria!, por Paulo Victor Gomes
Domain Driven Design – DDD além da teoria!, por Paulo Victor GomesDomain Driven Design – DDD além da teoria!, por Paulo Victor Gomes
Domain Driven Design – DDD além da teoria!, por Paulo Victor Gomes
 
Metodologias ágeis de desenvolvimento de software por Givanaldo Rocha
Metodologias ágeis de desenvolvimento de software por Givanaldo RochaMetodologias ágeis de desenvolvimento de software por Givanaldo Rocha
Metodologias ágeis de desenvolvimento de software por Givanaldo Rocha
 
Design patterns de uma vez por todas
Design patterns de uma vez por todasDesign patterns de uma vez por todas
Design patterns de uma vez por todas
 
Prototipagem
PrototipagemPrototipagem
Prototipagem
 
Desenvolvendo Interfaces de Usuário Multiplataformas utilizando MDA
Desenvolvendo Interfaces de Usuário Multiplataformas utilizando MDADesenvolvendo Interfaces de Usuário Multiplataformas utilizando MDA
Desenvolvendo Interfaces de Usuário Multiplataformas utilizando MDA
 
Entendendo Domain-Driven Design
Entendendo Domain-Driven DesignEntendendo Domain-Driven Design
Entendendo Domain-Driven Design
 
Prototipagem
PrototipagemPrototipagem
Prototipagem
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
 

Destacado

Domain driven design na Prática
Domain driven design na PráticaDomain driven design na Prática
Domain driven design na PráticaDouglas Aguiar
 
Vssummit 2016 - DDD em cenários corporativos
Vssummit 2016 - DDD em cenários corporativosVssummit 2016 - DDD em cenários corporativos
Vssummit 2016 - DDD em cenários corporativosYan Justino
 
Introdução ao Aspnet Core
Introdução ao Aspnet CoreIntrodução ao Aspnet Core
Introdução ao Aspnet CoreYan Justino
 
ARQUITETURAS PERFEITAS E O PORQUÊ SEU PROJETO NASCEU FALIDO
ARQUITETURAS PERFEITAS E O PORQUÊ SEU PROJETO NASCEU FALIDOARQUITETURAS PERFEITAS E O PORQUÊ SEU PROJETO NASCEU FALIDO
ARQUITETURAS PERFEITAS E O PORQUÊ SEU PROJETO NASCEU FALIDOYan Justino
 
Autenticação e autorização
Autenticação e autorizaçãoAutenticação e autorização
Autenticação e autorizaçãoDouglas Aguiar
 
Autenticação e Controle de Acesso
Autenticação e Controle de AcessoAutenticação e Controle de Acesso
Autenticação e Controle de AcessoDenis L Presciliano
 
Atacando as complexidades no coração do software
Atacando as complexidades no coração do softwareAtacando as complexidades no coração do software
Atacando as complexidades no coração do softwareYan Justino
 
Bounded Context e CQRS na evolução de aplicações .NET legadas
Bounded Context e CQRS na evolução de aplicações .NET legadasBounded Context e CQRS na evolução de aplicações .NET legadas
Bounded Context e CQRS na evolução de aplicações .NET legadasYan Justino
 
Padrões-05 - Padrões Arquiteturais - MVC
Padrões-05 - Padrões Arquiteturais - MVCPadrões-05 - Padrões Arquiteturais - MVC
Padrões-05 - Padrões Arquiteturais - MVCEduardo Nicola F. Zagari
 
Arquitetura de Software Visão Geral
Arquitetura de Software Visão GeralArquitetura de Software Visão Geral
Arquitetura de Software Visão Geralsergiocrespo
 
Padrões-02 - Padrões Arquiteturais - Camadas
Padrões-02 - Padrões Arquiteturais - CamadasPadrões-02 - Padrões Arquiteturais - Camadas
Padrões-02 - Padrões Arquiteturais - CamadasEduardo Nicola F. Zagari
 
Padrões Arquiteturais de Sistemas
Padrões Arquiteturais de SistemasPadrões Arquiteturais de Sistemas
Padrões Arquiteturais de SistemasVagner Santana
 
Padrão Arquitetural MVC e suas aplicações para WEB
Padrão Arquitetural MVC e suas aplicações para WEBPadrão Arquitetural MVC e suas aplicações para WEB
Padrão Arquitetural MVC e suas aplicações para WEBRafael França
 
Arquitetura de Software Na Pratica
Arquitetura de Software Na PraticaArquitetura de Software Na Pratica
Arquitetura de Software Na PraticaAlessandro Kieras
 

Destacado (19)

Angular
AngularAngular
Angular
 
Domain driven design na Prática
Domain driven design na PráticaDomain driven design na Prática
Domain driven design na Prática
 
TDD e BDD
TDD e BDDTDD e BDD
TDD e BDD
 
Vssummit 2016 - DDD em cenários corporativos
Vssummit 2016 - DDD em cenários corporativosVssummit 2016 - DDD em cenários corporativos
Vssummit 2016 - DDD em cenários corporativos
 
Iniciando com DDD
Iniciando com DDDIniciando com DDD
Iniciando com DDD
 
Introdução ao Aspnet Core
Introdução ao Aspnet CoreIntrodução ao Aspnet Core
Introdução ao Aspnet Core
 
ARQUITETURAS PERFEITAS E O PORQUÊ SEU PROJETO NASCEU FALIDO
ARQUITETURAS PERFEITAS E O PORQUÊ SEU PROJETO NASCEU FALIDOARQUITETURAS PERFEITAS E O PORQUÊ SEU PROJETO NASCEU FALIDO
ARQUITETURAS PERFEITAS E O PORQUÊ SEU PROJETO NASCEU FALIDO
 
Autenticação e autorização
Autenticação e autorizaçãoAutenticação e autorização
Autenticação e autorização
 
Autenticação e Controle de Acesso
Autenticação e Controle de AcessoAutenticação e Controle de Acesso
Autenticação e Controle de Acesso
 
Atacando as complexidades no coração do software
Atacando as complexidades no coração do softwareAtacando as complexidades no coração do software
Atacando as complexidades no coração do software
 
[CEFET][ESw] Aula 5 - Diagrama de Classe
[CEFET][ESw] Aula 5 - Diagrama de Classe[CEFET][ESw] Aula 5 - Diagrama de Classe
[CEFET][ESw] Aula 5 - Diagrama de Classe
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 
Bounded Context e CQRS na evolução de aplicações .NET legadas
Bounded Context e CQRS na evolução de aplicações .NET legadasBounded Context e CQRS na evolução de aplicações .NET legadas
Bounded Context e CQRS na evolução de aplicações .NET legadas
 
Padrões-05 - Padrões Arquiteturais - MVC
Padrões-05 - Padrões Arquiteturais - MVCPadrões-05 - Padrões Arquiteturais - MVC
Padrões-05 - Padrões Arquiteturais - MVC
 
Arquitetura de Software Visão Geral
Arquitetura de Software Visão GeralArquitetura de Software Visão Geral
Arquitetura de Software Visão Geral
 
Padrões-02 - Padrões Arquiteturais - Camadas
Padrões-02 - Padrões Arquiteturais - CamadasPadrões-02 - Padrões Arquiteturais - Camadas
Padrões-02 - Padrões Arquiteturais - Camadas
 
Padrões Arquiteturais de Sistemas
Padrões Arquiteturais de SistemasPadrões Arquiteturais de Sistemas
Padrões Arquiteturais de Sistemas
 
Padrão Arquitetural MVC e suas aplicações para WEB
Padrão Arquitetural MVC e suas aplicações para WEBPadrão Arquitetural MVC e suas aplicações para WEB
Padrão Arquitetural MVC e suas aplicações para WEB
 
Arquitetura de Software Na Pratica
Arquitetura de Software Na PraticaArquitetura de Software Na Pratica
Arquitetura de Software Na Pratica
 

Similar a Abstract Factory Design Pattern

Padrões de Projeto de Software Orientado a Objetos
Padrões de Projeto de Software Orientado a ObjetosPadrões de Projeto de Software Orientado a Objetos
Padrões de Projeto de Software Orientado a ObjetosFabio Kon
 
Padrões de Projeto de Software Orientado a Objetos
Padrões de Projeto de Software Orientado a ObjetosPadrões de Projeto de Software Orientado a Objetos
Padrões de Projeto de Software Orientado a ObjetosCloves da Rocha
 
Padrões-08 - Padrões Criacionais - Abstract Factory
Padrões-08 - Padrões Criacionais - Abstract FactoryPadrões-08 - Padrões Criacionais - Abstract Factory
Padrões-08 - Padrões Criacionais - Abstract FactoryEduardo Nicola F. Zagari
 
Padrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsPadrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsHerval Freire
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfAndreCosta502039
 
Padroes de Projetos e aplicações- parte 01
Padroes de Projetos e aplicações- parte 01Padroes de Projetos e aplicações- parte 01
Padroes de Projetos e aplicações- parte 01Walney Negreiros
 
Apresentação Introdução Design Patterns
Apresentação Introdução Design PatternsApresentação Introdução Design Patterns
Apresentação Introdução Design PatternsLucas Simões Maistro
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverEduardo Jorge
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Luis Ferreira
 
Padrões-09 - Padrões Criacionais - Factory Method
Padrões-09 - Padrões Criacionais - Factory MethodPadrões-09 - Padrões Criacionais - Factory Method
Padrões-09 - Padrões Criacionais - Factory MethodEduardo Nicola F. Zagari
 
Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020
Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020
Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020Renato Groff
 
Reutilização
ReutilizaçãoReutilização
Reutilizaçãoemjorge
 
5507 os principais design patterns
5507   os principais design patterns5507   os principais design patterns
5507 os principais design patternsAndre Baltieri
 

Similar a Abstract Factory Design Pattern (20)

Padrões de Projeto de Software Orientado a Objetos
Padrões de Projeto de Software Orientado a ObjetosPadrões de Projeto de Software Orientado a Objetos
Padrões de Projeto de Software Orientado a Objetos
 
GoF.ppt
GoF.pptGoF.ppt
GoF.ppt
 
Padrões de Projeto de Software Orientado a Objetos
Padrões de Projeto de Software Orientado a ObjetosPadrões de Projeto de Software Orientado a Objetos
Padrões de Projeto de Software Orientado a Objetos
 
Travalho versao final
Travalho versao finalTravalho versao final
Travalho versao final
 
Padrões de design orientado a objetos
Padrões de design orientado a objetosPadrões de design orientado a objetos
Padrões de design orientado a objetos
 
Padrões-08 - Padrões Criacionais - Abstract Factory
Padrões-08 - Padrões Criacionais - Abstract FactoryPadrões-08 - Padrões Criacionais - Abstract Factory
Padrões-08 - Padrões Criacionais - Abstract Factory
 
Padrões De Projeto e Anti Patterns
Padrões De Projeto e Anti PatternsPadrões De Projeto e Anti Patterns
Padrões De Projeto e Anti Patterns
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdf
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Padroes de Projetos e aplicações- parte 01
Padroes de Projetos e aplicações- parte 01Padroes de Projetos e aplicações- parte 01
Padroes de Projetos e aplicações- parte 01
 
Apresentação Introdução Design Patterns
Apresentação Introdução Design PatternsApresentação Introdução Design Patterns
Apresentação Introdução Design Patterns
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserver
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos
 
Padrões-09 - Padrões Criacionais - Factory Method
Padrões-09 - Padrões Criacionais - Factory MethodPadrões-09 - Padrões Criacionais - Factory Method
Padrões-09 - Padrões Criacionais - Factory Method
 
Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020
Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020
Simplificando a montagem de ambientes de Dev+Testes com Docker | DEVDAY 2020
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Design pattern
Design patternDesign pattern
Design pattern
 
Reutilização
ReutilizaçãoReutilização
Reutilização
 
5507 os principais design patterns
5507   os principais design patterns5507   os principais design patterns
5507 os principais design patterns
 

Más de Yan Justino

TDC Future - comunidade XP - Abraçando a variedade de padrões de arquitetura...
TDC Future - comunidade XP -  Abraçando a variedade de padrões de arquitetura...TDC Future - comunidade XP -  Abraçando a variedade de padrões de arquitetura...
TDC Future - comunidade XP - Abraçando a variedade de padrões de arquitetura...Yan Justino
 
Criando multi-agent systems com .net Hosted Services
Criando multi-agent systems com .net Hosted ServicesCriando multi-agent systems com .net Hosted Services
Criando multi-agent systems com .net Hosted ServicesYan Justino
 
LIVE: BDD, GWTDO e Specification Matching no .NET
LIVE: BDD, GWTDO e Specification Matching no .NETLIVE: BDD, GWTDO e Specification Matching no .NET
LIVE: BDD, GWTDO e Specification Matching no .NETYan Justino
 
Evitando o declínio arquitetural de suas aplicações na velocidade de desenvol...
Evitando o declínio arquitetural de suas aplicações na velocidade de desenvol...Evitando o declínio arquitetural de suas aplicações na velocidade de desenvol...
Evitando o declínio arquitetural de suas aplicações na velocidade de desenvol...Yan Justino
 
Modernizando sistemas e-Gov legados: um relato sobre adoção de microservices ...
Modernizando sistemas e-Gov legados: um relato sobre adoção de microservices ...Modernizando sistemas e-Gov legados: um relato sobre adoção de microservices ...
Modernizando sistemas e-Gov legados: um relato sobre adoção de microservices ...Yan Justino
 
Palestra TDC POA 2018 - Reengenharia de aplicações asp.net legadas para arqui...
Palestra TDC POA 2018 - Reengenharia de aplicações asp.net legadas para arqui...Palestra TDC POA 2018 - Reengenharia de aplicações asp.net legadas para arqui...
Palestra TDC POA 2018 - Reengenharia de aplicações asp.net legadas para arqui...Yan Justino
 
Modernizando plataformas eGovernment: migração do sistema Uvt
Modernizando plataformas eGovernment: migração do sistema UvtModernizando plataformas eGovernment: migração do sistema Uvt
Modernizando plataformas eGovernment: migração do sistema UvtYan Justino
 
Modernizando plataformas e-Government : Lições e Método
Modernizando plataformas e-Government : Lições e MétodoModernizando plataformas e-Government : Lições e Método
Modernizando plataformas e-Government : Lições e MétodoYan Justino
 
DocumentDb: escalando sua aplicação
DocumentDb: escalando sua aplicaçãoDocumentDb: escalando sua aplicação
DocumentDb: escalando sua aplicaçãoYan Justino
 
Pense fora da caixa: Aplique Agilidade com Domain Driven Design. Você ainda u...
Pense fora da caixa: Aplique Agilidade com Domain Driven Design. Você ainda u...Pense fora da caixa: Aplique Agilidade com Domain Driven Design. Você ainda u...
Pense fora da caixa: Aplique Agilidade com Domain Driven Design. Você ainda u...Yan Justino
 
Angular - Ruby Morning
Angular - Ruby MorningAngular - Ruby Morning
Angular - Ruby MorningYan Justino
 
GDG NATAL - Dart Flight School
GDG NATAL - Dart Flight SchoolGDG NATAL - Dart Flight School
GDG NATAL - Dart Flight SchoolYan Justino
 
Si - Segurança da Informação
Si - Segurança da InformaçãoSi - Segurança da Informação
Si - Segurança da InformaçãoYan Justino
 
Fundamentos ORM com entityframework
Fundamentos ORM com entityframeworkFundamentos ORM com entityframework
Fundamentos ORM com entityframeworkYan Justino
 
Community webcast
Community webcastCommunity webcast
Community webcastYan Justino
 

Más de Yan Justino (17)

TDC Future - comunidade XP - Abraçando a variedade de padrões de arquitetura...
TDC Future - comunidade XP -  Abraçando a variedade de padrões de arquitetura...TDC Future - comunidade XP -  Abraçando a variedade de padrões de arquitetura...
TDC Future - comunidade XP - Abraçando a variedade de padrões de arquitetura...
 
Criando multi-agent systems com .net Hosted Services
Criando multi-agent systems com .net Hosted ServicesCriando multi-agent systems com .net Hosted Services
Criando multi-agent systems com .net Hosted Services
 
LIVE: BDD, GWTDO e Specification Matching no .NET
LIVE: BDD, GWTDO e Specification Matching no .NETLIVE: BDD, GWTDO e Specification Matching no .NET
LIVE: BDD, GWTDO e Specification Matching no .NET
 
Evitando o declínio arquitetural de suas aplicações na velocidade de desenvol...
Evitando o declínio arquitetural de suas aplicações na velocidade de desenvol...Evitando o declínio arquitetural de suas aplicações na velocidade de desenvol...
Evitando o declínio arquitetural de suas aplicações na velocidade de desenvol...
 
Modernizando sistemas e-Gov legados: um relato sobre adoção de microservices ...
Modernizando sistemas e-Gov legados: um relato sobre adoção de microservices ...Modernizando sistemas e-Gov legados: um relato sobre adoção de microservices ...
Modernizando sistemas e-Gov legados: um relato sobre adoção de microservices ...
 
Palestra TDC POA 2018 - Reengenharia de aplicações asp.net legadas para arqui...
Palestra TDC POA 2018 - Reengenharia de aplicações asp.net legadas para arqui...Palestra TDC POA 2018 - Reengenharia de aplicações asp.net legadas para arqui...
Palestra TDC POA 2018 - Reengenharia de aplicações asp.net legadas para arqui...
 
Modernizando plataformas eGovernment: migração do sistema Uvt
Modernizando plataformas eGovernment: migração do sistema UvtModernizando plataformas eGovernment: migração do sistema Uvt
Modernizando plataformas eGovernment: migração do sistema Uvt
 
Modernizando plataformas e-Government : Lições e Método
Modernizando plataformas e-Government : Lições e MétodoModernizando plataformas e-Government : Lições e Método
Modernizando plataformas e-Government : Lições e Método
 
DocumentDb: escalando sua aplicação
DocumentDb: escalando sua aplicaçãoDocumentDb: escalando sua aplicação
DocumentDb: escalando sua aplicação
 
Pense fora da caixa: Aplique Agilidade com Domain Driven Design. Você ainda u...
Pense fora da caixa: Aplique Agilidade com Domain Driven Design. Você ainda u...Pense fora da caixa: Aplique Agilidade com Domain Driven Design. Você ainda u...
Pense fora da caixa: Aplique Agilidade com Domain Driven Design. Você ainda u...
 
Angular - Ruby Morning
Angular - Ruby MorningAngular - Ruby Morning
Angular - Ruby Morning
 
GDG NATAL - Dart Flight School
GDG NATAL - Dart Flight SchoolGDG NATAL - Dart Flight School
GDG NATAL - Dart Flight School
 
Si - Segurança da Informação
Si - Segurança da InformaçãoSi - Segurança da Informação
Si - Segurança da Informação
 
C# limpo
C# limpoC# limpo
C# limpo
 
Fundamentos ORM com entityframework
Fundamentos ORM com entityframeworkFundamentos ORM com entityframework
Fundamentos ORM com entityframework
 
Apresentação
ApresentaçãoApresentação
Apresentação
 
Community webcast
Community webcastCommunity webcast
Community webcast
 

Abstract Factory Design Pattern

  • 1. 1 5508 - APLICANDO DESIGN PATTERNS EM APLICAÇÕES CORPORATIVAS
  • 2.
  • 3. PADRÕES DE PROJETO DE SOFTWARE OO • Também conhecidos como – Padrões de Design de Software OO – ou simplesmente como Padrões.
  • 4. A INSPIRAÇÃO A ideia de padrões foi apresentada por Christopher Alexander em 1977 no contexto de Arquitetura (de prédios e cidades): Cada padrão descreve um problema que ocorre repetidamente de novo e de novo em nosso ambiente, e então descreve a parte central da solução para aquele problema de uma forma que você pode usar esta solução um milhão de vezes, sem nunca implementa-la duas vezes da mesma forma. Livros The Timeless Way of Building A Pattern Language: Towns, Buildings, and Construction serviram de inspiração para os desenvolvedores de software.
  • 5. CATÁLOGO DE SOLUÇÕES Um padrão encerra o conhecimento de uma pessoa muito experiente em um determinado assunto de uma forma que este conhecimento pode ser transmitido para outras pessoas menos experientes. Outras ciências (p.ex. química) e engenharias possuem catálogos de soluções. Desde 1995, o desenvolvimento de software passou a ter o seu primeiro catálogo de soluções para projeto de software: o livro GoF.
  • 6. GANG OF FOUR (GOF) • E. Gamma and R. Helm and R. Johnson and J. Vlissides. Design Patterns - Elements of Reusable Object-Oriented Software. Addison-Wesley, 1995.
  • 7. GANG OF FOUR (GOF) • Passamos a ter um vocabulário comum para conversar sobre projetos de software. • Soluções que não tinham nome passam a ter nome. • Ao invés de discutirmos um sistema em termos de pilhas, filas, árvores e listas ligadas, passamos a falar de coisas de muito mais alto nível como Fábricas, Fachadas, Observador, Estratégia, etc. • A maioria dos autores eram entusiastas de Smalltalk, principalmente o Ralph Johnson. • Mas acabaram baseando o livro em C++ para que o impacto junto à comunidade de CC fosse maior. E o impacto foi enorme, o livro vendeu centenas de milhares de cópias.
  • 8. O FORMATO DE UM PADRÃO • TODO PADRÃO INCLUI Nome Problema Solução Conseqüências / Forças existem outros tipos de padrões
  • 9. O FORMATO DOS PADRÕES NO GOF  Nome (inclui número da página) o um bom nome é essencial para que o padrão caia na boca do povo  Objetivo / Intenção  Também Conhecido Como  Motivação o um cenário mostrando o problema e a necessidade da solução  Aplicabilidade o como reconhecer as situações nas quais o padrão é aplicável  Estrutura o uma representação gráfica da estrutura de classes do padrão (usando OMT91) em, às vezes, diagramas de interação (Booch 94)  Participantes o as classes e objetos que participam e quais são suas responsabilidades  Colaborações o como os participantes colaboram para exercer as suas responsabilidades
  • 10. O FORMATO DOS PADRÕES NO GOF  Conseqüências o vantagens e desvantagens, trade-offs  Implementação o com quais detalhes devemos nos preocupar quando implementamos o padrão o aspectos específicos de cada linguagem  Exemplo de Código o no caso do GoF, em C++ (a maioria) ou Smalltalk  Usos Conhecidos o exemplos de sistemas reais de domínios diferentes onde o padrão é utilizado  Padrões Relacionados o quais outros padrões devem ser usados em conjunto com esse o quais padrões são similares a este, quais são as diferenças
  • 11. TIPOS DE PADRÕES DE PROJETO • Categorias de Padrões do GoF – Padrões de Criação – Padrões Estruturais – Padrões Comportamentais • Vamos ver um exemplo de cada um deles. • Na aula de hoje: – Fábrica Abstrata (Abstract Factory (87)) - padrão de Criação de objetos
  • 12. FÁBRICA ABSTRATA ABSTRACT FACTORY (87) Objetivo: • prover uma interface para criação de famílias de objetos relacionados sem especificar sua classe concreta.
  • 13. ABSTRACT FACTORY - MOTIVAÇÃO • Considere uma aplicação com interface gráfica que é implementada para plataformas diferentes (Motif para UNIX e outros ambientes para Windows e MacOS). • As classes implementando os elementos gráficos não podem ser definidas estaticamente no código. Precisamos de uma implementação diferente para cada ambiente. Até em um mesmo ambiente, gostaríamos de dar a opção ao usuário de implementar diferentes aparências (look-and-feels). • Podemos solucionar este problema definindo uma classe abstrata para cada elemento gráfico e utilizando diferentes implementações para cada aparência ou para cada ambiente. • Ao invés de criarmos as classes concretas com o operador new, utilizamos uma Fábrica Abstrata para criar os objetos em tempo de execução. • O código cliente não sabe qual classe concreta utilizamos.
  • 14. ABSTRACT FACTORY - APLICABILIDADE Use uma fábrica abstrata quando: • um sistema deve ser independente da forma como seus produtos são criados e representados; • um sistema deve poder lidar com uma família de vários produtos diferentes; • você quer prover uma biblioteca de classes de produtos mas não quer revelar as suas implementações, quer revelar apenas suas interfaces. 14 / 28
  • 15. ABSTRACT FACTORY - ESTRUTURA AbstractProductA ProductA1 Client ProductA2 AbstractFactory CreatProductA() CreatProductB() ConcreteFactory2 CreatProductA() CreatProductB() ConcreteFactory1 CreatProductA() CreatProductB() AbstractProductB ProductB1ProductB2
  • 16. ABSTRACT FACTORY - PARTICIPANTES • AbstractFactory (WidgetFactory) • ConcreteFactory (MotifWidgetFactory, WindowsWidgetFactory) • AbstractProduct (Window, ScrollBar) • ConcreteProduct (MotifWindow, MotifScrollBar, WindowsWindow, WindowsScrollBar) • Client - usa apenas as interfaces declaradas pela AbstractFactory e pelas classes AbstratProduct
  • 17. ABSTRACT FACTORY - COLABORAÇÕES • Normalmente, apenas uma instância de ConcreteFactory é criada em tempo de execução. • Esta instância cria objetos através das classes ConcreteProduct correspondentes a uma família de produtos. • Uma AbstractFactory deixa a criação de objetos para as suas subclasses ConcreteFactory.
  • 18. ABSTRACT FACTORY - CONSEQUÊNCIAS O padrão 1. isola as classes concretas dos clientes; 2. facilita a troca de famílias de produtos (basta trocar uma linha do código pois a criação da fábrica concreta aparece em um único ponto do programa); 3. promove a consistência de produtos (não há o perigo de misturar objetos de famílias diferentes); 4. dificulta a criação de novos produtos ligeiramente diferentes (pois temos que modificar a fábrica abstrata e todas as fábricas concretas).
  • 19. ABSTRACT FACTORY - IMPLEMENTAÇÃO 1. Fábricas abstratas em geral são implementadas como (127). 2. Na fábrica abstrata, cria-se um método fábrica para cada tipo de produto. Cada fábrica concreta implementa o código que cria os objetos de fato. 3. Se tivermos muitas famílias de produtos, teríamos um excesso de classes “fábricas concretas”. Para resolver este problema, podemos usar o Prototype (117): criamos um dicionário mapeando tipos de produtos em instâncias prototípicas destes produtos. Então, sempre que precisarmos criar um novo produto pedimos à sua instância prototípica que crie um clone (usando um método como clone() ou copy()).
  • 20. ABSTRACT FACTORY - IMPLEMENTAÇÃO 4. Em linguagens dinâmicas como Smalltalk onde classes são objetos de primeira classe, não precisamos guardar uma instância prototípica, guardamos uma referência para a própria classe e daí utilizamos o método new para construir as novas instâncias. 5. Definindo fábricas extensíveis. • normalmente, cada tipo de produto tem o seu próprio método fábrica; isso torna a inclusão de novos produtos difícil. • solução: usar apenas um método fábrica • Product make (string thingToBeMade) • isso aumenta a flexibilidade mas torna o código menos seguro (não teremos verificação de tipos pelo compilador).
  • 21. ABSTRACT FACTORY - EXEMPLO DE CÓDIGO http://www.dofactory.com/net/abstract-factory-design-pattern
  • 22. ABSTRACT FACTORY - USOS CONHECIDOS • InterViews usa fábricas abstratas para encapsular diferentes tipos de aparências para sua interface gráfica • ET++ usa fábricas abstratas para permitir a fácil portabilidade para diferentes ambientes de janelas (XWindows e SunView, por exemplo) • Sistema de captura e reprodução de vídeo feito na UIUC usa fábricas abstratas para permitir portabilidade entre diferentes placas de captura de vídeo. • Em linguagens dinâmicas como Smalltalk (e talvez em POO em geral) classes podem ser vistas como fábricas de objetos.
  • 23. ABSTRACT FACTORY - PADRÕES RELACIONADOS • Fábricas abstratas são normalmente implementadas com métodos fábrica (FactoryMethod (107)) mas podem também ser implementados usando Prototype (117). • O uso de protótipos é particularmente importante em linguagens não dinâmicas como C++ e em linguagens "semi-dinâmicas" como Java. • Em Smalltalk, não é tão relevante. – Curiosidade: a linguagem Self não possui classes, toda criação de objetos é feita via clonagem. • Uma fábrica concreta é normalmente um Singleton (127)
  • 24. OS 23 PADRÕES DO GOF CRIAÇÃO • Abstract Factory • Builder • Factory Method • Prototype • Singleton
  • 25. OS 23 PADRÕES DO GOF ESTRUTURAIS • Adapter • Bridge • Composite • Decorator • Façade • Flyweight • Proxy
  • 26. OS 23 PADRÕES DO GOF COMPORTAMENTAIS • Chain of Responsibility • Command • Interpreter • Iterator • Mediator • Memento • Observer • State • Strategy • Template Method • Visitor

Notas del editor

  1. InterViews é um toolkit para a construção de aplicações gráficas no X Windows no qual o John Vlissides trabalhou e fez parte de sua tese de doutorado. ET++ é um arcabouço no qual o Gamma trabalhou e ajudava a construir aplicações com interfaces gráficas complexas (similares ao Java Swing de hoje).