1
Bem-Vindo aos Padrões de Projetos
1 Introdução aos Padrões de Projetos
Agora que estamos
morando em Objectville, temos que
entrar nos Padrões de Projetos...
todo mundo está fazendo isso.
Logo, seremos a sensação do grupo
de padrões de Jim e Betty nas
quartas-feiras à noite!
Bem-vindo aos
Padrões de Projetos
Alguém resolveu seus problemas. Neste capítulo, você saberá por
que (e como) pode explorar o conhecimento e as lições aprendidas
por outros desenvolvedores que tiveram o mesmo problema de
design e sobreviveram. Antes de terminarmos, vamos analisar o
uso e os benefícios dos padrões de projetos, ver alguns princípios
importantes de design OO e dar um exemplo de como um padrão
funciona. A melhor maneira de usar os padrões é carregar seu
cérebro com eles e depois reconhecer locais em seus designs e
aplicativos existentes onde eles possam ser aplicados. Em vez da
reutilização de código, com os padrões você obtém a reutilização
de experiência.
CG_ucpadroes_RI2016.indb 1 22/11/2016 09:36:03
2
Use a Cabeça Padrões de Projetos
Só preciso adicionar um
método y() à classe Duck
e depois todos os patos irão
herdá-lo. É a hora de eu mostrar
que sou mesmo um gênio OO.
Começou com um simples aplicativo SimUDuck
Joe trabalha para uma empresa que cria um jogo de simulação de lago com patos de grande sucesso,
o SimUDuck. O jogo pode mostrar uma grande variedade de espécies de pato nadando e produzindo
sons. Os designers iniciais do sistema usaram técnicas OO padrão e criaram uma superclasse
Duck (Pato) herdada por todos os outros tipos de pato.
Ano passado, a empresa esteve sob pressão crescente dos concorrentes. Após uma sessão de brainstorming de uma
semana jogando golfe, os executivos da empresa acham que está na hora de fazer uma grande inovação. Eles precisam
de algo realmente impressionante para mostrar na reunião 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 precisa para acabar
com a concorrência. E é claro que o gerente de Joe disse a eles que Joe poderia criar algo
em uma semana. “Afinal”, disse o chefe de Joe, “ele é um programador OO... não pode ser
muito difícil”.
Cada subtipo de pato é
responsável por implementar
seu próprio comportamento
display() para o modo como
aparece na tela.
Duck
quack()
swim()
display()
fly()
// OUTROS métodos parecidos com
duck…
MallardDuck
display() {
// parece um pato bravo }
RedheadDuck
display() {
// parece um cabeça-vermelha }
Outros tipos de Duck...
O que queremos.
Todas as subclasses
herdam fly().
O que Joe adicionou.
Duck
quack()
swim()
display()
// OUTROS métodos pareci-
dos com duck...
RedheadDuck
display() {
// parece um cabeça-ver-
melha }
MallardDuck
display() {
// parece um pato bravo }
Todos os patos grasnam e nadam,
a superclasse cuida do código de
implementação.
O método display() é abstrato
já que todos os subtipos de
pato são diferentes.
Muitos outros tipos de
pato herdam da classe
Duck.
Joe
CG_ucpadroes_RI2016.indb 2 22/11/2016 09:36:03
3
Bem-Vindo aos Padrões de Projetos
Só preciso adicionar um
método y() à classe Duck
e depois todos os patos irão
herdá-lo. É a hora de eu mostrar
que sou mesmo um gênio OO.
Mas alguma coisa deu muito errado...
Joe, estou na reunião com os
acionistas. Eles zeram uma
demonstração e havia patos de
borracha voando pela tela. Isso
era a sua idéia de uma brincadeira?
Talvez você queira passar algum
tempo com Monster.com...
Ok, então existe uma
pequena falha em meu
design. Não sei por que
eles não podem chamar
isso de um “recurso”. É até
bonitinho...
O que aconteceu?
Joe não percebeu que nem todas as subclasses de
Duck deveriam voar. Quando Joe adicionou um
novo comportamento à superclasse Duck, também
estava adicionando um comportamento que não
era apropriado para algumas subclasses Duck.
Agora, objetos inanimados estavam voando no
programa SimUPato.
Uma atualização localizada no código causou um efeito
colateral não-local (patos de borracha voadores)!
O que ele pensou
que fosse um
excelente uso da
herança para fins
de reutilização
não dá tão certo
quando se trata de
manutenção.
MallardDuck
display() {
// parece um pato bravo }
RedheadDuck
display() {
// parece um cabeça-vermelha }
Duck
quack()
swim()
display()
fly()
// OUTROS métodos parecidos com
duck…
RubberDuck
quack() {
// substituído por Squeak
}
display() {
// parece um pato de borracha
}
Ao colocar fly() na
superclasse, ele deu a
capacidade de voar a TODOS
os patos, incluindo os que não
deveriam voar.
Patos de borracha
não grasnam,
então quack() é
substituído por
“Squeak”.
CG_ucpadroes_RI2016.indb 3 22/11/2016 09:36:04
Get Use A Cabeça Padrões E Projetos now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.