br
PADRES
DE
PROJETO
E
DESENVOLVIMENTO
EM
CAMADAS
PROF.
RODRIGO
QUITES
REIS
Junho
de
2015
Introduo
1
-
Arquitetura
e
Projeto
de
SoCware
2-
EsElos
Arquiteturais
3
-
Padres
de
Projeto
4
-
EsElo
em
Camadas
e
MVC
detalhamento
Exerccios
e
trabalhos
prEcos
Parte
1
Arquitetura
e
Projeto
de
SoCware
Capa
de
livro
clssico
na
rea
de
Arquitetura
de
soCware
OBS: Dentro de cada pacote h uma descrio breve da funcionalidade de cada camada e componente.
Enactme nt
A
DiscoverDataLocation SystemInformationManagement
C
valid
not valid
finished
rqr,
labes-ufpa,
supplier defines2that
015
all activitities are concl... 10
O
que
Arquitetura
de
SoCware?
www.labes.ufpa.br
The image part with relationship ID rId3 was not found in the file.
modeling
Prototype
Spec
Design
rqr,
labes-ufpa,
2015
14
Princpios
de
Projeto
(1)
www.labes.ufpa.br
Conceitos
fundamentais
do
projeto
de
soCware
Abstrao
Definido como uma estrutura de dados
De
dados
porta
fabricante
modelo
tipo
material
peso
mecanismo de abertura
preo
Abstrao
Procedimental
abrir
Detalhamento
algortmico
Renamento
open
walk to door;
reach for knob;
open door; repeat until door opens
turn knob clockwise;
walk through; if knob doesn't turn, then
close door. take key out;
find correct key;
insert in lock;
endif
pull/push door
move out of way;
end repeat
rqr,
labes-ufpa,
2015
22
Conceitos
Fundamentais
www.labes.ufpa.br
Modularidade
Facilidade
para
construir,
facilidade
para
modicar,
facilidade
para
conserto,
...
The image part with relationship IDThe The image part with relationship IDThe
rId3
rId3 was not found in the file. imag was not found in the file. imag
e e
part The image part with relationship ID rId3 was
Th part
with not found in the file. e with
relati im relati
onsh ag The image part with relationship ID rId3 was not onsh
ip ID e found in the file. ip ID
The
The rId3 par rId3
was t was
not wit not
foun h foun
d in rel d in
the ati the
file. on file.
shi The image part with
p relationship ID rId3 was
The ID not found in the file.
The
image rId image
part 3 part
with wa with
relations s relation
hip ID The image part with not ship ID
relationship ID rId3 was not fou
found in the file. nd
in
the
Modularidade
Modularidade
MODULE
Modularidade
Independncia
Coeso
Medida
da
idenEdade
funcional
de
um
mdulo
I.e.,
mdulo
realiza
uma
nica
funo
Acoplamento
Grau
de
dependncia
entre
mdulos
Ideal:
coeso
alta
e
acoplamento
baixo
Obs:
apesar
destas
medidas
terem
surgido
para
tcnicas
Estruturas,
so
tambm
aplicveis
em
mtodos
OO
Modularidade:
Coeso
Tipos:
Funcional
(caixa
preta,
a
melhor)
uma
e
somente
uma
funo
idenecvel.
Seqencial
(vrias
aEvidades
que
precisam
ser
-
executadas
em
seqncia,
e
os
dados
uem
de
uma
aEvidade
para
outra)
Comunicacional
(aEvidades
usam
a
mesma
entrada
e
a
mesma
sada)
Procedural
(aEvidades
diferentes,
com
controle
e
no
dados
-
uindo
de
uma
para
outra)
Temporal
(vrias
funes
executadas
no
mesmo
tempo.
Ex:
inicializao)
Lgica
(vrias
funes
semelhantes
porm
independentes)
Coincidental
(a
pior)
Modularidade:
Coeso
Como
conseguir
coeso
funcional
descrever
o
mdulo
evitando
Sentena
composta,
vrgula,
mais
de
1
verbo
(seqencial
ou
comunicacional)
Palavras
que
se
relacionem
com
o
tempo
(temporal)
Predicado
da
sentena
com
mais
de
1
objeto
Exerccio
Modularidade:
Acoplamento
nvel
de
inter-dependncia
entre
os
mdulos
de
um
programa
de
computador.
Quanto
maior
for
o
acoplamento
menor
ser
o
nvel
de
coeso.
(Wikipedia)
Tipos
Acoplamento
de
dados:
troca
de
parmetros
(o
melhor)
Acoplamento
de
imagem
(estrutura
de
dados
comum
uElizada
parcialmente
em
vrios
mdulos)
Acoplamento
de
controle
-
exemplo:
ags
indicando
o
que
um
mdulo
deve
fazer
(intermedirio)
Acoplamento
comum
(mdulos
acessam
rea
de
dados
comum)
Acoplamento
de
contedo:
se
um
mdulo
faz
referncia
ao
interior
do
outro
(o
pior)
Arquitetura
The overall structure of the software and the
ways in which that structure provides
conceptual integrity for a system. [SHA95a]
Ocultamento
da
Informao
Informa,on
Hiding,
Parnas
1972
mdulo algoritmo
interface
controlada estrutura de dados
detalhe da interface externa
poltica de alocao de recurso
clientes segredo"
Ocultamento
da
Informao
Reduz
a
ocorrncia
de
efeitos
colaterais
Limita
o
impacto
global
das
decises
locais
de
projeto
EnfaEza
comunicao
atravs
de
interfaces
controladas
Desencoraja
o
uso
de
dados
globais
Leva
ao
encapsulamento
-
um
atributo
de
projeto
de
alta
qualidade
Resulta
em
qualidade
de
soCware
Introduo
1
-
Arquitetura
e
Projeto
de
SoCware
2-
Eselos
Arquiteturais
3
-
Padres
de
Projeto
4
-
EsElo
em
Camadas
e
MVC
detalhamento
Exerccios
e
trabalhos
prEcos
Parte
2
EsElos
Arquiteturais
nPressman,
2012
nMendes,
2002
nAn
IntroducEon
to
Implicit
InvocaEon
Architectures
-
Benjamin
Edwards
(
ben@ben-edwards.com)
nGarlan
&
Shaw:
An
IntroducEon
to
SoCware
Architecture
-
hup://www.cs.cmu.edu/
afs/cs/project/able/Cp/intro_soCarch/intro_soCarch.pdf
Arquitetura
=
Componentes
+
Conectores
1
gerao)
Anlise
Anlise
Gerao
de
Anlise
Lxica
OEmizao
SintEca
SemnEca
cdigo
Gerao de
Cdigo
rqr,
labes-ufpa,
2015
Intermedirio 43
EsElos
Arquiteturais
www.labes.ufpa.br
Tabela
de
smbolos
de
estrutura
sintEca
Outras
editor
rqr,
labes-ufpa,
2015
44
ferramentas
www.labes.ufpa.br
Chamada
e
Retorno
Estrutura
relaEvamente
fcil
de
ampliar
e
mudar
SubesElos:
Programa
Principal/Subprograma
Chamada
de
Procedimentos
Remotos
(SD)
Chamada
e
Retorno
Aplicaes:
Sistemas
distribudos
com
troca
de
mensagens
RMI,
CORBA,
WebServices,
entre
outros
er r o mpida
o in t
ex ecu
exec
u o
cliente rein
icia
Mtodo remoto
rqr,
labes-ufpa,
2015
48
EsElos
Arquiteturais
www.labes.ufpa.br
Orientado
a
Objeto
Classes
encapsulam
dados
e
operaes
Interfaces
estabelecem
contratos
e
associao
de
baixo
acoplamento
Comunicao
e
coordenao
entre
componentes
conseguida
atravs
de
mensagens
comp :
2: criar(nmero) Computador
1: ins erirComput ador(loja)
5: loja
7: computador inserido
rqr,
labes-ufpa,
2015
: Loja 50
EsElos
Arquiteturais
www.labes.ufpa.br
Orientado
a
Objeto
Classes
e
Associaes
Implementao
de
Tipos
Abstratos
de
Dados
(enEdades
independentes)
Mapeamento
com
conceitos
do
domnio
do
problema
Troca
de
mensagens
menor
acoplamento
que
uso
de
variveis
comparElhadas
Classes
podem
ser
reuElizadas
Objetos
podem
ser
distribudos
e
executar
em
seqencialmente
ou
em
paralelo
Orientado
a
Objetos
Mensagem
Comunicao
entre
obj1
e
obj2
()
obj2.msg();
//
executada
no
contexto
de
obj1
DesEnatrio
explicitamente
declarado
(ruim)
Orientado
a
Objetos
Interfaces
Representam
responsabilidades
em
alto
nvel
de
abstrao
Baixo
acoplamento
baixo:
classes
no
se
conhecem
Facilita
a
manuteno
Orientado
a
Objetos
Interface
Orientado
a
Objetos
Frameworks
-
(wikipedia,
pt)
estrutura
de
suporte
denida
em
que
um
outro
projecto
do
soCware
pode
ser
organizado
e
desenvolvido.
Pode
incluir
programas
de
apoio,
bibliotecas
de
cdigo,
linguagens
de
script
e
outros
soCwares
para
ajudar
a
desenvolver
e
juntar
diferentes
componentes
do
seu
projecto.
Especicamente
em
OO,
framework
um
conjunto
de
classes
com
objeEvo
de
reuElizao
de
um
design,
provendo
um
guia
para
uma
soluo
de
arquitetura
em
um
domnio
especco
de
so>ware.
Framework
se
diferencia
de
uma
simples
biblioteca
(toolkit),
pois
esta
se
concentra
apenas
em
oferecer
implementao
de
funcionalidades,
sem
denir
a
reuElizao
de
uma
soluo
de
arquitetura
(design).
Orientado
a
Objetos
Possibilita
(todos)
os
esElos
arquitetnicos
descritos
Camadas
Inspirado
em
Sistemas
Operacionais
UElizado
hoje
para
segmentar
IU,
Lgica
da
aplicao,
e
BD
(normalmente)
Camadas
hup://www.ime.usp.br/~andrers/aulas/bd2005-1/img/arquitetura_n_camadas.jpg
rqr,
labes-ufpa,
2015
60
EsElos
Arquiteturais
www.labes.ufpa.br
hup://atlas-connect-forum.web.cern.ch/Atlas-connect-forum/SDP/layers.gif
rqr,
labes-ufpa,
2015
61
EsElos
Arquiteturais
www.labes.ufpa.br
Camadas
Nmero
de
camadas
depende
da
funcionalidade
a
ser
oferecida
pelo
sistema
Denio
de
critrios
de
abstrao
para
agrupar
subtarefas
na
composio
de
uma
camada
Critrios:
persistncia,
interao
com
usurio,
distribuio,
etc.
Vantagem:
exibilidade
Desvantagem:
o
desempenho
ca
compromeEdo
face
necessidade
de
um
caso
de
uso
passar
por
vrias
camadas
Desao
do
projeto
em
camadas:
encontrar
equilbrio
entre
nmero
de
camadas
x
tempo
de
resposta
x
outros
requisitos
no-funcionais
Camadas
aplicao
Protocolos
de
redes
de
computadores
apresentao
sesso
transporte
rede
enlace
sica
rqr,
labes-ufpa,
2015
63
EsElos
Arquiteturais
www.labes.ufpa.br
Camadas
Desenho
de
aplicao
aberta
Sistema X Sistema Y
protocolo da camada 7
aplicao aplicao
protocolo da camada 6
apresentao apresentao
Descrio
de
um
protocolo
pblico,
onde
cada
camada
estabelece
uma
sesso
protocolo da camada 5
sesso
interface
para
conversar
com
Componentes
da
camada
transporte
protocolo da camada 4
transporte
correspondente.
protocolo da camada 3
rede rede
protocolo da camada 2
enlace enlace
protocolo da camada 1
fsica fsica
Centradas
em
Dados
Repositrio
(passivo)
e
Blackboard
(aEvo)
Usado
quando
um
sistema
descrito
como
um
armazm
centralizado
de
dados
que
se
comunica
com
um
nmero
de
clientes
Vantagem:
Fcil
de
administrar
Desvantagem:
Diculdade
em
idenEcar
erros/
dependncias
SoCware
do
SoCware
do
cliente
cliente
Repositrio
de
dados
SoCware
do
SoCware
do
cliente
cliente
SoCware
do
cliente
Centradas
em
Dados
Baseada
em
SGBDs
ricos
Pode
ser
visto
como
um
repositrio
passivo
ou
blackboard
aEvo
Stored
Procedures
e
triggers
podem
ser
usados
para
noEcar
clientes
recursos
de
programao,
ferramentas
para
gerao
de
telas
e
relatrios,
Epos
denidos
por
usurios,
...
Por
exemplo:
Oracle,
DB2
Vantagem:
simplica
o
desenvolvimento
de
ferramentas
diversas,
independentes
Desvantagem:
Dependncia
de
um
produto/tecnologia/fornecedor.
Invocao
Implcita
Invocao
implcita
Diferena
com
relao
invocao
explcita:
Os
componentes
do
sistema
usam
eventos
para
se
comunicar
entre
si.
Os
conectores
so
ligaes
fracas
entre
eventos
e
mtodos
dos
componentes,
os
quais
podem
ser
(re-)denidos
em
tempo
de
execuo.
Invocao
implcita
Exemplo:
framework
Fluxo
de
controle
determinado
pelo
framework
O
cdigo
do
framework
invoca
o
cdigo
adicionado
Cdigo do usurio
Invocao
implcita
Tipicamente
implementado
com
o
padro
Observer
hup://en.wikipedia.org/wiki/Observer_pauern
rqr,
labes-ufpa,
2015
74
EsElos
Arquiteturais
www.labes.ufpa.br
Recado
Final
Leitura
adicional
necessria
para
observar
exemplos
de
aplicaes
Garlan
e
Shaw
uma
Ema
leitura
Arquiteturas
hbridas
Invariavelmente
um
sistema
adotada
mais
de
um
esElo
arquitetural
simultneo
Introduo
1
-
Arquitetura
e
Projeto
de
SoCware
2-
EsElos
Arquiteturais
3
-
Padres
de
Projeto
4
-
EsElo
em
Camadas
e
MVC
detalhamento
Exerccios
e
trabalhos
prEcos
Parte
3
Padres
de
Projeto
Histrico
Autores
Importantes
Linguagem
para
denio
de
Padres
de
Projeto
Padres
de
Gamma
(GoF)
Outros
Epos
de
Padres
de
Projeto
MoEvao
Projetar
soCware
orientado
a
objetos
dicil
Projeto
de
soCware
reuelizvel
ainda
mais
dicil
encontrar
objetos
perEnentes
fator-los
em
classes
no
nvel
correto
de
granularidade
denir
as
interfaces
das
classes
e
hierarquias
de
herana
estabelecer
relaes-chave
entre
eles
MoEvao
ProjeEstas
experimentes
possuem
maior
facilidade
em
construir
projetos
orientados
a
objetos
Razo:
a
experincia
com
projetos
anteriores
leva
a
um
connuo
aperfeioamento
a
parEr
da
reuElizao
de
projetos
bem
sucedidos
Quando
uma
boa
soluo
encontrada,
esta
uElizada
repeEdamente
Padres
de
classes
e
de
comunicao
entre
objetos
que
reaparecem
freqentemente
MoEvao
Padres
existem
em
diferentes
reas
Literatura
O
heri
tragicamente
problemEco
(Macbeth,
Hamlet)
Arquitetura
de
prdios
Qualidade Produto,
Processo
TEORIA!! PRTICA!!
Crise do Software
rqr,
labes-ufpa,
2015
82
Copyright Clenio F. Salviano 1997
Introduo www.labes.ufpa.br
Considerao
Apesar
de
todos
os
avanos
na
tecnologia
de
soCware,
ou
mesmo
por
causa
destes
avanos,
um
problema
bsico
existe:
a
comunicao
entre
pessoas
das
melhores
precas
e
solues
em
Engenharia
de
SoRware
Introduo www.labes.ufpa.br
Padres
de
processo
Denem
solues
para
os
problemas
encontrados
nos
processos
envolvidos
na
engenharia
de
soCware.
Padres
arquiteturais
Expresso
o
esquema
ou
organizao
estrutural
fundamental
de
sistemas
de
soCware
ou
hardware
Padres
de
anlise
descrevem
solues
para
problemas
de
anlise
de
sistemas,
embuEndo
conhecimento
sobre
o
domnio
de
aplicao
especco
(ConEnua...)
rqr,
labes-ufpa,
2015
86
Tipos
de
Padro
www.labes.ufpa.br
Padres
de
projeto
descrevem
solues
para
problemas
de
projeto
de
soCware.
Padres
de
interface
Denem
solues
para
problemas
comuns
no
projeto
de
interfaces
de
sistemas.
Padres
de
programao
descrevem
solues
de
programao
parEculares
de
uma
determinada
linguagem
de
programao
ou
regras
gerais
de
esElo
de
programao.
Padres
de
persistncia
descrevem
solues
para
problemas
de
armazenamento
de
informao
em
arquivos
ou
bancos
de
dados.
(ConEnua...)
rqr,
labes-ufpa,
2015
87
Tipos
de
Padro
www.labes.ufpa.br
Projeto
de
SoCware
Compromisso
com
a
implementao
ReuElizao
Ecincia
Inunciado
pelos
elementos
do
ambiente
de
implementao
Linguagens
de
programao
Sistemas
de
Banco
de
Dados
Histrico
Christopher
Alexander
cada
padro
descreve
um
problema
no
nosso
ambiente
e
o
ncleo
da
sua
soluo,
de
tal
forma
que
voc
possa
usar
esta
soluo
mais
de
um
milho
de
vezes,
sem
nunca
faz-lo
da
mesma
maneira
(1977)
Arquitetura
de
construes
e
cidades
The
Gang
of
Four
(GoF)
Microarquiteturas
de
soCware
Gamma
(ex-Taligent,
autor
de
ET++)
Helm
(IBM
T.J.
Watson
R.C.)
Jonhson
(Smalltalk,
University
of
Illinois)
Vlissides
(IBM
T.J.
Watson
R.C.)
hup://hillside.net/pauerns/DPBook/GOF.html
Introduo www.labes.ufpa.br
Singleton
Classicao:
Granularidade:
de
classe
Propsito:
de
criao
Inteno
GaranEr
que
uma
classe
tenha
somente
uma
instncia
e
fornecer
um
ponto
global
de
acesso
para
a
mesma
Singleton
Moevao
importante
para
algumas
classes
ter
uma,
e
apenas
uma,
instncia.
Por
exemplo,
embora
possam
exisEr
muitas
impressoras
em
um
sistema,
deveria
haver
somente
um
spooler
de
impressoras.
Um
ltro
digital
ter
somente
um
conversor
A/D.
Um
sistema
de
contabilidade
ser
dedicado
a
servir
somente
a
uma
companhia.
Como
garanEmos
que
uma
classe
tenha
somente
uma
instncia
e
que
esta
instncia
seja
facilmente
acessvel?
Uma
varivel
global
torna
um
objeto
acessvel,
mas
no
impede
voc
de
instanciar
mlEplos
objetos
Uma
soluo
melhor
seria
tornar
a
prpria
classe
responsvel
por
manter
o
controle
da
sua
nica
instncia.
A
classe
pode
garanEr
que
nenhuma
outra
instncia
seja
criada
(pela
interceptao
das
solicitaes
para
criao
de
novos
objetos),
bem
como
pode
fornecer
um
meio
para
acessar
sua
nica
instncia.
Este
o
padro
Singleton
rqr,
labes-ufpa,
2015
108
Padres
de
Criao
(GoF)
Singleton
www.labes.ufpa.br
Singleton
Aplicabilidade
Use
o
padro
Singleton
quando
Deve
haver
apenas
uma
instncia
de
uma
classe,
e
essa
instncia
deve
dar
acesso
aos
clientes
atravs
de
um
ponto
bem
conhecido;
Quando
a
nica
instncia
Ever
de
ser
extensvel
atravs
de
subclasses,
possibilitando
aos
clientes
usarem
uma
instncia
estendida
sem
alterar
o
seu
cdigo
<<Singleton>>
Singleton
Conexo
Estrutura
Staec
unicaInstancia
String
login
Date
dataHoraLogin
Singleton
ParEcipantes
Singleton
dene
uma
operao
Instance
que
permite
aos
clientes
acessarem
sua
nica
instncia.
Instance
uma
operao
de
classe
(ou
seja,
em
Smalltalk
um
mtodo
de
classe
e
em
C++
uma
funo-membro
estEca)
O
padro
pode
ser
responsvel
pela
criao
da
sua
prpria
instncia
nica
Colaboraes
Os
clientes
acessam
uma
instncia
Singleton
unicamente
pela
operao
Instance
do
Singleton
Singleton
Conseqncias
Acesso
controlado
instncia
nica.
Porque
a
classe
Singleton
encapsula
a
sua
nica
instncia,
pode
ter
um
controle
total
sobre
como
e
quando
os
clientes
a
acesso
Espao
de
nomes
reduzido.
O
padro
Singleton
representa
uma
melhoria
em
relao
ao
uso
de
variveis
globais.
Ele
evita
a
poluio
do
espao
de
nomes
com
variveis
globais
que
armazenam
instncias
nicas
Permite
o
renamento
de
operaes
e
da
representao.
A
classe
Singleton
pode
ter
subclasses
e
fcil
congurar
uma
aplicao
com
uma
instncia
desta
classe
estendida.
Voc
pode
congurar
a
aplicao
com
uma
instncia
de
classe
de
que
necessita
em
tempo
de
execuo
Singleton
Conseqncias
(cont.)
Permite
um
nmero
varivel
de
instncias.
O
padro
torna
fcil
mudar
de
idia,
permiEndo
mais
de
uma
instncia
da
classe.
Alm
disso,
voc
pode
usar
a
mesma
abordagem
para
controlar
o
nmero
de
instncias
que
a
aplicao
uEliza.
Somente
a
operao
que
permite
acesso
instncia
de
Singleton
necessita
ser
mudada.
Mais
exvel
do
que
operaes
de
classe.
Uma
outra
maneira
de
empacotar
a
funcionalidade
de
um
singleton
usando
operaes
de
classe
(funes-membro
estEcas
em
C++
e
mtodos
de
classe
em
Smalltalk).
Porm,
as
tcnicas
de
ambas
as
linguagens
tornar
dicil
mudar
um
projeto
para
permiEr
mais
que
uma
instncia
de
uma
classe.
Alm
disso,
as
funes-membro
estEcas
em
C++
nunca
so
virtuais,
o
que
signica
que
as
subclasses
no
podem
redeni-las
polimorcamente.
Singleton
Implementao
GaranEndo
uma
nica
instncia.
O
padro
Singleton
torna
a
instncia
nica
uma
instncia
normal
de
uma
classe,
mas
essa
classe
escrita
de
maneira
que
somente
um
objeto
da
classe
possa
ser
criado.
Uma
forma
comum
de
fazer
isso
ocultando
a
operao
que
cria
instncia
usando
uma
operao
de
classe
que
garanta
que
apenas
uma
nica
instncia
seja
criada.
Esta
operao
tem
acesso
varivel
que
mantm
a
nica
instncia,
e
garante
que
a
varivel
seja
inicializada
com
a
instncia
nica
antes
de
retornar
ao
seu
valor.
Esta
abordagem
assegura
que
um
singleton
seja
criado
e
inicializado
antes
de
sua
primeira
uElizao
Singleton
Implementao
GaranEndo
uma
nica
instncia
(cont.)
Em
C++,
voc
pode
denir
a
operao
de
classe
com
uma
funo
membro
estEca
Instance
da
classe
Singleton.
Singleton
tambm
dene
uma
varivel
membro
estEca
_instance
que
contm
um
apontador
para
a
sua
nica
instncia.
class
Singleton
{
public:
staEc
Singleton*
Instance();
protected:
Singleton();
private:
staEc
Singleton*
_instance;
};
Singleton
Implementao
GaranEndo
uma
nica
instncia
(cont.)
A
implementao
correspondente
a
seguinte:
Singleton*
Singleton::_instance
=
0;
Singleton*
Singleton::Instance()
{
if
(_instance
==
0)
{
_instance
=
new
Singleton;
}
return
_instance;
}
Singleton
Exemplo
de
cdigo
Classe
existente:
MazeFactory
Classe
responsvel
pela
criao
de
labirintos
(compostos
por
salas,
paredes
e
portas)
Class
MazeFactory
{
Public:
MazeFactory*
MazeFactory::_instance
=
C
staEc
MazeFactory*
Instance();
//
cdigo
existente
entra
aqui
MazeFactory*
MazeFactory::Instance()
{
Protected:
if
(_instance
==
0)
{
MazeFactory();
_instance
=
new
MazeFactory;
Private:
}
staEc
MazeFactory*
_instance;
return
_instance;
};
}
117
rqr,
labes-ufpa,
2015
Padres
de
Criao
(GoF)
Singleton
www.labes.ufpa.br
Exemplo
Singleton
em
Java
(1
alternaeva)
Denio
Uso
Padres
Estruturais
Preocupam-se
como
sero
criados
os
objetos
para
obteno
de
estruturas
maiores.
UElizam
herana
para
compor
interfaces
ou
implementaes.
Descrevem
maneiras
de
compor
objetos
para
obter
novas
funcionalidades.
Dene
um
estrutura
para
o
comparElhamento
de
objetos.
Exemplo
Faade
(Fachada)
Adapter
(Hage,
2003)
Padro Faade aplicado a uma
classe de um projeto.
rqr,
labes-ufpa,
2015
131
Padres
Estruturais
(GoF)
Fachada
www.labes.ufpa.br
Definio da estrutura da
classe classe Faade,
referenciando operaes public
Vector
getUsuario()throws
SQLExcepEon{
entre objetos.
this.cadusr=new
CadUsuario();
package
noEcia;
Vector
vetUsuario=this.cadusr.getUsuario();
import
java.sql.*;
return
vetUsuario;
import
java.uEl.Vector;
}
public
class
Fachada
{
public
boolean
setUsuario(String
operacao,Usuario
u)
private
String
msg=null;
throws
SQLExcepEon{
private
ResultSet
rs=null;
this.cadusr=new
CadUsuario();
private
CadUsuario
cadusr;
return
(this.cadusr.setUsuario(operacao,
u));
private
CadNoEcia
cadnt;
}
...
public
Fachada()
{
}
rqr,
labes-ufpa,
2015
134
Padres
Estruturais
(GoF)
Fachada
www.labes.ufpa.br
Definio de uma
package noticia;
/**@author Armando Hage */ classe bsica que
abstrai um elemento
public class Usuario { de nossa realidade.
public Usuario() {
}
public CadUsuario() {
this.cadusr=
new CadUsuarioBD();
} public
boolean
setUsuario(String
operacao,Usuario
u)
throws
SQLExcepEon{
String
login=u.getLogin();
String
senha=u.getSenha();
String
nome=u.getNome();
return
(this.cadusr.setUsuario(operacao,login,
senha,
nome));
}
rqr,
labes-ufpa,
2015
137
Padres
Estruturais
(GoF)
Fachada
www.labes.ufpa.br
Faade
2
exemplo
Faade
Gesto
de
emprsEmos
para
compra
de
imveis
Subsistemas
EmprsEmo,
Banco,
Crdito
class
Principal
{
staEc
Faade
void
Main()
2
exemplo
{
//
Facade
Hipoteca
hipoteca
=
new
Hipoteca();
Cliente
cliente
=
new
Cliente("Ann
McKinsey");
bool
elegivel
=
hipoteca.ehElegivel(cliente,125000);
Console.WriteLine("\n"
+
nomeCliente
+
"
foi
"
+
(elegivel
?
"Aprovado"
:
"Rejeitado"));
Console.Read();
}
}
rqr,
labes-ufpa,
2015
139
Padres
Estruturais
(GoF)
Fachada
www.labes.ufpa.br
Faade
2
exemplo
class
Banco
{
public
bool
possuiSaldoSuciente(Cliente
c,
int
quanEa)
{
Console.WriteLine(Vericando
saldo
para
"
+
c.nome);
return
true;
}
}
class
Credito
{
public
bool
possuiBomCredito(Cliente
c)
{
Console.WriteLine(Vericando
crdito
para
"
+
c.nome);
return
true;
}
}
Faade 2 exemplo
class
EmpresEmo
{
public
bool
naoPossuiEmpresEmosEmAtraso(Cliente
c)
{
Console.WriteLine(Vericando
emprsEmos
de
+
c.nome);
return
true;
}
}
Faade 2 exemplo
class
Hipoteca
{
private
Banco
banco
=
new
Banco();
private
EmpresEmo
empresEmo
=
new
EmpresEmo();
private
Credito
credito
=
new
Credito();
Adapter
Converte
a
interface
de
uma
classe
em
outra
interface
que
os
clientes
esperam.
O
padro
Adapter
permite
que
classes
que
no
poderiam
trabalhar
juntas
devido
a
interfaces
incompaveis
trabalhem
juntas.
importante
na
migrao
de
sistemas
legados
Adapter
Estrutura
Adapter
Adapter
a
=
new
...;
requestAlgo(a);
class Target {
public
staEc
void
requestAlgo(Target
t)
{
//Mtodos
//cria
o
adapter
e
faz
a
chamada
public void request() {
t.request()
;
//Implementao normal
}
do mtodo }
}
}
class
Adaptee
{
//Mtodos
public
void
specicRequest()
{
System.out.println(
"Called
SpecicRequest()"
);
}
}
Adapter
State
Classicao
Comportamental
de
Objeto
Propsito
PermiEr
a
um
objeto
alterar
o
seu
comportamento
quanto
o
seu
estado
interno
mudar
O
objeto
ir
aparentar
mudar
de
classe
Tambm
conhecido
como
Objects
for
States
State
ObjeEvo:
usar
objetos
para
representar
estados
e
polimorsmo
para
tornar
transparente
a
execuo
de
tarefas
dependentes
de
estado.
Simula
a
troca
de
classe
de
um
objeto
State: Estrutura
State:
ParEcipantes
Context
Dene
a
interface
de
interesse
para
os
clientes
Mantm
uma
instncia
de
uma
subclasse
ConcreteState
que
dene
o
estado
corrente
State
dene
uma
interface
para
encapsular
o
comportamento
associado
com
um
estado
parEcular
do
contexto
ConcreteState
Implementa
um
comportamento
associado
a
um
estado
do
Context
State: MoEvao
State: exemplo 1
State: exemplo 1
State: exemplo 1
State:
exemplo
2
Classe
com
mtodos
push()
e
pull()
Comportamento
muda
dependendo
do
estado
do
objeto
O
estado
do
objeto
ser
indicado
pela
cor
do
canvas
Estados:
preto,
vermelho,
azul
e
verde
Exemplo
extrado
de
hup://userpages.umbc.edu/~tarr/dp/fall00/cs491.html
rqr,
labes-ufpa,
2015
159
Padres
Comportamentais
www.labes.ufpa.br
Observer
Tambm
conhecido
como
Publish/Subscrib
Usado
para
monitorar
o
estado
de
um
objeto
Observer
-
ParEcipantes
Subject
Classe
abstrata
que
prov
uma
interface
para
anexar
e
desanexar
observadores
(observers).
Possui
uma
lista
privada
de
observers.
Contm
estes
mtodos:
Auach
Adiciona
um
novo
observer
para
a
lista
Detach
Remove
um
observador
existente
NoEfy
NoEca
cada
observer
pela
chamada
a
update()
quando
ocorre
alguma
mudana
Observer
-
ParEcipantes
ConcreteSubject
Esta
classe
prov
o
estado
de
interesse
para
os
observadores.
Tambm
envia
a
noEcao
a
todos
os
observadores
atravs
da
chamada
da
funo
NoEfy
(em
sua
superclasse
ou
classe
bsica
==
classe
Subject).
Contm
a
funo
getState
retorna
o
estado
do
subject
Observer
ParEcipantes
Observer
Esta
classe
dene
uma
interface
de
atualizao
para
todos
os
observers
para
receberem
noEcaes
de
atualizao
do
Subject.
A
classe
Observer
abstrata
Contm
a
funo:
Update
mtodo
abstrato
para
ser
subsEtudo
por
observers
concretos.
Observer
-
ParEcipantes
ConcreteObserver
Classe
cujos
objetos
mantm
referncia
com
ConcreteSubject
para
receber
o
estado
de
um
Subject
quando
uma
noEcao
recebida.
Contm
a
funo
Update
funo
que
herdada
da
superclasse.
Quando
chamada
pelo
Subject,
o
ConcreteObserver
chamada
a
funo
getState
do
Subject
para
atualizar
a
informao
sobre
o
estado
do
Subject.
Hillside.net
Introduo
1
-
Arquitetura
e
Projeto
de
SoCware
2-
EsElos
Arquiteturais
3
-
Padres
de
Projeto
4
-
Eselo
em
Camadas
e
MVC
detalhamento
Exerccios
e
trabalhos
prEcos
Parte
4
Projeto
e
Implementao
do
EsElo
Arquitetural
de
Camadas
e
Model-View-Controller
Agenda
Introduo
Decises
de
projeto
Quais
camadas?
Quantas
camadas?
Exemplos
de
implementao
Introduo
O
esElo
em
camadas
indicado:
Para
se
obter
portabilidade
ou
independncia
com
relao
a
algum
componente
de
soCware
ou
hardware
Para
se
organizar
os
componentes
segundo
o
critrio
da
distncia
do
usurio
Aplicaes
de
n
camadas:
Separa
a
lgica
de
negcio
da
interface
com
o
usurio.
Cada
camada
auto-conEda
o
suciente
de
forma
que
a
aplicao
pode
ser
dividida
em
vrios
computadores
numa
rede
distribuda.
Possibilita
que
vrios
usurios
tenham
acesso
s
mesmas
aplicaes
sem
ter
que
instal-las
em
suas
mquinas.
Torna
os
sistemas
mais
exveis
permiEndo
que
as
partes
possam
ser
alteradas
de
forma
independente
Facilita
a
reuElizao
e
manuteno
Introduo
Variao
mais
conhecida:
3
camadas
Permite
alterar
as
regras
de
negcio,
o
interface
ou
o
acesso
aos
dados
independentemente.
Introduo
Camada:
S
pode
chamar
servios
da
camada
inferior
No
s
um
pacote
de
servios
Deve
haver
correlao
entre
cada
camada
Deve
fornecer
ocultamento
da
informao
no
se
deve
enxergar
o
contedo
de
uma
camada
Deve
permiEr
a
separao
lgica
e
sica
como
os
elementos
internos
das
camadas
so
escondidos
uns
dos
outros
(apenas
a
interface
deve
ser
pblica),
e
h
baixo
acoplamento,
deve
ser
possvel
reErar
ou
subsEtuir
camadas
facilmente
Deve
permiEr
a
mudana
no
nvel
de
abstrao
como
as
camadas
so
hierrquicas
por
natureza,
a
navegao
pela
pilha
de
camadas
deve
aumentar
ou
diminuir
o
nvel
de
abstrao.
Isto
permite
expressar
noes
e
modelos
complexos
com
elementos
simples.
hup://www.rgoarchitects.com/nblog/2008/02/05/TheLayeredArchitectureStyle.aspx
rqr,
labes-ufpa,
2015
191
Projeto
e
Implementao
do
EsElo
Arquitetural
de
Camadas
www.labes.ufpa.br
Introduo
Desvantagens
no
uso
de
Camadas
As
camadas
impactam
na
performance
de
um
sistema
pela
adio
de
latncia
A
diviso
em
muitas
camadas
adiciona
complexidade
para
a
a
soluo
Por
exemplo,
torna
mais
dicil
a
depurao
Metodologia:
IdenEcar
as
caractersEcas
no-funcionais
da
aplicao
Persistncia,
Segurana,
Usabilidade,
etc
Tempo
de
resposta?
Mapear
cada
caractersEca
no-funcional
para
uma
camada
Denir
uma
interface
para
cada
camada
Organizar
em
ordem
decrescente
(em
nvel
de
abstrao
Construir
protEpo
Revisar
Como
protoEpar?
Escolher
um
Caso
de
Uso
completo
e
signicaEvo
e
fazer
todas
as
camadas
Camada
3
CDU
1
EmiEr
relatrio
X
Camada
2
CDU2
Camada
1
CDJ3
Camada 0
Requisitos
no-funcionais
RNFs
so
mapeados
para
camadas.
Camada
3
Tempo
de
resposta
de
CDU
1
transaes
menor
que
5
seg
Camada
2
Portabilidade
para
CDU2
diferentes
SGBDs
Camada
1
CDJ3
Camada
0
Exemplos
Solicitaes
IU
remotas
IU
iPhone
Segurana
Modelo
de
Negcios
Modelo
de
Acesso
Negcios
Acesso
a
base
remoto
local
Acesso
a
base
local
Camadas
do
MVC:
Camada
de
Apresentao
(View)
Inclui
os
elementos
de
exibio
no
cliente:
HTML,
XML,
Applets,
MIDlets.
usada
para
receber
a
entradas
de
dados
e
apresentar
o
resultado.
Camada
de
Lgica
da
Aplicao
(Model)
Modela
os
dados
e
o
comportamento
por
trs
do
processo
de
negcio.
Se
preocupa
apenas
com
o
armazenamento
e
gerao
dos
dados.
Camada
de
Controle
Interpreta
as
aes
do
usurio
e
as
mapeia
para
chamadas
do
modelo.
responsvel
pelo
uxo
da
aplicao.
Sem
o
MVC
Na
primeira
fase
da
evoluo
apenas
eram
produzidas
pginas
em
HTML
estEco
para
mostrar
informaes
estEcas.
Na
prxima
fase
evoluEva,
foram
usadas
tecnologias
de
gerao
dinmica
de
pginas
como
o
CGI,
Servlets
e
JSP.
.NET
MicrosoC
UIP
Maverick.NET
AcEonScript
ARP
PureMVC
Java
JavaServer
Faces
Spring
Framework
Struts
PHP
Zend
Framework
Symfony
Framework
Introduo
1
-
Arquitetura
e
Projeto
de
SoCware
2-
EsElos
Arquiteturais
3
-
Padres
de
Projeto
4
-
EsElo
em
Camadas
e
MVC
detalhamento
Exerccios
e
trabalhos
precos
Parte
5
Avaliao
Final
Tarefa:
Apresentar
a
documentao
para
um
dos
casos
de
uso
da
implementao
do
TCC
da
equipe
Fornecer
a
seguinte
documentao:
Caso
de
Uso
escolhido
(descrio
textual)
Diagrama
de
classes
contendo
os
atributos
e
mtodos
das
classes
envolvidas
com
o
caso
de
uso
Diagrama
de
sequncia
com
as
mensagens
envolvidas
no
caso
de
uso
Entrega:
a
denir
Desc:
Pr: RNF
Ps: Usab.
Fluxo: Conf.
1. Perfor.
2. Seg. Diagrama
com
as
classes
Fl. Sec: envolvidas
com
aquele
Descrio
textual
de
um
caso
de
caso
caso
de
uso
1: gerarContaSesso(s)
2: obter(s)
3: s
4: obterItensConsumidos
5: obterIt ens
: Promoo
6: itens
7: itens
9: nome
10: obterPreo
12: obterQuantidade(item)
13: quantidade
14:
16: conta
17: c onta