Você está na página 1de 28

Elogios a Use a Cabea!

Padres de Projetos (Design Patterns)


Recebi o livro ontem e comecei a ler no caminho para casa... e no consegui parar. Levei-o para a academia e imagino
que as pessoas tenham me visto sorrindo bastante enquanto eu me exercitava e lia. O livro muito legal. divertido e
ao mesmo tempo eles cobrem vrios tpicos e vo direto ao assunto. Estou realmente impressionado.
- Erich Gamma, Engenheiro Laureado da IBM, e co-autor de Padres de Projetos
Use a Cabea! Padres de Projetos consegue misturar diverso, grandes risadas, profundidade tcnica e timos conselhos prticos em uma leitura divertida e inspiradora. Independentemente de ser um novato nos padres de projetos,
ou os ter usado por anos, voc certamente sair ganhando ao visitar a Objetolndia
- Richard Helm, co-autor de Padres de Projetos com o resto da Gang of Four
Erich Gamma, Ralph Johnson e John Vlissides
Me sinto como se uma pilha de mil livros tivesse acabado de ser tirada de cima da minha cabea
- Ward Cunningham, inventor do Wiki e fundador do Hillside Group
Este livro chega quase perfeio, por causa da maneira como ele combina o conhecimento e a facilidade de leitura. Ele
fala com autoridade e timo de ler. um dos muito poucos livros sobre software que j li e considero indispensveis.
(Eu colocaria talvez 10 livros nessa categoria, no mximo.)
- David Gelerneter, Professor de Cincia da Computao, Universidade de Yale e autor de
Mirror Worlds e Machine Beauty.
Um mergulho de cabea no reino dos padres, um lugar onde coisas complexas se tornam simples, mas onde coisas
simples podem tambm se tornar complexas. No consigo pensar em guias melhores do que os Freemans.
- Miko Matsummura, Analista da Indstria, The Middleware Company; Ex-Pregador Chefe do Java,
Sun Microsystems
Eu ri, eu chorei, o livro me emocionou
- Daniel Steinberg, Editor-em-Chefe, java.net
Minha primeira reao foi rolar de rir. Depois de me recompor, percebi que o livro no somente tecnicamente preciso,
como tambm a introduo aos padres de projetos mais fcil de entender que eu j vi.
-Dr. Timothy A. Budd, Professor Associado de Cincia da Computao na Universidade Estadual de Oregon
e autor de mais de uma dzia de livro, incluindo C++ para Programadores Java
Jerry Rice executa padres melhor do que qualquer jogador da NFL, mas os Freemans acabaram de super-lo. Mas
falando srio... este um dos livros mais engraados e inteligentes sobre projetos de software que eu j li.
- Aaron LaBerge , VP Technology, ESPN.com

Mais elogios a Use a Cabea! Padres de Projetos


Um timo projeto de cdigo , antes de mais nada, um timo projeto de informao. Um projetista de cdigo est
ensinando um computador como fazer algo, e no surpresa que a editora seja uma grande professora de programadores. A clareza, o humor e as substanciais doses de inteligncia deste livro o tornam o tipo que ajuda at mesmo
no-programadores a pensar bem sobre como solucionar problemas.
- Cory Doctorow, co-editor de Boing Boing e autor de Down and Out in the Magic Kingdom e
Someone Comes to Town, Someone leaves Town
H um velho ditado na indstria de computadores e videogames bem, no pode ser to velho porque a prpria
indstria no velha assim que diz mais ou menos o seguinte: O Projeto Vida. O mais curioso sobre essa frase que
mesmo hoje em dia quase ningum que trabalha com a arte de criar jogos eletrnicos consegue chegar a um acordo
sobre o que signica projetar um jogo. O projetista um engenheiro de software? Um diretor de arte? Um contador
de histrias? Um arquiteto ou um pedreiro? Uma pessoa com os ps no cho ou um visionrio? possvel um mesmo
indivduo ter algo de todos esses papis? E, mais importante, quem liga para essa %$#&*?

J foi dito que o crdito projetado por em entretenimento interativo similar ao dirigido por na indstria dos lmes, o
que de fato permite ao nosso crdito compartilhar DNA com aquele que talvez o crdito mais controverso, exagerado, e
freqentemente sem nenhuma humildade j propagado na arte comercial. Boa companhia, hein? E mesmo assim, o Projeto
Vida, ento talvez seja hora de despendermos algum tempo pensando sobre o que ele . Eric e Elisabeth Freeman intrepidamente se ofereceram para explorar os mistrios do cdigo para ns em Use a Cabea! Padres de Projetos. No estou certo
de que qualquer um deles se importe tanto assim com o PlayStation ou o X-Box, e nem eles deveriam. Mesmo assim, eles
abordam a noo de projeto em um nvel signicativamente honesto, de forma tal que qualquer um procurando por elogios
aos seus prprios talentos como escritor deve car avisado de que ter uma boa lio de humildade ao ler este livro.
- Ken Goldstein, Vice-Presidente Executivo & Diretor Gerente, Disney Online
O livro tem o tom exato para o guru nerd e casualmente legal em todos ns. A referncia correta para estratgias prticas de
desenvolvimento faz o meu crebro funcionar sem ter de empurrar um monte de conversa velha e mofada de professor.
- Travis Kalanick, Fundador do Scour and Red Swoosh, membro do MIT TR100
Este livro combina bom humor, timos exemplos e conhecimento aprofundado dos Padres de Projetos de forma tal que
torna o aprendizado divertido. Trabalhando na indstria de tecnologia de entretenimento, eu tenho dvidas sobre o Princpio Hollywood e o Padro Facade dos home theaters, entre outros. O entendimento dos Padres de Projetos no apenas nos
ajudam a criar bom software reutilizvel e fcil de manter, mas tambm ajuda a melhorar as nossas habilidades de resoluo
de problemas em vrias reas. Este livro indispensvel para todos os prossionais e estudantes de computao.
- Newton Lee, Fundador e Editor-Chefe, Association for Computing Machinerys (ACM)
Computers int Entertainment (acmcie.org.)

Elogios abordagem Use a Cabea!


A tecnologia Java est em toda parte em telefones celulares, cmeras, impressoras, jogos, PDAs, caixas eletrnicos,
smart cards, bombas de gasolina, estdios esportivos, dispositivos mdicos, web cams, servidores, entre outros. Se voc
desenvolve software e ainda no aprendeu Java, denitivamente est na hora de mergulhar Use A Cabea!.
Scott McNealy, Presidente e CEO da Sun Microsystems
rpido, irreverente, divertido e envolvente. Cuidado voc pode acabar realmente aprendendo algo!
Ken Arnold, ex-Engenheiro Snior da Sun Microsystems Co-autor (com James Gosling, criador do Java)
de The Java Programming Language
Use A Cabea! Java mais ou menos o que acontece quando o Monty Python encontra a gang of four... o texto to
bem dividido entre quebra-cabeas e estrias, testes e exemplos, que voc aprende com uma profundidade que nenhum
outro livro sobre computao oferece.
Douglas Rowe, Grupo de Usurios Java de Columbia
Use A Cabea! Java... d um novo signicado frase de marketing deles H um OReilly para isso. Eu escolhi este
aqui porque vrias pessoas que respeito o tinham descrito em termos como revolucionrio e ressaltando a abordagem
radicalmente diferente do livro-texto. Elas estavam (esto) certas... De modo tipicamente OReilly, eles usaram uma
abordagem cientca e bem pensada. O resultado engraado, irreverente, dividido em tpicos, interativo e brilhante...
Ler este livro como estar no saguo de uma conferncia tcnica, aprendendo e rindo com os seus pares... Se voc
quiser ENTENDER Java, v comprar este livro.
Andrew Pollack, www.thenorth.corn
Se voc quer aprender Java, achou o que procurava: bem-vindo ao primeiro livro tcnico com uma GUI! Este formato
perfeitamente executado e inovador oferece benefcios que outros textos sobre Java simplesmente no conseguem...
Prepare-se para uma viagem realmente notvel pela Javalndia.
Neil R. Bauman, Capito e CEO, Geek Cruises (www.GeekCruises.corn)
Que fantstica maneira de aprender!!! NO CONSIGO FECHAR ESTE LIVRO!!! Meu lho de 3 anos acordou
1h40 da madrugada e eu o coloquei de volta na cama com o livro e uma lanterna na mo, para poder continuar lendo
por cerca de mais uma hora.
Ross Goldberg

Use a Cabea
Padres e Projetos
2a Edio Revisada
No seria maravilhoso se
houvesse um livro sobre Padres
de Projetos que fosse mais
divertido que ir ao dentista
e mais revelador do que um
formulrio do Imposto de
Renda? Mas provavelmente isso
s uma fantasia...

Eric Freeman
Elisabeth Freeman
com
Kathy Sierra
Bert Bates

Rio de Janeiro 2009

Para a Gangue dos Quatro, cuja viso e conhecimentos em


matria de captura e comunicao sobre Padres de Projetos
mudou a face da concepo do software para sempre, e melhorado a vida dos desenvolvedores em todo o mundo.

Autores/Desenvolvedores de Use a Cabea Padres de Projetos


