Академический Документы
Профессиональный Документы
Культура Документы
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 signi!cativamente 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 pro!ssionais e estudantes de computao. - Newton Lee, Fundador e Editor-Chefe, Association for Computing Machinerys (ACM) Computers int Entertainment (acmcie.org.)
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.
Bert desenvolvedor e arquiteto de software, mas uma passagem de dez anos no campo de inteligncia arti!cial 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 Certi!cao 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 Paci!c 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.
VII
O Padro Observer
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 de!nido 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 subclassi!cavam 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 de!nido 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 Polimor smo 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
80 81 82
Construindo uma fbrica simples de pizza O Simple Factory de!nido 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 de!nido 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 de!nido 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: Con!sses de um Singleton A Fbrica Chocolate Padro Singleton de!nido
Hershey, PA
127 128 129 130 132 132 133 134 134 138 141
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
O Padro Command
IX
De!nio do Padro Command De!nio 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: en!leirando 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
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 simpli!car as suas interfaces.
Estamos cercados de adaptadores Adaptadores orientados a objetos Explicando o Padro Adapter De!nindo 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 De!nio 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
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? De!nindo o Padro Template Method
X
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
O Padro State
XI
O ESTADO confuso das coisas De!nindo as interfaces e classes Implementando as nossas classes de estados Refazendo a Mquina de Goma De!nindo o Padro State Strategy x State Quase esquecemos" Ferramentas para sua caixa de ferramentas de projeto Solues dos Exerccios
O Padro Proxy
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 sacri!c-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
14
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) o!ciais 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
XIV
Introduo
ta os perguEnel em d n po es r , o e s a t es N OR QU res P , o t n E : r la ca er qu que no isso em um livro sobre pad es colocaram os?. de projet
XV
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.
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?
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 inter!ram 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
ender, depois certi!car? 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 gr!cos 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
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 su!ciente, 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.
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 desa!adores, 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 bene!ciaro 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 signi!ca dar ao outro lado uma chance para descansar, voc pode ter maior produtividade no aprendizado por um perodo de tempo maior. 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 desa!os, 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 certi!carmos 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. 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.
Quebra-cabeas Guru dos Padres
Pontos Importantes
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
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.
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 super!cialmente 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 bene!ciar de um ou mais padres de projetos.
Usamos um pseudo-UML modi!cado mais simples
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 signi!ca 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 desa!adora. 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
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.
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 re'ete o uso tradicional do termo e o mesmo empregado no texto GoF (voc aprender o que isso mais tarde). Mais recentemente, a UML re!nou 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 re!nados, medida que for lendo.
Revisores Tcnicos
Jef Cumps
Ike Van Attaa O destemido lder da Equipe Radical dos Revisores do UCPP Jason Menard
Johannes de Jong
Mark Spritzler
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
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 con!ar 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
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
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
O mtodo display() abstrato j que todos os subtipos de pato so diferentes. to a p e d s o p i . os tD r t u o s o t da classe uck Muid her am
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.
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() // OUTROS mtodos parecidos com duck
Joe
RedheadDuck
display() { // parece um cabea-vermelha }
Duck... e d s o p i Outros t
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?
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)!
O que ele pensou que fosse um excelente uso da herana para !ns de reutilizao no d to certo quando se trata de manuteno.
Duck
y() na Ao colocarsfl ele deu superclas e, de voar a uindo a capacidadepa tos, incl r. T ODOS os dev os que no eriam voa
MallardDuck display() { // parece um pato bravo }
Mas ento o que acontece quando adicionamos patos de madeira como isca ao programa? Eles no devem voar nem grasnar...
RubberDuck quack() { // squeak} display() { .// rubber duck } y() { // substituir para fazer nada}
DecoyDuck quack() { // substituir para fazer nada } display() { // decoy duck} y() { // substituir para fazer nada }
sse na Esta outra clarv que, assim hierarquia; obse k, eela no voa, como RubberDuco grasna . mas tambm n
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.
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.
RubberDuck display()
DecoyDuck