Escolar Documentos
Profissional Documentos
Cultura Documentos
PADRES
DE
PROJETO
Aula:
Conceitos
da
Orientao
a
Objetos
Paulo
Srgio
dos
Santos
Jnior
Professor:
E-mail:
paulossjunior@ucl.br
PADRES
DE
PROJETO
A
maioria
dos
projeAstas
capaz
de
compreender
conceitos
como
classes,
objetos,
interfaces
e
herana;
O
desao
reside
em
aplic-los
para
construir
soJware
exvel
e
reuAlizvel;
Os
projeAstas
experientes
sabem
que
no
se
deve
resolver
todo
e
qualquer
problema
parAndo
de
princpios
bsicos
(classes,
objetos,
herana,
relacionamentos,
agregao,...);
Devem
buscar
reuAlizar
solues
que
funcionaram
no
passado
(Padro
de
Projeto,
Design
Pa*erns);
PADRES
DE
PROJETO
O
objeAvo
de
um
design
pa*ern
registrar
uma
experincia
no
projeto
de
soJware
OO,
na
forma
de
um
padro
passvel
de
ser
efeAvamente
uAlizado
por
projeAstas.
Um
projeAsta
familiarizado
com
padres
de
projeto
pode
aplic-los
diretamente
a
problemas
de
projeto
sem
ter
que
redescobrir
abstraes
e
os
objetos
que
as
capturam.
Uma
vez
que
um
padro
aplicado,
muitas
decises
de
projeto
decorrem
automaAcamente.
PADRES DE PROJETO
PADRES
DE
PROJETO
Padro
Cria>vo:
abstrai
o
processo
de
instanciao
(criao)
de
objetos,
ajudando
a
tornar
um
sistema
independente
de
como
seus
objetos
so
criados,
compostos
e
representados.
PADRES
DE
PROJETO
Padro
Cria>vo:
abstrai
o
processo
de
instanciao
(criao)
de
objetos,
ajudando
a
tornar
um
sistema
independente
de
como
seus
objetos
so
criados,
compostos
e
representados.
PADRES
DE
PROJETO
Padro
Cria>vo:
abstrai
o
processo
de
instanciao
(criao)
de
objetos,
ajudando
a
tornar
um
sistema
independente
de
como
seus
objetos
so
criados,
compostos
e
representados.
PADRES
DE
PROJETO
Padro
Estrutural:
diz
respeito
a
como
classes
e
objetos
so
compostos
para
formar
estruturas
maiores.
PADRES
DE
PROJETO
Padro
Estrutural:
diz
respeito
a
como
classes
e
objetos
so
compostos
para
formar
estruturas
maiores.
H + H+ O ?
PADRES
DE
PROJETO
Padro
Estrutural:
diz
respeito
a
como
classes
e
objetos
so
compostos
para
formar
estruturas
maiores.
H + H+ O
PADRES
DE
PROJETO
Padro
Comportamental:
diz
respeito
a
algoritmos
e
a
atribuio
de
responsabilidades
e
comportamentos
entre
objetos.
Exemplo U>lizado
PADRES
DE
PROJETO
Contexto:
Desenvolver
um
sistema
para
a
Foobar
Motor
Company;
A
Foobar
Motor
Company
fabrica:
Carros;
Vans;
Motores
dos
veculos;
PADRES
DE
PROJETO
Diagrama
de
classes:
PADRES
DE
PROJETO
Princpios
comuns
de
padres
de
projeto:
1. Programe
para
uma
interface
e
no
para
uma
implementao;
2. Prera
fazer
composio
de
objetos
do
que
herana;
3. Mantenha
baixo
acoplamento
entre
os
objetos;
4. Realize
encapsulamento
para
caractersAcas
que
mudam;
PADRES CRIATIVOS
PADRES
DE
PROJETO
Padres
CriaAvos:
Fabrica
Abstrata:
prover
uma
interface
para
criar
uma
famlia
de
objetos
sem
especicar
as
classes
concretas;
Builder:
permite
criar
diversos
objetos
semelhantes,
uAlizando
o
mesmo
algoritmo;
Mtodo
Fabrica:
dene
uma
interface
para
criar
um
objeto,
mas
deixa
a
deciso
de
instanciao
para
as
subclasses;
Prot>po:
especica
os
Apos
de
objetos
que
sero
criados
atravs
de
protApos
e
cria
um
novo
objeAvo
copiando
um
protApo;
Singleton:
garante
que
apenas
um
objeto
ser
criado
e
prover
um
nico
ponto
de
acesso
para
a
esse
objeto;
PADRES
DE
PROJETO
Fabrica
Abstrata:
Proposito:
prover
uma
interface
para
criar
uma
famlia
de
objetos
sem
especicar
as
classes
concretas;
Problema:
A
Foobar
Motor
Company
fabrica
os
carros
e
vans
com
a
lateria,
chassi
e
suporte
para
os
vidros.
Embora
os
carros
e
vans
precisem
dos
mesmo
Apos
de
componentes,
a
especicao
de
cada
Apo
difere
se
ser
usado
em
uma
van
ou
em
um
carro.
PADRES
DE
PROJETO
Fabrica
Abstrata:
Para
construirmos
um
veiculo
devemos
pensar
que
os
componentes
devem
vim
de
diferentes
famlias!
PADRES
DE
PROJETO
Fabrica
Abstrata:
Para
construirmos
um
veiculo
devemos
pensar
que
os
componentes
devem
vim
de
diferentes
famlias!
PADRES
DE
PROJETO
Fabrica
Abstrata:
PADRES
DE
PROJETO
Fabrica
Abstrata:
Como
iremos
instanciar
a
famlia
correta
de
componentes
sem
explicitar
os
componentes
para
o
cliente?
PADRES
DE
PROJETO
Fabrica
Abstrata:
Como
iremos
instanciar
a
famlia
correta
de
componentes
sem
explicitar
os
componentes
para
o
cliente?
R.:
Atravs
de
uma
fabrica
de
classes!
PADRES
DE
PROJETO
Fabrica
Abstrata:
PADRES
DE
PROJETO
Fabrica
Abstrata:
Fabrica
Abstrata
Fabrica de Vans!
PADRES
DE
PROJETO
Fabrica
Abstrata:
A
Classe
AbstractVehicleFactory
a
responsvel
por
denir
o s
m t o d o s :
c r e a t e B o d y ( ) ,
c r e a t e C h a s s i s ( )
e
createWindows();
PADRES
DE
PROJETO
Fabrica
Abstrata:
A
Classe
CarFactory
a
responsvel
por
retornar
os
objeAvo
da
famlia
do
Apo
carro.
PADRES
DE
PROJETO
Fabrica
Abstrata:
A
Classe
VanFactory
a
responsvel
por
retornar
os
objeAvo
da
famlia
do
Apo
Van.
PADRES
DE
PROJETO
Fabrica
Abstrata:
Como
eu
uso
isso
em
cdigo?
PADRES
DE
PROJETO
Fabrica
Abstrata:
Como
eu
uso
isso
em
cdigo?
PADRES
DE
PROJETO
Fabrica
Abstrata:
Qual
a
desvantagem
de
uAlizar
o
Fabrica
Abstrata?
PADRES
DE
PROJETO
Fabrica
Abstrata:
Qual
a
desvantagem
de
uAlizar
o
Fabrica
Abstrata?
A
principal
desvantagem
quando
necessrio
adicionar
novas
caractersAcas
na
fabrica.
Imaginem
o
problema
que
teremos
ao
adicionar
o
farol
no
fabrica.
PADRES
DE
PROJETO
Builder:
Proposito:
permite
criar
diversos
objetos
semelhantes,
uAlizando
o
mesmo
algoritmo;
Problema:
A
Foobar
Motor
Company
fabrica
os
carros
e
vans.
Porm,
o
processo
de
construo
difere
em
detalhes
para
cada
veiculo:
Van:
possui
uma
cabine
e
uma
grande
rea
de
carga
reforada;
Saloon:
possui
uma
rea
dos
passageiros
e
uma
rea
de
malas;
PADRES
DE
PROJETO
Builder:
Problema:
A
Foobar
Motor
Company
fabrica
os
carros
e
vans.
Porm,
o
processo
de
construo
difere
em
detalhes
para
cada
veiculo:
Van:
possui
uma
cabine
e
uma
grande
rea
de
carga
reforada;
Saloon:
possui
uma
rea
dos
passageiros
e
uma
rea
de
malas;
Como construir diferentes carros com o mesmo material e usando o mesmo processo?
PADRES
DE
PROJETO
Builder:
O
padro
Builder
facilita
a
construo
de
objetos
complexos
da
seguinte
forma:
1. Separando
os
mtodos
uAlizados
em
hierarquia
de
Builder;
2. Usando
um
Director
(diretor)
que
especica
quais
etapas
so
requeridas
e
a
ordem;
3. Builder
retorna
o
objeto
construdo;
PADRES
DE
PROJETO
Builder:
PADRES
DE
PROJETO
Builder:
Builder!
Diretor!
PADRES
DE
PROJETO
Builder:
VehicleBuilder
possui
todos
os
mtodos
necessrios
para
construir
os
veculos;
VehicleBuilder
tambm
possui
os
mtodo
getVehicle()
que
retorna
o
veculo
construdo;
PADRES
DE
PROJETO
Builder:
CarBuilder
responsvel
por
construir
as
partes
do
carro;
PADRES
DE
PROJETO
Builder:
CarBuilder
responsvel
por
construir
as
partes
do
carro;
PADRES
DE
PROJETO
Builder:
VanDirector
responsvel
por
denir
o
passo-a-passo
do
processo
da
construo
de
uma
Van;
PADRES
DE
PROJETO
Builder:
Como
eu
uso
isso
em
cdigo?
PADRES
DE
PROJETO
Builder:
Como
eu
uso
isso
em
cdigo?
PADRES
DE
PROJETO
Builder:
Qual
a
desvantagem
de
uAlizar
o
Builder?
PADRES
DE
PROJETO
Mtodo
Fabrica:
Proposito:
dene
uma
interface
para
criar
um
objeto,
mas
deixa
a
deciso
de
instanciao
para
as
subclasses;
Problema:
Precisamos
instanciar
um
Apo
parAcular
de
veiculo
(por
exemplo,
Coupe)
com
um
certa
frequncia;
Quero
que
uma
classe
seja
responsvel
por
gerenciar
a
instanciao;
Como
faremos
isso?
PADRES
DE
PROJETO
Mtodo
Fabrica:
PADRES
DE
PROJETO
Mtodo
Fabrica:
Dene
uma
classe
abstrata
que
server
com
uma
fabrica
e
que
possui
mtodos
abstratos
responsveis
por
instanciar
as
classes.
PADRES
DE
PROJETO
Mtodo
Fabrica:
PADRES
DE
PROJETO
Mtodo
Fabrica:
PADRES
DE
PROJETO
Mtodo
Fabrica:
Fabrica
de
Carros!
PADRES
DE
PROJETO
Mtodo
Fabrica:
PADRES
DE
PROJETO
Mtodo
Fabrica:
Fabrica
de
Van!
PADRES
DE
PROJETO
Mtodo
Fabrica:
PADRES
DE
PROJETO
Mtodo
Fabrica:
Existe
uma
variao
do
mtodo
fabrica
chamado:
mtodo
fabrica
est>co.
O
uso
dela
comum:
pois
no
necessrio
instanciar
um
classe
do
Apo
fabrica;
PADRES
DE
PROJETO
Mtodo
Fabrica:
PADRES
DE
PROJETO
Mtodo
Fabrica:
UAlizando
mtodo
fabrica
estAco!
PADRES
DE
PROJETO
ProtApo:
Proposito:
especica
os
Apos
de
objetos
que
sero
criados
atravs
de
protApos
e
cria
um
novo
objeAvo
copiando
um
protApo;
Problema:
Imagine
que
seja
necessrio
criar
um
carro
e
uma
van
em
tempo
de
execuo
e
da
maneira
mais
rpida
possvel.
Como
faremos
isso
?
PADRES
DE
PROJETO
ProtApo:
Problema:
Imagine
que
seja
necessrio
criar
um
carro
e
uma
van
em
tempo
de
execuo
e
da
maneira
mais
rpida
possvel.
Como
faremos
isso
?
Uma
abordagem
que
melhora
a
instanciao
em
tempo
de
execuo
o
ProtApo.
No
Java
a
tcnica
que
mais
se
adequa
ao
padro
ProtApo
o
clone();
PADRES
DE
PROJETO
ProtApo:
PADRES
DE
PROJETO
ProtApo:
Modicao
na
Classe
AbstractVehicle
PADRES
DE
PROJETO
ProtApo:
Modicao
na
Classe
AbstractVehicle
Mtodo
responsvel
por
clonar!
PADRES
DE
PROJETO
ProtApo:
Agora
devemos
criar
uma
classe
que
responsvel
por
gerenciar
as
instncias:
VechileManager.
PADRES DE PROJETO
PADRES DE PROJETO
Criando os clones!
PADRES
DE
PROJETO
ProtApo:
UAlizando
a
Classe
VehicleManager:
PADRES
DE
PROJETO
ProtApo:
necessrio
instanciar
todas
as
classes
ao
mesmo
tempo
para
realizar
o
clone
?
PADRES
DE
PROJETO
ProtApo:
necessrio
instanciar
todas
as
classes
ao
mesmo
tempo
para
realizar
o
clone
?
R.:
No.
Podemos
fazer
uma
instanciao
tardia.
PADRES
DE
PROJETO
Singleton:
Proposito:
garante
que
apenas
um
objeto
ser
criado
e
prover
um
nico
ponto
de
acesso
para
a
esse
objeto;
Problema:
Os
carros
somente
podem
ter
um
nico
serial;
Querem
se
assegurar
que
existe
apenas
um
local
onde
esse
serial
obAdo;
PADRES
DE
PROJETO
Singleton:
Como
garanAr
que
exista
apenas
uma
instncia
de
uma
classe?
PADRES
DE
PROJETO
Singleton:
Como
garanAr
que
exista
apenas
uma
instncia
de
uma
classe?
R:
Na
abordagem
tradicional:
cria
um
mtodo
construtor
private;
Prover
um
mtodo
public
sta=c
para
retornar
um
objeto
est)co
da
classe;
PADRES
DE
PROJETO
Singleton:
PADRES
DE
PROJETO
Singleton:
Instncia
est>ca
do
objeto
PADRES
DE
PROJETO
Singleton:
PADRES
DE
PROJETO
Singleton:
Construtor privado!
PADRES
DE
PROJETO
Singleton:
Executando
o
singleton;
PADRES
DE
PROJETO
Singleton:
Ser
que
existe
um
modo
mais
elegante
de
aplicar
o
padro
singleton?
PADRES
DE
PROJETO
Singleton:
Ser
que
existe
um
modo
mais
elegante
de
aplicar
o
padro
singleton?
R.:
No
Java
1.5
feito
atravs
de
ENUM.
PADRES
DE
PROJETO
Singleton:
Ser
que
existe
um
modo
mais
elegante
de
aplicar
o
padro
singleton?
R.:
No
Java
1.5
feito
atravs
de
ENUM.
COMO??
PADRES
DE
PROJETO
Singleton:
PADRES
DE
PROJETO
Singleton:
PADRES
DE
PROJETO
Singleton:
Problema:
A
Foobar
motor
quer
usar
um
idenAcador
nico
para
os
motores
tambm.
Como
faremos
o
cdigo
sem
precisar
criar
uma
classe
com
o
padro
Siglenton
para
o
numerador
do
motor?
PADRES
DE
PROJETO
Singleton:
PADRES
DE
PROJETO
Singleton:
Este material est disponvel para uso no-comercial e pode ser derivado e/ ou distribudo, desde que uAlizando uma licena equivalente. Maiores informaes: hpp://creaAvecommons.org/licenses/by-nc-sa/2.5/ deed.pt Voc pode copiar, distribuir, exibir e executar a obra, alm de criar obras derivadas, sob as seguintes condies: (a) voc deve dar crdito ao autor original, da forma especicada pelo autor ou licenciante; (b) voc no pode uAlizar esta obra com nalidades comerciais; (c) Se voc alterar, transformar, ou criar outra obra com base nesta, voc somente poder distribuir a obra resultante sob uma licena idnAca a esta.