Eric Freeman um cientista da computao apaixonado por arquiteturas de mdia e de software. Ele acabou de concluir
quatro anos em um emprego dos sonhos dirigindo trabalhos de Internet banda larga e wireless na Disney e agora
est voltado a programar, criando softwares legais e tirando o mximo do Java e Macs.
Eric passou boa parte dos anos 90 trabalhando em alternativas metfora do desktop com David Gelernter (e os dois
ainda esto fazendo a pergunta por que eu tenho de dar um nome ao meu arquivo?). Com base nesse trabalho, Eric
obteve um Ph.D. na Yale University em 97. Foi tambm co-fundador da Mirror Worlds Technologies (agora adquirida
para criar uma verso comercial do trabalho da sua tese, o Lifestreams).
Em uma vida anterior, Eric criava software para redes e supercomputadores. Talvez voc o conhea de livros como
JavaSpaces Principles Patterns and Practice. Eric tem boas lembranas de implementar sistemas tuple-space em Thinking
Machine CM-5s e de criar alguns dos primeiros sistemas de informao Internet para a NASA, no nal dos anos 80.
Eric atualmente mora no deserto perto de Santa Fe. Quando no est escrevendo texto nem cdigo, voc o encontrar
passando mais tempo ajustando seus programas do que assistindo TV no seu home theater ou tentando consertar um
videogame do Dragons Lair dos anos 80. Ele tambm no se importaria de passar a noite como um DJ de msica eletrnica.Escreva para ele (em ingls) em eric@wickedlysmart.com ou visite o seu blog em http://www.ericfreeman.com.
Elisabeth Freeman escritora, desenvolvedora de software e artista digital. Ela esteve envolvida com a Internet desde
o princpio, sendo co-fundadora do The Ada Project (TAP), um premiado site voltado s mulheres que trabalham com
computao, adotado agora pela ACM. Mais recentemente, Elisabeth liderou trabalhos de pesquisa e desenvolvimento
em mdia digital na Walt Disney Company, onde co-inventou o Motion, um sistema de contedo que distribui terabytes
de vdeo todos os dias aos usurios da Disney, da ESPN e de Movies.com.
Elisabeth cientista da computao por formao e tem diplomas universitrios em Cincia da Computao pela Yale
University e pela Indiana University. Tem trabalhado em uma srie de reas, incluindo linguagens visuais, transmisses
RSS e sistemas Internet. Tem sido tambm uma ativista pelas mulheres na computao, desenvolvendo programas que
encorajam as mulheres a se envolverem na rea. Hoje em dia, voc a encontra bebendo caf ou achocolatado ao lado
do seu Mac, embora ela sonhe com o dia em que todo o mundo usar o Scheme.
Elisabeth sempre adorou caminhadas ao ar livre desde a sua infncia na Esccia. Quando est ao ar livre, sua cmera
est sempre ao seu alcance. Ela tambm uma vida ciclista, vegetariana e amante dos animais. Voc pode enviar um
e-mail para ela (em ingls) em beth@wickedlysmart.com.

Criadores da srie Use a Cabea! (e co-conspiradores neste livro)


Kathy se interessa por teoria da aprendizagem desde os seus
dias como designer de jogos (ela escreveu jogos para a Virgin,
a MGM e a Amblin). Ela desenvolveu a maior parte do formato
Use a Cabea! enquanto ensinava Autorao de Novas Mdias no
programa de extenso Estudos de Entretenimento da UCLA.
Mais recentemente, ela tem trabalhado como instrutora mster
para a Sun Microsystems, ensinando aos instrutores Java da Sun
sobre como ensinar as tecnologias Java mais recentes e desenvolvendo vrios dos exames de certicao da Sun. Junto com Bert
Bates, ela tem usado ativamente os conceitos Use a Cabea! para
ensinar a milhares de desenvolvedores. Kathy a fundadora do
javaranch.com, que recebeu em 2003 e 2004 o prmio Jolt Cola
Productivity Award, da revista Software Development. Tambm
possvel encontr-la dando aulas de certicao Java no site
Java Jam Geek Cruise (geekcruises.com).
Recentemente se mudou da Califrnia para Boulder, Colorado,
onde teve que aprender novas palavras, como limpador de
gelo e pele, mas pelo menos l possvel esquiar. Gosta de:
correr, esquiar, andar de skate, brincar com seu cavalo islands e
de cincia esquisita. No gosta de: entropia. Um artigo de uma
revista uma vez a descreveu como persuasiva. Ela ainda est
tentando descobrir se eles disseram isso no bom sentido. Se voc
souber, ou se tiver qualquer outro comentrio, escreva para ela
(em ingls) em kathy@wickedlysmart.com.
VI

Bert desenvolvedor
e arquiteto de software,
mas uma passagem de
dez anos no campo de
inteligncia articial leBert Bates
vou-o a se interessar por
Kathy Sierra
teoria da apren-dizagem
e pelo trei-namento baseado em tecnologia. Ele tem ensinado programao a clientes
desde ento. Recentemente, tornou-se membro da equipe de
desenvolvimento de vrios dos exames de Certicao Java
da Sun, incluindo o novo SCBCD.
Ele passou a primeira dcada da sua carreira em software viajando pelo mundo para ajudar clientes broadcast como a Rdio
Nova Zelndia, o Weather Channel e a rede Arts & Entertainment (A & E). Um dos seus projetos favoritos foi a criao de
um sistema completo de simulao de malha ferroviria para
a Union Pacic Railroad.
Bert um jogador viciado de go de longa data e tem trabalhado
em um programa de go por tempo demais. Ele um guitarrista
razoavelmente bom e agora est tentando aprender banjo. Escreva para ele (em ingls) em terrapin@wickedlysmart.com.

Tabela de Contedo (sumrio)


Introduo
1 Bem-vindo aos Padres de Projetos: uma introduo
2 Mantendo os seus Objetos atualizados: o Padro Observer
3 Decorando Objetos: o Padro Decorator
4 Cozinhando com a polpa da programao OO: o Padro Factory
5 Objetos nicos: o Padro Singleton
6 Encapsulando a Chamada de Mtodos: o Padro Command
7 Como Ser Adaptvel: os padres Adapter e Facade
8 Encapsulando Algoritmos: o Padro Template Method
9 Colees bem administradas: os Padres Iterador e Composite
10 O Estado das Coisas: o Padro State
11 Controlando o Acesso de Objetos: o Padro Proxy
12 Padres de Padres: Padres Compostos
13 Padres no Mundo Real: Vivendo Melhor com os Padres
14 Apndice: Padres Restantes

XV
1
27
57
79
125
143
177
205
235
289
325
373
435
459

Tabela de Contedo (de verdade)


Introduo
Sua mente concentrada nos Padres de Projetos. Aqui voc est tentando aprender algo, enquanto o seu crebro est lhe
fazendo um favor certicando-se de que o aprendizado no se manter. Seu crebro est pensando: melhor deixar espao
para coisas mais importantes, como quais animais selvagens evitar e fazer esqui na neve pelado uma m idia. Ento,
como voc engana o seu crebro para faz-lo pensar que a sua vida depende de aprender os Padres de Projetos?
A quem se destina este livro?
Sabemos o que voc est pensando
E sabemos o que o seu crebro est pensando
Metacognio: pensando sobre o pensamento
Eis o que VOC pode fazer para obrigar seu crebro a obedec-lo
Revisores Tcnicos
Agradecimentos

XVI
XVI
XVI
XVIII
XIX
XXII
XXII

Introduo aos Padres de Projetos

1 Bem-vindo aos Padres de Projetos


Algum j resolveu os seus problemas. Neste captulo, voc aprender por que (e como) pode se aproveitar da sabedoria e
das lies aprendidas por outros desenvolvedores que tenham passado pelo mesmo campo minado dos problemas de projetos
e tenham sobrevivido viagem. Antes de terminarmos, veremos o uso e os benefcios dos padres de projetos, veremos alguns
princpios chaves dos projetos OO, e o guiaremos atravs de um exemplo de como um padro funciona. A melhor maneira
de usar os padres carregando-os no seu crebro e depois reconhecendo lugares de seu projeto e das suas aplicaes existentes
onde pode aplic-los. Em vez de reutilizao de cdigo, com padres voc tem uma reutilizao de experincia.
Lembre-se: conhecer conceitos como abstrao, herana e polimorsmo no o torna um bom projetista orientado a
objetos. Um guru dos projetos pensa sobre como criar projetos exveis que sejam fceis de manter e modicar.
Comeou com um simples aplicativo SimUDuck
Joe pensa sobre herana...
Que tal uma interface?
A constante no desenvolvimento de software
Separando o que muda do que ca igual
Desenvolvendo os comportamentos de Duck
Testando o cdigo Duck
Congurando o comportamento de forma dinmica
Uma viso geral dos comportamentos encapsulados
TEM-UM pode ser melhor do que -UM
E por falar em Padres de Projetos...
O poder de um vocabulrio de padro compartilhado
Como usar os Padres de Projetos?
Ferramentas para sua caixa de ferramentas de projeto
Soluo dos exerccios

2
4
4
6
7
8
13
14
16
17
18
21
21
23
26

VII

O Padro Observer

Mantendo os seus Objetos informados

