Padres Gang of Four
Fernando Pedrosa fpedrosa@gmail.com
Fernando Pedrosa Lopes 1
Erich Gamma,
Richard Helm, Ralph
Johnson, John
Vlissides - Padres
de Projeto. Editora:
Bookman Companhia
Fernando Pedrosa Lopes 2
A orientao a objetos, por si s, no
garante sistemas reusveis e extensveis
Profissionais experientes conseguem
projetar bons sistemas, novatos no
Primeiro aprende-se as regras
Algoritmos, estruturas, linguagens
Depois os princpios
Projeto estruturado, Projeto OO
Fernando Pedrosa Lopes 3
Mas, sistemas complexos necessitam
de projetos robustos, que foram
postos prova
Estes Padres de Projeto tm que ser
compreendidos, lembrados e usados
Padres de Projeto representam
solues comprovadas para problemas
recorrentes em desenvolvimento de
software
Fernando Pedrosa Lopes 4
A ideia original surgiu em 1979, na
Arquitetura e Engenharia Civil
Christopher Alexander, arquiteto,
queria melhorar o processo de projeto
de edifcios e reas urbanas
Hoje, projetos de engenharia civil
seguem padres estabelecidos
Arcos, colunas, portas, janelas, etc. a
soluo para tudo isso j bem conhecida
Fernando Pedrosa Lopes 5
"Cada padro descreve um problema
que ocorre repetidas vezes em nosso
ambiente, e ento descreve o ncleo
da soluo para aquele problema, de
tal maneira que pode-se usar essa
soluo milhes de vezes sem nunca
faz-la da mesma forma duas vezes
Christopher Alexander, sobre
padres na arquitetura e engenharia
civil
Fernando Pedrosa Lopes 6
Na Engenharia de Software, quatro
autores (Gang of Four) se basearam
em Christopher Alexander para criar
Padres de Projeto de software
Em 1994 descreveram 23 padres em
seu livro
Hoje ele j est na sua trigsima sexta
edio
Mais de 500 mil cpias vendidas,
traduzido para 13 lnguas
Fernando Pedrosa Lopes 7
Descrio de uma soluo para
resolver um problema genrico de
projeto em um contexto especfico.
[...] Um padro de projeto d nome,
abstrai e identifica os aspectos-chave
de uma estrutura de projeto comum
para torn-la reutilizvel
Erich Gamma, et. al, sobre padres
de projeto de software
Fernando Pedrosa Lopes 8
Padres capturam a estrutura esttica
e a colaborao dinmica entre objetos
parcitipantes no projeto de sistemas
So especialmente bons para
descrever como e por que resolver
problemas no funcionais
Facilitam o reuso de solues
arquiteturais que deram certo antes
Aumentam a coeso, diminuem o
acoplamento
Fernando Pedrosa Lopes 9
Padres de projeto so compostos por
quatro elementos essenciais
Nome do padro
Problema a ser resolvido
Soluo dada pelo padro
Consequncias
Fernando Pedrosa Lopes 10
Um identificador utilizado para
resumir
O problema em questo
Suas solues
Suas consequncias
Aumenta o vocabulrio e melhora a
comunicao
A parte mais difcil de programao
dar bons nomes s variveis
Fernando Pedrosa Lopes 11
Descreve quando aplicar o padro
Explica o problema e seu contexto
Pode conter uma lista de pr
condies que precisam estar
presentes antes de levar em
considerao a aplicao do padro
Fernando Pedrosa Lopes 12
Descrio abstrata de como o padro
resolve o problema em questo
Descreve os elementos que compem
Relacionamentos
Responsabilidades
Colaboraes
Inclui algum exemplo concreto de
implementao
Porm o padro deve ser adaptado ao seu
contexto especfico
Fernando Pedrosa Lopes 13
Vantagens e desvantagens de aplicar o
padro
Esta seo serve para
Avaliar vrias alternativas de padres
Entender os custos e desafios
Entender os benficios de aplicar o padro
Inclui anlise de impacto envolvendo
Flexibilidade
Extensibilidade
Portabilidade
Fernando Pedrosa Lopes 14
Solues prontas, que podem ser
codificadas diretamente nas classes e
reutilizadas sem adaptao (como
APIs, colees de cdigo, etc.)
Projetos para contextos abrangentes e
complexos (uma aplicao ou
subsistema inteiro)
So aplicveis em situaes especficas
Fernando Pedrosa Lopes 15
Podem ser classificados por propsito
Padres de Criao
Abstraem o processo de criao de objetos
a partir da instanciao de classes
Padres Estruturais
Tratam da forma como classes e objetos
esto organizados para formar estruturas
maiores
Padres Comportamentais
Preocupam-se com algoritmos e
responsabilidades dos objetos
Fernando Pedrosa Lopes 16
Podem ser subclassificados por escopo
Padres de Classes
Tratam de relaes entre classes e
subclasses (herana)
So estticos, definidos em tempo de
compilao
Padres de Objetos
Tratam das relaes entre objetos, que
podem mudar em tempo de execuo
Fernando Pedrosa Lopes 17
Fernando Pedrosa Lopes 18
Fernando Pedrosa Lopes 19
Proporciona uma interface para criar
famlias de objetos relacionados ou
dependentes sem especificar suas
classes concretas
Use Abstract Factory quando:
O sistema deve ser configurado com uma
de mltiplas famlias de produtos
Estes produtos relacionados so
projetados para serem utilizados juntos, e
voc quer garantir essa restrio
Fernando Pedrosa Lopes 20
Famlia de produtos #2
Famlia de produtos #1
Fernando Pedrosa Lopes 21
Fbrica abstrata
Fbricas concretas
Produto abstrato
Produtos concretos
Fernando Pedrosa Lopes 22
A fbrica escolhida
em tempo de
execuo
Fernando Pedrosa Lopes 23
Separa a construo de um objeto
complexo da sua representao, de
forma que o mesmo processo possa criar
diferentes tipos de representaes
Use Builder quando:
O algoritmo para criar um objeto deve ser
independente de suas partes e de como
elas so montadas
Dica: enquanto Abstract Factory enfatiza
famlias de objetos, Builder constri
partes de objetos passo a passo
Fernando Pedrosa Lopes 24
Coordena a sequncia de construo dos objetos
Constri e junta as
partes dos objetos
Partes a serem
construdas
Fernando Pedrosa Lopes 25
Produto a ser construdo
Partes do produto
Classe construtora
abstrata (genrica)
Mtodos para
construir cada parte
Fernando Pedrosa Lopes 26
Classe construtora concreta (especfica).
Constri as partes do produto
Classe diretora.
Coordena a ordem de
construo das partes
Fernando Pedrosa Lopes 27
Seta o builder na classe Constri as partes Retorna o objeto
diretora construdo
Fernando Pedrosa Lopes 28
Define uma interface para criar um
objeto, mas deixa as subclasses
decidirem qual classe instanciar
Use Factory Method quando
Uma classe no pode antecipar a classe de
objetos que ela deve criar
Uma classe quer que suas subclasses
especifiquem os objetos que ela cria
Fernando Pedrosa Lopes 29
Fernando Pedrosa Lopes 30
Produto abstrato
Produto concreto
Produto concreto
Factory
Fernando Pedrosa Lopes 31
Que saudao devemos usar, Senhor
ou Senhora?
Em vez de usar vrios ifs, deixamos
para a Fbrica decidir!
Fernando Pedrosa Lopes 32
Especifica os tipos de objetos para
criar usando uma instncia prototpica,
e cria novos objetos copiando este
prottipo (clonando o objeto original)
Use Prototype quando:
O sistema possui componentes cujo
estado inicial tem poucas variaes, e
conveniente disponibilizar um conjunto
pr estabelecido de prottipos que do
origem aos objetos que compem o
sistema
Fernando Pedrosa Lopes 33
Fernando Pedrosa Lopes 34
Prottipo abstrato
Prottipos
concretos
Classe cliente
Baseado no tipo
passado como
parmetro, so
retornados clones
dos objetos originais
Fernando Pedrosa Lopes 35
Garante que uma classe tem apenas
uma instncia e prov um ponto de
acesso global a ela
Use Singleton quando:
Deve haver exatamente uma instncia de
uma classe, e ela deve ser acessvel aos
clientes a partir de um ponto de acesso
conhecido
Fernando Pedrosa Lopes 36
Fernando Pedrosa Lopes 37
Este o nico modo de
acessar a instncia
singular da classe
Fernando Pedrosa Lopes 38
Fernando Pedrosa Lopes 39
Converte a interface de uma classe em
outra interface que normalmente no
poderiam trabalhar juntas
Use o Adapter quando:
Voc quer usar uma classe existente, e sua
interface no adequada quela que voc
precisa
Fernando Pedrosa Lopes 40
Fernando Pedrosa Lopes 41
Classe alvo (target): o
que o cliente enxerga
Classe adaptada
(adaptee): o que o
cliente necessita
Adaptador
Fernando Pedrosa Lopes 42
O cliente faz a chamada usando o plug de dois
pinos, que o que ele enxerga, mas na verdade esta
chamada est sendo adaptada para um plug de
trs pinos
Fernando Pedrosa Lopes 43
Desacopla uma interface de sua
implementao, de forma que ela
possa variar independentemente
Use o Bridge quando:
Voc quer evitar um vnculo entre a
abstrao e a implementao
Mudanas na implementao de uma
abstrao no deveriam ter impacto nos
clientes, isto , seu cdigo no deveria ser
recompilado
Fernando Pedrosa Lopes 44
Fernando Pedrosa Lopes 45
Classes que implementam a API de desenho.
A implementao pode variar livremente
Fernando Pedrosa Lopes 46
Note como a abstrao de
Implementao passada para c
Essas so as classes que o cliente enxerga.
Ele quer usar suas funcionalidades, mas a
implementao pode variar, como vimos no
slide passado.
Fernando Pedrosa Lopes 47
possvel variar a implementao da
abstrao, sem impacto no cliente
Fernando Pedrosa Lopes 48
Compe zero ou mais objetos
similares de forma que eles possam
ser manipulados como um s
Use Composite quando:
Voc quer representar hierarquias parte-
todo de objetos
Voc quer que o cliente ignorem a
diferena entre objetos compostos e
objetos individuais
Fernando Pedrosa Lopes 49
Fernando Pedrosa Lopes 50
Classe composta
Classe folha
Fernando Pedrosa Lopes 51
Note que, para o
cliente, tanto faz
manipular uma folha
ou uma composio
de objetos
Fernando Pedrosa Lopes 52
Anexa responsabilidades adicionais a
um objeto dinamicamente
Decoradores fornecem uma alternativa
flexvel em relao a herana para
estender funcionalidades
Use o Decorator quando:
Quiser adicionar responsabilidades a
objetos dinamicamente
Quando a extenso por subclasses
impraticvel
Fernando Pedrosa Lopes 53
Fernando Pedrosa Lopes 54
O decorator adiciona
novos comportamentos
Fernando Pedrosa Lopes 55
Este mtodo pintar() combina o comportamento
base mais o comportamento decorado
Fernando Pedrosa Lopes 56
Prov um substituto ou ponto atravs
do qual um objeto possa controlar o
acesso a outro
Use Proxy quando:
Toda vez que h uma necessidade de uma
referncia mais verstil ou sofisticada do
que um simples ponteiro para um objeto
Fernando Pedrosa Lopes 57
Fernando Pedrosa Lopes 58
Objeto real
Proxy
Fernando Pedrosa Lopes 59
Prov uma interface unificada para um
conjunto de interfaces de um
subsistema
Define uma interface de mais alto nvel
que torna o subsistema mais fcil de
manipular
Use o Faade quando
Voc quiser prover uma interface simples
para um subsistema complexo
Fernando Pedrosa Lopes 60
Fernando Pedrosa Lopes 61
Partes complexas,
com vrias
interfaces
Interface unificada
na Faade
Fernando Pedrosa Lopes 62
Fernando Pedrosa Lopes 63
Define uma famlia de algoritmos,
encapsula cada um, e faz deles
intercambiveis
Use Strategy quando:
Vrias classes relacionadas diferem apenas
em seus comportamentos
Voc precisa de diferentes variantes de um
algoritmo
Uma classe define muitos comportamentos
e eles aparecem como declaraes
condicionais nas suas operaes
Fernando Pedrosa Lopes 64
Fernando Pedrosa Lopes 65
Estratgias diferentes
Classe de contexto
Fernando Pedrosa Lopes 66
Diferentes variaes de algoritmos, apenas configurando
a estratgia, sem a necessidade de estruturas de seleo
Fernando Pedrosa Lopes 67
Encapsula uma requisio como um
objeto, deixando-o, dessa forma,
parametrizar os clientes com
diferentes requisies
Use o Command para:
Parametrizar objetos para realizar alguma
ao
Suportar undo
Suportar transaes
Fernando Pedrosa Lopes 68
Fernando Pedrosa Lopes 69
O invoker controla os comandos.
Aqui eles so genricos, para ser
possvel vari-los mais tarde
Comando genrico (abstrato)
Fernando Pedrosa Lopes 70
Fernando Pedrosa Lopes 71
Fernando Pedrosa Lopes 72
Define uma dependncia entre objetos
de forma que quando um objeto muda
de estado, todos os seus dependentes
so notificados e atualizados
automaticamente
Use o Observer quando
Quando uma mudana em um objeto
requer mudanas em outros objetos e voc
no sabe quantos objetos sero mudados
Fernando Pedrosa Lopes 73
Fernando Pedrosa Lopes 74
Notificador
abstrato
Observador
abstrato
Fernando Pedrosa Lopes 75
Notificador
concreto
Mudana de estado
Notificao
Fernando Pedrosa Lopes 76
Observador
concreto
Fernando Pedrosa Lopes 77
Fernando Pedrosa Lopes 78
Define o esqueleto de um algoritmo em uma
operao, deferindo alguns passos para as
subclasses
Template Method permite que subclasses
redefinam certos passos de algum algoritmo
sem mudar a estrutura do algoritmo
Use Template Method para:
Implementar a parte invariante de um algoritmo
uma vez e deixar para as subclasses a
implementao do comportamento que pode
variar
Fernando Pedrosa Lopes 79
Fernando Pedrosa Lopes 80
Classe abstrata, com o mtodo
template definido
Classes concretas, com
implementaes especficas
Fernando Pedrosa Lopes 81
Executa-se o mesmo template
method, que ir executar um
bloco fixo de cdigo mais os
trechos variveis, definidos em
cada classe concreta
Fernando Pedrosa Lopes 82
Fernando Pedrosa Lopes 83
Muito mais do que documentos
Descubra tudo o que o Scribd tem a oferecer, incluindo livros e audiolivros de grandes editoras.
Cancele quando quiser.