Você está na página 1de 83

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