No durma no ponto quando algo interessante acontecer! Temos um padro que mantm os seus objetos informados
quando algo que possa lhes interessar acontece. Os objetos podem at mesmo decidir, no momento da execuo, se
querem ser mantidos informados ou no. O Padro Observer um dos mais usados do JDK e incrivelmente til. Antes
de terminarmos, veremos tambm as relaes de um para muitos e o acoplamento solto (sim, isso mesmo, ns dissemos
acoplamento). Com o Observer, voc ser a alma da Festa dos Padres.
Viso geral do aplicativo Weather Monitoring
Conhea o Padro Observer
Editora + Assinantes = Padro Observer
Cinco minutos de teatro: um assunto para observao
O Padro Observer denido
O poder da Ligao Leve
Desenvolvendo a Estao Meteorolgica
Implementando a Estao Meteorolgica
Usando o Padro Observer interno de Java
Retrabalhando a Estao Meteorolgica no suporte interno
Ferramentas para sua caixa de ferramentas de projeto
Solues dos exerccios

28
32
32
35
36
38
40
40
45
48
52
55

O Padro Decorator

Decorando Objetos

Chame este captulo de Olho de design para o garoto da herana. Examinaremos novamente o tpico uso excessivo
da herana e voc aprender a decorar suas classes no tempo de execuo usando uma forma de composio de objeto.
Por qu? Depois que voc descobrir as tcnicas de decorao, poder dar novas responsabilidades a seus objetos (ou de
outra pessoa) sem fazer nenhuma mudana de cdigo nas classes bsicas.
Eu achava que homens de verdade subclassicavam tudo. Isso at eu aprender o poder da extenso no tempo de execuo, em vez de no tempo de compilao. Olhe s para mim agora!
Bem-vindo ao Starbuzz Coffee
O Princpio Aberto-Fechado
Siga o Padro Decorator
Construindo um pedido de bebida com Decoradores
O Padro Decorator denido
Decorando nossas bebidas
Escrevendo o cdigo do Starbuzz
Decoradores do mundo real: Java I/O
Escrevendo seu prprio Decorador Java I/O
Ferramentas para sua caixa de ferramentas de projeto
Solues dos exerccios

58
63
64
64
65
66
69
73
74
76
77

Fundamentos OO
Abstrao
Encapsulamento
Polimorsmo
ios OO Herana
varia.
e
Princp
u
q
le o
u
s
posip
a
c
En
e com na.
d
a
id
r
a
D prio elao her e,
r
f
m
ter ac
o e
para in aes.
e
m
a
r
ent
Prog
implem vemente
a
r
a
p
no
s le
design
que
Busque ntre objetos
e
s
ligado m.
e
interag

O Padro Factory

4 Cozinhando com a polpa da programao OO


Prepare-se para cozinhar alguns projetos OO com acoplamento solto. Para se criar objetos, preciso mais do que
apenas usar o operador new. Voc aprender que a chamada uma atividade que no deve ser feita sempre em pblico e pode freqentemente levar a problemas de acoplamento. E voc no quer que isso acontea, quer? Descubra como os
Padres Factory podem ajudar a salv-lo de dependncias embaraosas.
Quando voc vir new, pense em concret
O que h de errado com o new
Encapsulando a criao de objetos
VIII

80
81
82

Construindo uma fbrica simples de pizza


O Simple Factory denido
Franqueando a pizzaria
Deixando as sub-classes decidirem
Vamos criar uma PizzaStore
Declarando um mtodo Factory
Finalmente chegou a hora de conhecer o Padro Factory Method
Outra perspectiva: hierarquias de classes paralelas
Padro Factory Method denido
Uma pizzaria muito dependente
Analisando as dependncias dos objetos
O Princpio da Inverso de Dependncia
Enquanto isso, de volta PizzaStore...
Famlias de ingredientes...
Construindo as nossas fbricas de ingredientes
Retrabalhando as Pizzas
Padro Abstract Factory denido
Comparao entre Factory Method e Abstract Factory
Ferramenta para a sua Caixa de Ferramentas de Projetos
Solues dos exerccios

83
85
86
87
89
90
95
95
97
99
100
100
104
105
105
108
113
116
118
120

O Padro Singleton

5 Objetos nicos
O Padro Singleton: o seu ingresso para criar objetos nicos, para os quais h apenas uma instncia. Talvez voc que
contente de saber que, de todos os padres, o Singleton o mais simples em termos do diagrama das suas classes; na
verdade, o diagrama possui apenas uma classe! Mas no se sinta vontade demais; apesar da sua simplicidade de um
ponto de vista do design das classes, encontraremos algumas ondulaes e alguns buracos na pista da sua implementao. Ento aperte o cinto este aqui no to simples quanto parece...
O Pequeno Singleton
Dissecando a implementao clssica do Padro Singleton
Entrvista desta semana: Consses de um Singleton
A Fbrica Chocolate
Padro Singleton denido
Hershey, PA

Huston temos um problema...


Seja o JVM
Lidando com vrios segmentos
Podemos melhorar os vrios segmentos?
Ferramentas para sua caixa de ferramentas de projeto
Solues dos Exerccios

127
128
129
130
132
132
133
134
134
138
141

O Padro Command

6 Encapsulando a Chamada de Mtodos


Neste captulo, levaremos o encapsulamento a um novo nvel: vamos encapsular a chamada de mtodos. isso mesmo
quando encapsulamos a chamada de mtodos, podemos cristalizar partes da computao para que o objeto que est invocando
esse processo no precise saber como as coisas so feitas. Ele s precisa usar o mtodo cristalizado para executar a tarefa.
O encapsulamento das chamadas de mtodos tambm nos permite fazer algumas coisas muito engenhosas, como salvar os
mtodos encapsulados para ns de registro ou reutiliz-los para implementar recursos de desfazer no nosso cdigo.
Automao domstica ou But
Hardware grtis! Vamos examinar o Controle Remoto
Examinando as classes de vendedor
Enquanto isso, de volta ao Restaurante
Uma breve introduo ao Padro Command
Agora, vamos examinar mais detalhadamente a interao
Papis e Responsabilidades no Restaurante Objetolndia
Do Restaurante ao Padro Command
Nosso primeiro objeto de comando

144
145
145
147
147
148
148
150
151

IX

Denio do Padro Command


Denio do Padro Command: o diagrama de classes
Implementando o Controle Remoto
Testando o Controle Remoto
E agora vamos conferir a execuo do nosso teste do controle remoto
Chegou a hora de escrever aquela documentao
Hora de testar aquele boto Refazer!
Todo controle remoto precisa de um Modo de Festa!
Usando um macrocomando
Mais usos do Padro Command: enleirando solicitaes
Mais usos do Padro Command: registrando as solicitaes
Ferramentas para sua caixa de ferramentas de projeto
Solues dos Exerccios

154
155
156
158
159
161
164
167
168
170
171
172
175
s s e te m
u m a c la global
fi q u e s e
nto
ri
o
p
e
V
m
u

a
n

S in g le to instncia e forne
uma
apenas
.
la
e
so a
de aces

Os Padres Adapter e Facade

Como ser Adaptvel

Neste captulo, iremos tentar feitos to impossveis quanto colocar um objeto quadrado em um buraco redondo.
Parece impossvel? No quando temos os Padres de Projetos. Lembra-se do Padro Decorator? Ns embrulhamos os
objetos para dar a eles novas responsabilidades. Agora iremos embrulhar alguns objetos com um propsito diferente:
fazer com que as suas interfaces aparentem ser algo que no so. Por que faramos algo assim? Para podermos adaptar
um projeto que espera uma determinada interface a uma classe que implementa uma interface diferente. E no s
isso: enquanto estamos com a mo na massa, veremos tambm um outro padro que embrulha objetos para simplicar
as suas interfaces.
Estamos cercados de adaptadores
Adaptadores orientados a objetos
Explicando o Padro Adapter
Denindo o Padro Adapter
Adaptadores de objetos e de classes
Adaptadores no mundo real
Adaptando uma Enumerao a um Iterator
E agora algo diferente...
Todo Mundo Quer um Home Theater
Luzes, Cmera e Fachada!
Construindo a fachada do seu home theater
Denio do Padro Facade
O Princpio do Conhecimento Mnimo
Ferramentas para sua caixa de ferramentas de projeto
Solues dos Exerccios

178
178
182
183
184
187
187
190
191
193
194
196
197
201
203

Tomada de
Parede Europia
Adaptador
para CA

Pino
Americano
para CA

O Padro Template

8 Encapsulando Algoritmos
J encapsulamos a criao de objetos, mtodos, interfaces complexas, patos, pizzas... o que vir depois? Vamos encapsular algoritmos para que as subclasses possam se conectar diretamente a uma computao a qualquer momento que
quiserem. Iremos aprender at mesmo um princpio de projetos inspirado em Hollywood.
Preparando algumas classes de caf e ch (em Java)
Senhor, posso abstrair seu Caf e seu Ch?
Aprimorando o projeto
Abstraindo prepareRecipe()
O que ns zemos?
Conhea o Template Method
Vamos fazer um pouco de ch
O que o Template Method pode fazer por ns?
Denindo o Padro Template Method
X

206
208
209
209
212
212
213
214
214

Aproveitando o gancho do Template Method


Usando o gancho
Fazendo um test-drive
O Princpio Hollywood
O Princpio Hollywood e o Template Method
Como Reconhecer um Template Method a Olho Nu
Ordenando dados com o Template Method
Temos alguns patos para ordenar
Comparando Patos com Patos
A construo da mquina de ordenar patos
O Swing dos Quadros
Applets
No debate desta noite, Template Method e Strategy comparam mtodos
Ferramentas para sua caixa de ferramentas de projeto
Solues dos Exerccios

216
217
218
220
220
222
222
223
224
226
227
228
229
232
233

Os Padres Iterator e Composite

9 Colees bem gerenciadas


Existem vrias maneiras de inserir objetos em uma coleo. Coloc-los em um Array, um Stack, uma Lista, um Mapa... voc
escolhe. Cada um tem as suas vantagens e desvantagens. Mas, quando o seu cliente quiser iterar atravs dos seus objetos, voc vai
deix-lo ver a sua implementao? Certamente esperamos que no! Isso simplesmente no seria prossional. No se preocupe
neste captulo voc ver como permitir aos seus clientes iterar atravs dos seus objetos sem jamais verem como voc armazena
os objetos. Voc aprender tambm como criar super colees de objetos capazes de saltar sobre algumas estruturas de dados
impressionantes em uma nica passada. Voc aprender tambm algumas coisas sobre a responsabilidade dos objetos.
Notcias: Fuso do Restaurante Objetolndia com a Panquecaria Objetolndia
Examinando os Itens do Menu
Podemos encapsular a iterao?
Conhea o Padro Iterato
Incorporando o Iterador ao Menu do Restaurante
Testando o nosso cdigo
Aprimorando o processo com java.util.Iterator
Denindo o Padro Iterator
Responsabilidade nica
Examinando o Menu do Caf
Iteradores e Colees
Iteradores e Colees em Java 5
Justamente quando achvamos que estava pronto...
Denindo o Padro Composite
Redesenhando os Menus com o Padro Composite
Implementando o Componente de Menu
Implementando o Item de Menu
Voltando ao Iterator
O Iterador Nulo
A mgica de Iterator & Composite juntos...
Ferramentas para sua caixa de ferramentas de projeto
Solues dos Exerccios

236
236
241
243
244
246
249
252
254
256
261
262
265
267
269
270
271
278
281
282
286
287

O Padro State

10 O Estado das Coisas


Um fato pouco conhecido: os Padres State e Strategy so irmos gmeos que foram separados ao nascer. Como voc
sabe, o Padro Strategy acabou se dando muito bem no negcio dos algoritmos intercambiveis. O Padro State, por
sua vez, tomou o caminho talvez mais nobre de ajudar objetos a controlarem seu comportamento atravs de mudanas
no seu estado interno: Repita comigo: eu sou bastante bom, eu sou bastante esperto, e isso o que importa.
Quebra queixos em java
Curso elementar de mquinas de estado
Escrevendo o cdigo
Teste preliminar
Voc j estava prevendo isto um pedido de modicao!

314
315
293
295
298

XI

O ESTADO confuso das coisas


Denindo as interfaces e classes
Implementando as nossas classes de estados
Refazendo a Mquina de Goma
Denindo o Padro State
Strategy x State
Quase esquecemos!
Ferramentas para sua caixa de ferramentas de projeto
Solues dos Exerccios

299
301
302
303
310
316
317
320
320

O Padro Proxy

11 Controlando o Acesso de Objetos


J brincou de tira bonzinho e tira malvado? Voc o tira bonzinho e fornece todos os seus servios de forma agradvel
e amistosa, mas voc no quer que todo mundo pea os seus servios, ento voc faz o tira malvado controlar o acesso a voc.
isso que os proxies fazem: controlam e gerenciam o acesso. Como voc ver, existem vrias maneiras pelas quais os
proxies substituem os seus respectivos objetos. Os proxies tm a fama de carregar chamadas a mtodos inteiros atravs
da Internet para os objetos que substituem; eles tambm tm a fama de pacientemente substituir alguns objetos bem
preguiosos.
Codicando o Monitor
O papel do proxy remoto
Acrescentando um proxy remoto ...
Curso bsico de mtodos remotos
Vista Panormica do RMI de Java
Denindo o Padro Proxy
Prepare-se para o Proxy Virtual
Projetando o Virtual Proxy para capas de CD
Como ImageProxy funcionar:
Escrevendo ImageProxy
Testando o Visualizador de Capas de CD
O que ns zemos?
Usando o Proxy da API Java para criar um proxy de proteo
Pea teatral em cinco minutos: a proteo dos objetos
Vista Panormica: criando um Proxy Dinmico para PersonBean
Primeiro passo: criando os Processadores de Chamadas
O Zoolgico de Proxies
Ferramentas para sua caixa de ferramentas de projeto
Solues dos Exerccios

326
328
330
330
333
348
349
350
350
351
353
354
357
359
360
361
366
368
369

Padres Compostos

12 Padres de Padres
Quem poderia adivinhar que os Padres conseguem trabalhar juntos? Tendo presenciado as exaltadas Conversas ao
P do Fogo (e voc ainda nem viu as pginas do Combate Mortal entre Padres, que o editor nos forou a remover do
livro), voc certamente no imaginaria que ocasionalmente os padres podem at conviver em paz. Bem, acredite ou
no, alguns dos esquemas mais poderosos da programao orientada a objetos baseiam-se na utilizao simultnea de
vrios padres. Portanto, prepare-se para subir mais um degrau no seu domnio dos padres: chegou a hora dos padres
compostos. Mas cuidado os seus colegas podem ter que sacric-lo se voc pegar a Febre dos Padres
Trabalhando juntos
Reunio de patos
O que ns zemos?
Viso panormica: o diagrama de classes
O Rei dos Padres Compostos
Conhecendo o Modelo-Visualizao-Controlador
Examinando o MVC atravs de lentes coloridas por padres
Usando o MVC para controlar a batida
Conhea a Visualizao do Java DJ
A Visualizao
XII

374
374
393
394
396
397
400
402
402
405

Frio
Quente

E agora o Controlador
Explorando Strategy
Adaptando o Modelo
Agora estamos prontos para o HeartController
Coisas para fazer
MVC e a Internet
Padres de Projetos e Modelo 2
Ferramentas para sua caixa de ferramentas de projeto
Solues dos Exerccios
Padres de Projetos e o Modelo 2
Ferramentas para a sua Caixa de Ferramentas de Projetos
Solues dos Exerccios

408
411
411
412
413
414
419
422
423
443
446
447

Vivendo Melhor com os Padres

13 Padres no Mundo Real


Ahh, agora voc est pronto para um brilhante mundo novo cheio de Padres de Projetos. Mas, antes de abrir todas
essas novas portas de oportunidades, precisamos abordar alguns detalhes que voc encontrar no mundo real as coisas
cam um pouco mais complexas l fora do que elas so na Objetolndia. Siga-nos, temos um bom guia para ajud-lo
na transio...

14

Guia da Objetoldia para uam Vida


Denindo o Padro de Projetos
Examinando mais atentamente a denio do Padro de Projetos
Que a fora esteja com voc
No Existem Perguntas Idiotas
Ento voc quer ser uma escritor de Padres de Projetos?
Organizando Padres de Projetos
Pensando em Padres
Padres da Mente
No se esquea do poder do vocabulrio compartilhado
As cinco melhores maneiras de compartilhar o seu vocabulrio
Rodando Objetolndia com a Gangue dos Quatro
Sua jornada est s comeando
Outras fontes de consulta sobre Padres de Projetos
O Zoolgico de Padres
Aniquilando o mal com os Anti-Padres
Ferramentas para sua caixa de ferramentas de projeto
Deixando Objetolndia
Solues dos Exerccios

436
436
438
439
441
442
443
447
449
450
451
451
452
453
453
454
456
457
458

Apndice: Padres Restantes

459

Nem todos podem ser os mais populares. Muitas coisas mudaram nos ltimos dez anos. Desde que saiu a primeira edio
de Padres de Projetos: Elementos de Software Reutilizado Orientado a Objetos, os desenvolvedores vm aplicando esses padres
milhares de vezes. Os padres que resumimos neste apndice so padres GoF (padres fundamentais originais) ociais
completos e de carteirinha, mas no so sempre usados com a mesma freqncia que os padres que exploramos at
aqui. Mas os padres deste apndice so eles mesmos excelentes e, se a situao exigir, voc deve ser capaz de aplic-los
com orgulho. O nosso objetivo neste apndice lhe dar uma idia geral do que so estes padres.

XIII

Outros ttulos da Srie Use a Cabea!


Use
Use
Use
Use
Use
Use
Use
Use
Use
Use
Use
Use
Use
Use
Use
Use

XIV

a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a

Cabea
Cabea
Cabea
Cabea
Cabea
Cabea
Cabea
Cabea
Cabea
Cabea
Cabea
Cabea
Cabea
Cabea
Cabea
Cabea

Java
Anlise & Projeto Orientado a Objetos (A&POO)
Ajax Iniciao Rpida
HTML com CSS e XHTML
Servlets e JSP
PMP
SQL
Desenvolvimento de Software
JavaScript
C#
PHP & MySQL (2009)
Fsica (2009)
Algebra (2009)
Ajax Profissional (2009)
Estatstica
Ruby on Rails

Como usar este livro

Introduo

No acredito que
colocaram isso em um
livro sobre padres de
projetos.

os perguEneltaes
em
d
n
po
es
r
,
o
e
s
a
t
es
N
o, P OR QU
que no querisscao laemr:uEmntlivro sobre padres
colocaram os?.
de projet

XV

Use a Cabea Padres de Projetos

Voc provavelmente se
dar bem se souber C#
em vez de Java.

A quem se destina este livro?


Se voc responder sim a todas estas perguntas:

Voc sabe algo de Java? (No necessrio ser um especialista.)


Voc deseja aprender, entender, se lembrar e aplicar os padres de projetos, incluindo os princpios de design OO
sobre os quais os padres se baseiam?
Voc prefere uma conversa informal estimulante a aulas acadmicas secas e chatas?
ento este livro para voc.

Quem provavelmente deve evitar este livro?


Se voc responder sim a qualquer uma destas perguntas:
Voc totalmente iniciante em Java?
(No preciso ser um conhecedor avanado e, mesmo se voc no souber Java mas souber C#, provavelmente entender pelo
menos 80% dos exemplos de cdigo. Tambm possvel que voc se d bem tendo um background apenas em C++.)
Voc um designer/desenvolvedor OO experiente procurando um livro de referncia?
Voc um arquiteto procurando por padres de projetos corporativos?
Voc tem medo de experimentar algo novo? Voc prefere fazer um tratamento de canal a misturar uma camisa
verde com uma gravata cor-de-rosa? Voc no acredita que um livro tcnico no qual os componentes so antropomorzados possa ser srio?
ento este livro no para voc.

keting:
nota do departamento de mar
qual
a
este livro adequado par o. quer um que
tenha um carto de crdit
Sabemos o que voc est pensando.
Como isso aqui pode ser um livro de programao srio?
Pra que tantos desenhos?
realmente possvel aprender desta forma?

E sabemos o que o seu crebro est pensando.

seu crebro acha que


IST O importante.

O seu crebro tem sede de novidades. Ele est sempre buscando, atento, esperando por algo
fora do comum. Ele foi feito assim, e isso o ajuda a se manter vivo.
Hoje em dia, menos provvel que voc acabe virando o lanche de algum tigre. Mas o seu
crebro continua em alerta. Nunca se sabe.
Ento o que o seu crebro faz com todas as coisas rotineiras, comuns e normais que encontra?
Tudo o que puder para impedir que elas interram com verdadeiro trabalho do crebro registrar as coisas que so importantes. Ele no se d ao trabalho de armazenar as coisas chatas;
elas nunca passam pelo ltro isto obviamente no importante.
Como o seu crebro sabe o que importante? Suponha que voc saia para uma caminhada e
um tigre pule na sua frente, o que acontece dentro da sua cabea e do seu corpo?
Os neurnios disparam. As emoes aumentam. Os elementos qumicos borbulham.
E assim que o seu crebro sabe que...

XVI

Como usar este livro

Isto deve ser importante! No se esquea disto!


timo. S faltam
mais 490 pginas
entediantes, secas e
chatas.

Mas imagine que voc esteja em casa, ou em uma biblioteca. uma rea
segura, aconchegante e sem tigres. Voc est estudando. Preparando-se
para um exame. Ou tentando aprender algum tpico tcnico difcil que
o seu chefe acha que s vai levar uma semana, dez dias no mximo.
Apenas um problema. O seu crebro est tentando lhe fazer um
grande favor. Est tentando certicar-se de que este contedo
obviamente sem importncia no gaste recursos escassos. Recursos
esses que seriam melhor gastos armazenando as coisas realmente
importantes. Como tigres. Como o perigo do fogo. Como voc no
deve nunca mais praticar esqui na neve de calo.

acha ale
o
r
b
e
r

c
seu IST O no v r.
que na memoriza
a pe

E no existe nenhuma maneira simples de dizer ao seu crebro: ei,


crebro, muito obrigado, mas no importa o quanto este livro seja
chato, nem quanto eu estou marcando na escala Richter emocional
neste momento, eu realmente quero armazenar isto aqui.

o um aprendiz.
de Use a Cabea! com
Ns pensamos no leitor

ender, depois certicar? Primeiro voc tem que ent


algo
er
end
apr
se
e as
a
par
rio
tro da sua cabea. Conform
Ento, o que necess
a de empurrar fatos para den
trat
se
er
o
N
end
er.
apr
uec
o,
esq
ca
vai
edu
se de que no
e psicologia da
cia cognitiva, neurobiologia
cin
re
o.
sob
ebr
es
cr
ent
seu
rec
is
ao
a
ma
ress
sas
pesqui
emos o que inte
to em uma pgina. Ns sab
exige muito mais do que tex

a!:
aprendizado Use a Cabe
Alguns dos princpios do
nas
ape
que
eis do

muito mais memorv


Use o visual. As imagens so
89% de precisa chamar servio remoto
izado muito mais efetivo (at
end
torna um m to do no RMI
as palavras e tornam o apr
bm
Tam
ia).
nc
servidor
brana e transfer
to
melhoria em estudos de lem
ou
ue as palavras dentro per
loq
Co
er.
end
ent
de
is
fce
doCalc()
as coisas mais
l ou em outra
referem, em vez de no na
er
olv
dos grcos a que elas se
res
em
uir
seg
con
de os aprendizes
valor de
pgina, e a probabilidade
retorno
tedo poder dobrar.
con
ao
s
ado
problemas relacion
recentes, os estudos
al e personalizado. Em estu
Use um estilo conversacion
no desempenho
40%
at
de
ra
dantes tiveram uma melho
va
quando o contedo fala
em testes ps-aprendizado
em
al,
ion
sac
ver
con
um estilo
realmente uma droga ser
di
diretamente ao leitor, usando
usar um tom formal. Conte
se
de
um mtodo abstrato. No
vez
em
,
soa
pes
primeira
pr
se tem um corpo.
as. Use Faz sentido dizer que a
histrias em vez de dar aul
hi
Banheira -UM Banheiro?
ea
lev
se
o
N
.
linguagem casual
li
Ou o Banheiro -UMA
is
ma
ia
star
pre
Banheira? Ou uma

voc
srio demais. Em que
relao TEM-UM?
um
e
ant
dur
te
san
res
inte
sa
ateno: em uma conver
jantar ou em uma aula?
no do leitor. Todos j
Consiga e mantenha a ate
nte quero aprender
lme
rea
tivemos a experincia eu
da pgina um acordado.
abstract void roam(); isto mas no consigo passar
o em coisas que saiam do
O seu crebro presta aten
tes, estranhas, impressan
comum, que sejam interes
O mtodo no tem
ender um novo e difcil
corpo! Finalize-o com
sionantes, inesperadas. Apr
ser enfadonho. O seu
ponto-e-vrgula.
assunto tcnico no precisa
rpido se no for.
is
crebro aprender muito ma
a sua capacidade de
Ns sabemos, hoje em dia, que
Envolva as emoes do leitor.
se lembra das coisas

Voc
al.
cion
ito do contedo emo
lembrar-se de algo depende mu
, no estamos falando
se lembra quando sente algo. No
com as quais se importa. Voc
orro. Estamos falando
o sobre um garoto e o seu cach
de histrias de partir o cora
?, e da sensao de
isso

que
iosidade, diverso, o
cur
sa,
pre
sur
o
com
s
e
emo
de
-cabea, aprende algo
ndo voc resolve um quebra
Eu sou demais! que vem qua
e algo que o Bob eu
difcil ou percebe que voc sab
que as demais pessoas acham
no sabe.
aria
do departamento de engenh
sou mais tcnico do que vs
XVII

Use a Cabea Padres de Projetos

Metacognio: pensando sobre o pensamento


Se voc realmente deseja aprender, e quer aprender mais rpido e mais profundamente, preste ateno em como voc presta ateno. Pense sobre como voc pensa.
Aprenda sobre como voc aprende.
Muitos de ns no tivemos aulas sobre metacognio ou sobre teoria da aprendizagem quando ramos estudantes. Esperava-se que ns aprendssemos, mas raramente
nos ensinavam a aprender.
Mas ns presumimos que, se voc est lendo este livro, porque realmente deseja
aprender os padres de projetos. E voc provavelmente no deseja gastar muito tempo.
E quer se lembrar do que l e ser capaz de aplic-lo. E, para isso, voc tem que entender
o que leu. Para tirar o mximo proveito deste livro, ou de qualquer livro ou experincia
de aprendizado, tome as rdeas do seu crebro. Faa-o se concentrar no contedo.
O segredo fazer o seu crebro ver o novo material que voc est aprendendo como
Realmente Importante. Crucial para o seu bem-estar. To importante quanto um
tigre. Caso contrrio, voc acabar em uma batalha constante com o seu crebro
fazendo o melhor que puder para impedir que o novo contedo seja registrado.

Gostaria de saber
como fazer o meu
crebro se lembrar de
tudo isto...

Ento COMO voc faz o seu crebro pensar que os Padres de Projetos so to
importantes quanto um tigre?
Existe a maneira lenta e tediosa e a maneira mais rpida e mais efetiva. A maneira lenta refere-se repetio exaustiva. Voc obviamente sabe que capaz de aprender e memorizar at mesmo o assunto mais enfadonho, se se mantiver
batendo na mesma tecla. Repetindo o suciente, o seu crebro diz: Isto no parece importante, mas ele ca olhando
a mesma coisa repetidas e repetidas vezes, ento eu suponho que deve ser.
A maneira mais rpida fazer qualquer coisa que aumente a atividade cerebral, especialmente aumentando diferentes
tipos de atividades cerebrais. As coisas que voc viu na pgina anterior so uma grande parte da soluo, e elas so
todas coisas que comprovadamente ajudam o seu crebro a trabalhar em seu favor. Por exemplo, estudos mostram que
colocar palavras dentro das guras que elas descrevem (em vez de em algum outro lugar da pgina, como em uma
legenda ou no corpo do texto) faz o seu crebro tentar perceber em que sentido as palavras e a gura se relacionam,
e isso faz disparar mais neurnios. Mais neurnios disparados = maior a chance de o seu crebro perceber que isto
algo que vale a pena prestar ateno e possivelmente armazenar.
Um estilo conversacional ajuda porque as pessoas tendem a prestar mais ateno quando percebem que esto em uma
conversa, porque nessa situao espera-se que elas sigam o que est sendo dito e mantenham o seu lado da conexo
ativo. O incrvel que o seu crebro no necessariamente se importa se a conversa entre voc e um livro! Por outro
lado, se o estilo de escrita for formal e seco, o seu crebro o percebe da mesma forma como percebe quando voc est
ouvindo uma aula, sentado em uma sala cheia de alunos passivos. No preciso car acordado.
Mas guras e estilo conversacional so apenas o incio.

Eis o que NS zemos:

objetos depe
ndentes

Usamos guras, porque o seu crebro est ajustado para imagens, e no texto. No que diz respeito ao seu crebro, uma
imagem realmente vale por 1.024 palavras. E, nos casos em que texto e imagens trabalham juntos, ns inserimos o texto nas
imagens, porque o seu crebro trabalha de modo mais ecaz quando o texto se encontra dentro da coisa a que se refere, em
vez de em uma legenda ou enterrado em alguma parte do texto.
Usamos a redundncia, dizendo a mesma coisa de diferentes
relao de um-para-muitos
formas e com diferentes tipos de mdia, e com mltiplos sentidos,
para aumentar a chance de o contedo ser codicado em mais de
Objeto Cachorro
uma rea do seu crebro.
Usamos conceitos e imagens de formas inesperadas, porque o seu
Objeto Subject
crebro est ajustado para captar novidades, e usamos imagens
e idias com pelo menos algum contedo emocional, porque o
Objeto Pato
Objeto Gato
seu crebro est ajustado para prestar ateno na bioqumica das
Atualizao/Noticao automtica
emoes. Aquilo que o faz sentir algo tem maior probabilidade de
ser lembrado, mesmo se o sentimento no passar de um pouco de
Objeto Rato
Observadores
humor, surpresa ou interesse.
XVIII

Como usar este livro

Usamos um estilo personalizado, conversacional, porque o seu crebro est ajustado para prestar
mais ateno quando acredita que voc est em uma conversao do que quando pensa que voc est
ouvindo passivamente uma apresentao. Seu crebro faz isso mesmo quando voc est lendo.
Inclumos mais de 40 atividades, porque o seu crebro est ajustado para aprender e memorizar mais
quando voc faz coisas do que quando voc l sobre as coisas. E zemos os exerccios desaadores,
porm solucionveis, porque isso que a maioria das pessoas prefere.
Usamos mltiplos estilos de aprendizado, porque voc poderia preferir procedimentos passo-a-passo, O
enquanto outra pessoa pode desejar entender o geral primeiro, e uma outra poderia apenas querer ver
um exemplo de cdigo. Porm, independentemente da sua preferncia em termos de aprendizado,
todos se beneciaro de ver o mesmo contedo representado em mltiplas maneiras.
Inclumos contedo para ambos os hemisfrios do crebro, porque, quanto mais do seu crebro voc
ativa, maior a probabilidade de voc aprender e memorizar, e maior o tempo durante o qual voc pode
se manter concentrado. Uma vez que trabalhar apenas um lado do crebro freqentemente signica
dar ao outro lado uma chance para descansar, voc pode ter maior produtividade no aprendizado
por um perodo de tempo maior.

Guru dos Padres

Pontos Importantes

E inclumos histrias e exerccios que apresentam mais de um ponto de vista, porque o seu crebro est
ajustado para aprender com mais profundidade quando forado a fazer avaliaes e julgamentos.
Inclumos desaos, com exerccios e fazendo perguntas que nem sempre tm uma resposta direta,
porque o seu crebro est ajustado para aprender e memorizar quando precisa trabalhar em algo.
Pense no seguinte: no possvel car em forma apenas olhando as pessoas na academia de ginstica.
Mas zemos o nosso melhor para nos certicarmos de que voc estar trabalhando duro, e nas coisas
certas. Que voc no est gastando uma dendrite extra para processar um exemplo difcil de entender,
ou traduzindo um texto difcil, cheio de jargo ou exageradamente conciso.

Quebra-cabeas

Usamos pessoas em histrias, exemplos, guras etc., porque, bem, porque voc uma pessoa. E o
seu crebro presta mais ateno em pessoas do que em coisas.
Usamos uma abordagem 80/20. Partimos do princpio de que, caso voc v tentar um PhD em projetos de software, este no vai ser o seu nico livro. Assim, no falamos sobre tudo. Apenas sobre as
coisas que voc de fato ir usar.

Eis o que VOC pode fazer para obrigar seu crebro a obedec-lo
OK, zemos a nossa parte. O resto depende de voc. Estas dicas so um ponto de partida; escute o seu crebro e descubra o que funciona para voc e o que no funciona.
Experimente coisas novas.
e
e isto
Recort
ta
a por
c o l e n eira
lad
da sua ge

XIX

Use a Cabea Padres de Projetos

V com calma. Quanto mais voc entende, menos voc


precisa memorizar.
No leia, apenas. Pare e pense. Quando o livro lhe zer
uma pergunta, no pule direto para a resposta. Imagine
que algum est realmente fazendo lhe a pergunta. Quanto mais profundamente voc fora seu crebro a pensar,
maior a sua chance de aprender e memorizar.

Faa os exerccios. Escreva as suas prprias notas.


Ns os inclumos, mas, se os resolvssemos para voc,
seria como ter algum fazendo os seus abdominais para
voc. E no olhe os exerccios simplesmente. Use um
lpis. H muita evidncia de que atividade fsica durante
o aprendizado pode melhor-lo.
Leia as sees Perguntar no ofende/No existem
perguntas idiotas.
Isso signica todas elas. Elas no so enfeites opcionais
fazem parte do contedo central! No as pule.
Faa deste livro a sua ltima leitura antes de dormir.
Ou pelo menos a ltima leitura desaadora.
Parte do aprendizado (especialmente a transferncia
para a memria de longo prazo) acontece depois que
voc fecha o livro. O seu crebro precisa tirar um tempo
para fazer mais processamentos. Se voc acrescentar algo
durante esse tempo de processamento, parte do que voc
acabou de aprender se perder.

Leia-me

Beba gua. Muita gua.


O seu crebro funciona melhor envolvido por bastante
uido. A desidratao (que pode ocorrer antes de voc
sequer sentir sede) diminui a capacidade cognitiva.
Fale sobre o assunto. Em voz alta.
Falar ativa uma parte diferente do crebro. Se estiver
tentando entender algo, ou aumentar a sua chance de
se lembrar do assunto depois, pronuncie-o em voz alta.
Melhor ainda, tente explic-lo em voz alta para algum.
Voc aprender mais rapidamente e poder descobrir
idias que voc nem suspeitava que estavam l antes de
comear a ler.
Oua o seu crebro.
Preste ateno se o seu crebro est cando sobrecarregado. Se voc se pegar comeando a ler supercialmente
ou esquecendo o que acabou de ler, hora de fazer uma
pausa. Depois de passar de um certo ponto, voc no vai
aprender mais rpido tentando inserir mais informaes
e poder at prejudicar o processo.
Sinta algo!
O seu crebro precisa saber que isto importante. Envolva-se com as estrias. Crie as suas prprias legendas
para as fotos. Resmungar sobre uma piada ruim ainda
melhor do que no sentir nada.
Projete algo!
Aplique o contedo a algo que voc esteja projetando ou
refatore um projeto antigo. Apenas faa algo para obter
alguma experincia alm dos exerccios e atividades deste
livro. Tudo de que voc precisa um lpis e um problema
para resolver... um problema que possa se beneciar de
um ou mais padres de projetos.

Isto uma experincia de aprendizagem, no um livro de referncia. Ns deliberadamente retiramos tudo o que poderia atrapalhar o aprendizado do que quer que estivssemos
apresentando na parte do livro em questo. E, na primeira leitura, voc precisa comear do
comeo, porque o livro faz assunes sobre o que voc j viu e aprendeu.

Usamos um pseudo-UML
modicado mais simples

Usamos diagramas simples semelhantes a UML.


Embora seja bastante provvel que voc conhea a UML, no a abordamos no livro, nem
um pr-requisito para a sua leitura. Caso voc nunca tenha visto UML antes, no se preocupe,
daremos a voc algumas dicas no caminho. Assim, em outras palavras, voc no ter que se
preocupar com Padres de Projetos e UML ao mesmo tempo. Os nossos diagramas so pseudo-UML embora tentemos ser is UML, em alguns momentos iremos distorcer as regras um pouco, normalmente por causa das nossas
prprias razes artsticas egostas.

No abordamos todos os Padres de Projetos j criados.


Existem muitos Padres de Projetos: os padres fundamentais originais (conhecidos como padres GoF), os padres
J2EE da Sun, os padres JSP, padres arquiteturais, padres de projetos de jogos e muitos mais. Mas o nosso objetivo foi
nos certicarmos de que o livro pesaria menos do que a pessoa que o esteja lendo, ento no abordamos todos eles aqui.
O nosso foco nos padres centrais importantes dentre os padres GoF originais e em nos certicarmos de que voc
XX

Como usar este livro

realmente, sinceramente, profundamente entenda como e quando us-los. Voc encontrar uma breve meno a alguns
dos outros padres (os muito menos provveis que voc v usar) no apndice. Em todo caso, depois de terminar o Use
a Cabea! Padres de Projetos, voc ser capaz de pegar qualquer catlogo de padres e entrar em ao rapidamente.

As atividades NO so opcionais.
Os exerccios e as atividades no so adicionais; eles fazem parte do contedo central do livro. Alguns deles servem para
ajudar a memorizar, outros a entender, e alguns para ajud-lo a aplicar o que voc aprendeu. No pule os exerccios.
As palavras cruzadas so as nicas coisas que voc no precisa fazer, mas so boas para dar ao seu crebro uma chance
de pensar sobre as palavras a partir de um contexto diferente.

Usamos a palavra composio no sentido OO geral, que mais


flexvel do que o uso estrito de composio em UML.
Quando dizemos que um objeto composto com outro objeto, queremos dizer que eles se relacionam de forma
TEM-UM. O nosso uso reete o uso tradicional do termo e o mesmo empregado no texto GoF (voc aprender
o que isso mais tarde). Mais recentemente, a UML renou esse termo em vrios tipos de composio. Se for um
expert em UML, ainda assim voc poder ler o livro e dever ser capaz de mapear facilmente o uso de composio
para os termos mais renados, medida que for lendo.

A redundncia intencional e importante.


Uma diferena distinta em um livro Use a Cabea! que queremos que voc realmente entenda. E queremos que voc
termine o livro lembrando-se do que aprendeu. A maioria dos livros de referncia no tm a reteno e a lembrana
como objetivo, mas este livro sobre aprendizado, ento voc ver alguns conceitos aparecerem mais de uma vez.

Os exemplos de cdigos so os mais enxutos possveis.


Os nossos leitores nos dizem que frustrante percorrer 200 linhas de cdigo procurando as duas linhas que eles precisam entender. A maioria dos exemplos deste livro mostrada dentro do menor contexto possvel, para que a parte que
voc est tentando aprender esteja clara e simples. No espere que todo o cdigo seja robusto, ou mesmo completo os
exemplos so escritos especicamente para o aprendizado, e no so sempre totalmente funcionais.
Em alguns casos, no inclumos todos os comandos import necessrios, mas presumimos que, se voc um programador de Java, voc saber que ArrayList se encontra em java.util, por exemplo. Quando o contedo importado no zer
parte da API J2SE normal, ns o mencionaremos. Tambm colocamos todo o cdigo-fonte na web, para que voc possa
baix-lo. Voc o encontrar em http://www.altabooks.com.br
Alm disso, para nos concentramos na questo do aprendizado do cdigo, no colocamos as nossas classes em pacotes
(em outras palavras, elas esto todas no pacote padro Java). No recomendamos isso no mundo real, e, quando voc
baixar os exemplos de cdigos deste livro, ver que todas as classes esto em pacotes.

Os exerccios Poder da Mente no tm respostas.


Para alguns deles, no h uma resposta certa; para outros, parte da experincia de aprendizado das atividades Poder da
Mente requer que voc decida se e quando as suas respostas esto corretas. Em alguns dos exerccios Poder da Mente,
voc encontrar dicas para lhe apontar a direo correta.
XXI

Use a Cabea Padres de Projetos

Revisores Tcnicos

Valentin Crettaz

Jef Cumps

Barney Marispini

Ike Van Attaa

Johannes de Jong

Mark Spritzler

O destemido lder da Equipe


Radical dos Revisores do UCPP
Jason Menard

Dirk Schreckmann

Em memria de Philippe Maquet


1960-2004
O seu impressionante conhecimento tcnico, seu entusiasmo inacabvel e a sua profunda
preocupao com o leitor sempre iro nos inspirar.
Nunca te esqueceremos.

Philippe Maquet
Agradecimentos

Na OReilly:
O nosso muito obrigado a Mike Loukides da OReilly, por ter comeado tudo e ajudado a dar forma ao conceito Use a
Cabea!, transformando-o em uma srie. E um grande obrigado ao motor por trs da srie Use a Cabea!, Tim OReilly.
Obrigado inteligente mame da srie Use a Cabea! Kyle Hart, estrela do rock and roll Ellie Volkhausen pelo seu
inspirado desenho da capa e tambm a Colleen Gorman pela sua infalvel preparao dos originais. Finalmente, obrigado
a Mike Hendrickson por vestir a camisa deste livro de Padres de Projetos e por ter criado a equipe.

XXII

Como usar este livro

Os nossos intrpidos revisores:


Somos extremamente gratos ao nosso diretor de reviso tcnica Johannes deJong. Voc o nosso heri, Johannes. E apreciamos profundamente as contribuies do co-diretor da equipe de reviso Javaranch, o saudoso Philippe Maquet. Voc
sozinho iluminou a vida de milhares de desenvolvedores, e o impacto que teve nas suas (e nas nossas) vidas ser eterno.
Jef Cumps assustadoramente bom em encontrar problemas nos esboos dos nossos captulos e, mais uma vez, fez uma
enorme diferena para o livro. Obrigado, Jef! Valentin Cretazz (da AOP), que esteve conosco desde o primeiro livro Use
a Cabea!, provou (como sempre) o quanto ns realmente precisamos do seu conhecimento tcnico e da sua inspirao.
Voc o cara, Valentin (mas jogue fora a gravata).
Dois recm-chegados equipe de reviso UC, Barney Marispini e Ike Van Atta, zeram um trabalho primoroso no
livro vocs nos deram um feedback realmente crucial. Obrigado por se juntarem equipe.
Tambm obtivemos excelente ajuda tcnica dos moderadores/gurus do Javaranch Mark Spritzler, Jason Menard,
Dirk Schreckmann, Thomas Paul e Margarita Isaeva. E, como sempre, obrigado especialmente ao chefo do javaranch.com, Paul Wheaton.
Obrigado aos nalistas do concurso Escolha a Capa do Use a Cabea! Padres de Design. O vencedor, Si Brewster,
enviou o ensaio vencedor que nos convenceu a escolher a mulher que voc v na nossa capa. Outros nalistas foram
Andrew Esse, Gian Franco Casula, Helen Crosbie, Pho Tek, Helen Thomas, Sateesh Kommineni e Jeff Fisher.

Ainda mais gente*

de Eric e Elisabeth
Escrever um livro da srie Use a Cabea! um passeio emocionante com dois guias incrveis: Kathy Sierra e Bert Bates.
Com Kathy e Bert voc joga fora todas as convenes de escrita de livros e adentra um mundo cheio de histrias para
contar, teoria de aprendizagem, cincia cognitiva e cultura pop, onde o leitor sempre quem manda. Obrigado a ambos
por nos deixar entrar no seu mundo maravilhoso; esperamos ter feito justia srie Use a Cabea!. Falando srio, foi
uma experincia incrvel. Obrigado por toda a sua cuidadosa orientao, nos levando sempre adiante e, acima de tudo,
por conar a ns o beb de vocs. Vocs dois so certamente incrivelmente espertos e tambm so as pessoas de 29
anos mais legais que conhecemos. Ento... quem mais?
Um muito obrigado a Mike Loukides e a Mike Hendrickson. Mike L. esteve conosco a cada passo do caminho. Mike, o
seu inspirado feedback nos ajudou a dar forma ao livro e o seu encorajamento nos manteve seguindo em frente. Mike
H., obrigado pela sua persistncia ao longo de cinco anos tentando nos fazer escrever um livro sobre padres; nalmente
o zemos e estamos felizes de termos esperado pela srie Use a Cabea!.
Um obrigado muito especial a Erich Gamma, que fez muito mais do que o seu dever ao revisar este livro (ele at levou um esboo consigo nas suas prprias frias). Erich, o seu interesse neste livro nos inspirou e a sua reviso tcnica
completa o melhorou imensamente. Obrigado tambm a toda a Gang of Four pelo seu suporte e interesse, e por fazer
uma apario especial na Objetolndia. Estamos em dbito tambm com Ward Cunningham e com a comunidade dos
padres, que criaram o Portland Pattern Repository (Repositrio de Padres de Portland) um recurso indispensvel
para ns ao escrevermos este livro.
preciso toda uma cidade para escrever um livro tcnico: Bill Pugh e Ken Arnold nos forneceram aconselhamento
especializado sobre o Singleton. Joshua Marinacci forneceu dicas e aconselhamentos inestimveis. O trabalho Why a
Duck? (Por que um Pato?) de John Brewer inspirou o SimUDuck (e camos felizes por ele gostar de patos tambm).
Dan Friedman inspirou o exemplo Little Singleton. Daniel Steinberg agiu como a nossa ligao tcnica e a nossa rede
de suporte emocional. E obrigado a James Dempsey da Apple por nos permitir usar a sua cano sobre o MVC.
Finalmente, um obrigado pessoal equipe de reviso do Javaranch pelas suas excelentes revises e o seu suporte caloroso. H mais de vocs neste livro do que vocs pensam.

XXIII

Use a Cabea Padres de Projetos

De Kathy e Bert
Gostaramos de agradecer a Mike Hendrickson por encontrar Eric e Elisabeth... mas no podemos. Por causa desses dois,
ns descobrimos (para o nosso horror) que no somos os nicos capazes de escrever um livro Use a Cabea!.;) Porm,
se os leitores quiserem acreditar que foram realmente a Kathy e o Bert que zeram as coisas legais do livro, bem, quem
somos ns para corrigir os leitores?

*O grande nmero de agradecimentos se deve ao fato de estarmos


testando a teoria de que todas as pessoas mencionadas em uma lista
de agradecimentos de um livro compraro pelo menos uma cpia, e
provavelmente mais, com os parentes e tudo o mais. Se voc quiser
estar na lista de agradecimentos do nosso prximo livro e tiver uma
grande famlia, escreva para ns.
XXIV

1 Introduo aos Padres de Projetos

Bem-vindo aos
Padres de Projetos
Agora que estamos
morando em Objectville, temos que
entrar nos Padres de Projetos...
todo mundo est fazendo isso. Logo,
seremos a sensao do grupo de
padres de Jim e Betty nas
quartas-feiras noite!

Algum resolveu seus problemas. Neste captulo, voc saber


por que (e como) pode explorar o conhecimento e as lies aprendidas por outros desenvolvedores que tiveram o mesmo problema
de design e sobreviveram. Antes de terminarmos, vamos analisar o
uso e os benefcios dos padres de projetos, ver alguns princpios
importantes de design OO e dar um exemplo de como um padro
funciona. A melhor maneira de usar os padres carregar seu
crebro com eles e depois reconhecer locais em seus designs e
aplicativos existentes onde eles possam ser aplicados. Em vez da
reutilizao de cdigo, com os padres voc obtm a reutilizao
de experincia.
1

Use a Cabea Padres de Projetos

Comeou com um simples aplicativo SimUDuck


Joe trabalha para uma empresa que cria um jogo de simulao de lago com patos de grande sucesso,
o SimUDuck. O jogo pode mostrar uma grande variedade de espcies de pato nadando e produzindo
sons. Os designers iniciais do sistema usaram tcnicas OO padro e criaram uma superclasse Duck
(Pato) herdada por todos os outros tipos de pato.

Todos os patos grasnam e


nadam, a superclasse cuida
do cdigo de implementao.
po dse vel
i
t
b
u
s
Cadao responntar
pat impleme
poru prprio nto
se portame a o modo
com play() par e na tela.
dis o aparec
com

Duck
quack()
swim()
display()
// OUTROS mtodos parecidos com duck...

RedheadDuck

MallardDuck
display() {
// parece um pato bravo }

display() {
// parece um cabea-vermelha }

O mtodo display() abstrato


j que todos os subtipos de pato
so diferentes.
to
a
p
e
d
s
o
p
os tDi uck.
r
t
u
o
s
o
Muidtam da classe
her

Ano passado, a empresa esteve sob presso crescente dos concorrentes. Aps uma sesso de brainstorming de uma
semana jogando golfe, os executivos da empresa acham que est na hora de fazer uma grande inovao. Eles precisam
de algo realmente impressionante para mostrar na reunio de acionistas em Maui na semana seguinte.

Mas agora precisamos dos patos para VOAR


Os executivos decidiram que fazer os patos voarem o que o simulador para acabar
com a concorrncia. E claro que o gerente de Joe disse a eles que Joe poderia criar
algo em uma semana. Anal, disse o chefe de Joe, ele programador OO... no pode
ser muito difcil.

S preciso adicionar um
mtodo y() classe Duck
e depois todos os patos iro
herd-lo. a hora de eu mostrar
que sou mesmo um gnio OO.

O que queremos.
Duck
quack()
swim()
display()
y()

sses
a
l
c
b
u
s
Todasdaams fly().
her

// OUTROS mtodos parecidos com


duck

MallardDuck
display() {
// parece um pato bravo }

O que Joe
adicionou.

RedheadDuck
display() {
// parece um cabea-vermelha }

Joe

Duck...
e
d
s
o
p
i
Outros t

Bem-Vindo aos Padres de Projetos

Mas alguma coisa deu muito errado...

Joe, estou na reunio com os


acionistas. Eles zeram uma
demonstrao e havia patos de
borracha voando pela tela. Isso
era a sua idia de uma brincadeira?
Talvez voc queira passar algum
tempo com Monster.com...

Ok, ento existe uma


pequena falha em meu
design. No sei por que
eles no podem chamar
isso de um recurso. at
bonitinho...

O que aconteceu?

O que ele pensou que fosse


um excelente
uso da herana para ns de
reutilizao no
d to certo
quando se trata
de manuteno.

Joe no percebeu que nem todas as subclasses de


Duck deveriam voar. Quando Joe adicionou um
novo comportamento superclasse Duck, tambm
estava adicionando um comportamento que no era
apropriado para algumas subclasses Duck. Agora,
objetos inanimados estavam voando no programa
SimUPato.
Uma atualizao localizada no cdigo causou um efeito
colateral no-local (patos de borracha voadores)!

Duck

Ao colocarsfle,y(el)endaeu
superclas e de voar a
a capacidad patos, incluindo
T ODOS os deveriam voar.
os que no
MallardDuck
display() {
// parece um pato bravo }

quack()
swim()
display()
y()
// OUTROS mtodos parecidos com
duck

RedheadDuck
display() {
// parece um cabea-vermelha }

RubberDuck
quack() {
// substitudo por Squeak
}
display() {
// parece um pato de borracha
}

Patos de borracha
no grasnam,
ento quack()
substitudo por
Squeak.

Use a Cabea Padres de Projetos

Joe pensa sobre herana...

Mas ento o que acontece


quando adicionamos patos
de madeira como isca ao
programa? Eles no devem
voar nem grasnar...

Eu poderia substituir
sempre o mtodo y()
em pato de borracha,
como fao com o
mtodo quack()...

RubberDuck
quack() { // squeak}
display() { .// rubber duck }
y() {
// substituir para fazer nada}

DecoyDuck

Esta outra clarvsseequnae, assim


hierarquia; obse k, ela no voa,
como RubberDuco grasna.
mas tambm n

quack() {
// substituir para fazer nada
}
display() { // decoy duck}
y() {
// substituir para fazer nada
}

Aponte o seu lpis


Quais opes a seguir so desvantagens do uso de herana para produzir o comportamento Duck?
(Selecione todas as opes possveis.)
A. O cdigo duplicado entre as subclasses.
B. As alteraes no comportamento de tempo de execuo so difceis.
C. No podemos fazer patos danar.
D. difcil conhecer o comportamento de todos os patos.
E. Os patos no conseguem voar e grasnar ao mesmo tempo.
F. As alteraes podem afetar sem querer outros patos.

Que tal uma interface?


Joe percebeu que a herana provavelmente no era a resposta por
que ele recebeu o aviso de que os executivos agora querem atualizar o
produto a cada seis meses (eles ainda no decidiram como). Joe sabe
que as especicaes vo continuar mudando e que ele ser forado
a analisar e possivelmente substituir y() e quack() para cada nova
subclasse Duck adicionada ao programa...sempre.
Por isso, ele precisa de uma maneira mais simples para que apenas
alguns (mas no todos) tipos de pato voem ou grasnem.

Eu poderia tirar y() da


superclasse Duck e criar uma
interface Flyable() com um
mtodo y(). Assim, somente
os patos que devem voar iro
implementar essa interface e ter
um mtodo y()... e tambm posso
criar uma Quackable, j que nem
todos os patos podem grasnar.

Bem-Vindo aos Padres de Projetos

Duck
swim()
display()
// OUTROS mtodos parecidos com
duck

Quackable
Flyable

quack()

y()

MallardDuck
display()
y()
quack()

RedheadDuck
display()
y()
quack()

RubberDuck
display()
quack()

DecoyDuck
display()

O que VOC acha deste projeto?


Esta a idia mais idiota que voc j teve.
Voc consegue dizer cdigo duplicado?
Se voc achava que ter que substituir alguns
mtodos era ruim, como ir se sentir quando
precisar fazer uma pequena alterao no
comportamento de vo... de todas as 48
subclasses de vo de Duck?!

O que voc faria se fosse Joe?


Sabemos que nem todas as subclasses devem ter o comportamento de
voar ou grasnar, ento a herana no a resposta certa. Mas, embora
fazer as subclasses implementar Flyable e/ou Quackable resolva parte do
problema (sem fazer patos de borracha voar inadequadamente), destri
completamente a reutilizao de cdigo para esses comportamentos,
criando apenas um pesadelo de manuteno diferente. E claro que
pode haver mais de um tipo de comportamento de vo at entre os
patos que voam...
Neste ponto, voc pode estar esperando que um Padro de Projetos
aparea em um cavalo branco e salve o dia. Mas qual seria a graa? No,
vamos encontrar uma soluo da maneira antiga aplicando princpios
de design de software OO adequados.

Você também pode gostar