Anda di halaman 1dari 210

www.labes.ufpa.

br


PADRES DE PROJETO E
DESENVOLVIMENTO EM CAMADAS
PROF. RODRIGO QUITES REIS


Junho de 2015

rqr, labes-ufpa, 2015 1


Agenda www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 2


www.labes.ufpa.br

Parte 1
Arquitetura e Projeto de SoCware

rqr, labes-ufpa, 2015 3


Introduo www.labes.ufpa.br

Expresses que indicam a adoo de um modelo


arquitetural
Sistemas de 3 Camadas...
Uso do Padro de Projeto X...
...Padro Fachada...
Uso da Arquitetura MVC (Modelo-Viso-Controlador)
...

rqr, labes-ufpa, 2015 4


Arquitetura: o que aprender da
construo civil? www.labes.ufpa.br

Capa de livro
clssico na rea
de Arquitetura de
soCware

rqr, labes-ufpa, 2015 5


Arquitetura: o que aprender da
construo civil? www.labes.ufpa.br

rqr, labes-ufpa, 2015 6


Arquitetura: o que aprender da
construo civil? www.labes.ufpa.br

rqr, labes-ufpa, 2015 7


Arquitetura de SoCware
Amostra www.labes.ufpa.br

ARQUITETURA EM CAMADAS DA EXECUCAO DISTRIBUIDA NO SISTEMA P2Process

O nivel de abstracao cresce de baixo para cima.


No nivel inferior encontram-se os componentes que utilizam diretamente a API JXTA.
No nivel superior esta a interface de execucao de modelos de processos do sistema.

OBS: Dentro de cada pacote h uma descrio breve da funcionalidade de cada camada e componente.

Enactme nt
A

Ge nericDataSource ContractManage ment


B NotificationInterface

DiscoverDataLocation SystemInformationManagement
C

DataChannel MessagesChannel DiscoveryChanne l DataExchange Format


D

Jxta Channels IMPL (Socket, RMI, WebServices, ....)


E
rqr, labes-ufpa, 2015 8
Arquitetura de SoCware
Amostra www.labes.ufpa.br

rqr, labes-ufpa, 2015 9


Arquitetura de SoCware
Amostra www.labes.ufpa.br

under manager finished contract definition / generate contract validation... defined


definition

manager started contract defini...

contract defined and isValid()==...

valid

isValid()==true, because condition has changed to ...

contract defined and isValid()==f...

supplier defines that all activitities are concl...

isValid()==false, becaus e cond ition has chang ed to f...

not valid
finished
rqr, labes-ufpa,
supplier defines2that
015
all activitities are concl... 10
O que Arquitetura de SoCware? www.labes.ufpa.br

A arquitetura de soCware de um programa ou


sistema computacional a estrutura ou estruturas
do sistema que abrange os componentes de
soCware, as propriedades externamente visveis
destes componentes e as relaes entre eles

Bass et al apud Pressman

rqr, labes-ufpa, 2015 11


Por que Arquitetura de SoCware? www.labes.ufpa.br

A arquitetura no soCware operacional. Porm,


permite a um Engenheiro de SoCware:
Analisar a adequao de um projeto no atendimento dos
requisitos estabelecidos
Considerar alternaEvas arquiteturais em um estgio em
que as mudanas do projeto ainda so fceis e baratas
Reduzir os riscos associados com a construo de soCware

rqr, labes-ufpa, 2015 12


Por que Arquitetura de SoCware? www.labes.ufpa.br

Facilitador da comunicao entre os envolvidos com


um sistema
Destaca decises iniciais de projeto que vo ter um
impacto profundo em todo o trabalho de se segue
Modelo relaEvamente pequeno, intelectualmente
inteligvel de como o sistema estruturado e como
seus componentes trabalham em conjunto

rqr, labes-ufpa, 2015 13


Como comear? www.labes.ufpa.br

The image part with


relationship ID rId3
was not found in the
file.

The image part with relationship ID rId3 was not found in the file.

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

1. O projeto no pode ser bitolado


Um bom projeEsta deve considerar abordagens alternaEvas, julgando cada uma com base
nos requisitos do projeto
2. O projeto deve ser relacionvel ao modelo de anlise
Como um nico elemento do projeto pode estar relacionado com vrios requisitos,
necessrios ter recursos para estabelecer como os requisitos so saEsfeitos pelo
projeto
3. O projeto no deve reinventar a roda
Sistemas so construdos usando um conjunto de padres de projeto, muitos dos quais
esto descritos amplamente na literatura. Os padres de componentes COTS devem
ser escolhidos como alternaEva reinveno
4. O projeto deve minimizar a distncia intelectual entre o soRware e o
problema, tal como existe no mundo real
O soCware, sempre que possvel, deve imitar a estrutura do domnio do problema
5. O projeto deve exibir uniformidade e integrao
Um projeto uniforme se parece que uma nica pessoa desenvolveu a coisa toda. Regras
de esElo e formato devem ser denidas para uma equipe de projeto antes que o
trabalho inicie.
Um projeto integrado se houver cuidado na denio de interfaces entre os seus
componentes
rqr, labes-ufpa, 2015 15
Princpios de Projeto (2) www.labes.ufpa.br

6. O projeto deve ser estruturado para acomodar modicao


7. O projeto deve ser estruturado para degradar suavemente, mesmo
quando dados, eventos ou condies de operaes aberrantes so
encontradas
8. Projeto no codicao. Codicao no projeto
Mesmo quando os mais detalhados projetos procedimentais so criados
para os componentes de programa, o nvel de abstrao de projeto maior
que o do cdigo-fonte.
9. O projeto deve ser avaliado quanto qualidade, medida que criado,
no depois do fato
Uma variedade de conceitos e medidas de projeto est disponvel para
auxiliar o projeEsta na avaliao de qualidade.
10. O projeto deve ser revisto para minimizar erros conceituais (semnecos)
A equipe de projeto deve garanEr que os principais elementos conceituais
(omisses, ambigidade e inconsistncia) tenham sido cuidados antes de se
preocupar com a sintaxe do modelo

rqr, labes-ufpa, 2015 16


Princpios de Projeto (3) www.labes.ufpa.br

11. Deve considerar de maneira detalhada o


atendimento aos requisitos no-funcionais
Segurana
Escala
Tempo de resposta
Plataforma operacional
Disponibilidade: 24 x 7
...

rqr, labes-ufpa, 2015 17


www.labes.ufpa.br

Conceitos fundamentais do
projeto de soCware

rqr, labes-ufpa, 2015 18


Conceitos Fundamentais www.labes.ufpa.br

Abstrao - dados, procedimento e controle


Renamento - elaborao dos detalhes de todas as
abstraes
Modularidade - criao de comparEmentos para dados e
funes
Arquitetura - estrutura completa do soCware
Propriedades estruturais
Propriedades Extra-estruturais
EsElos e padres
Procedimento - os algoritmos que fornecem as funes
desejadas
Ocultamento da Informao - interfaces denidas e
controladas

rqr, labes-ufpa, 2015 19


Conceitos Fundamentais www.labes.ufpa.br

Abstrao
Definido como uma estrutura de dados
De dados

porta
fabricante
modelo
tipo
material
peso
mecanismo de abertura
preo

rqr, labes-ufpa, 2015 20


Conceitos Fundamentais www.labes.ufpa.br

Abstrao
Procedimental

abrir

Detalhamento
algortmico

Definido tendo o conhecimento do


do objeto que est associado com Abrir
rqr, labes-ufpa, 2015 21
Conceitos Fundamentais www.labes.ufpa.br

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

The image part with


relationship ID rId3 was
not found in the file.

rqr, labes-ufpa, 2015 23


Conceitos Fundamentais www.labes.ufpa.br

Modularidade

Qual o nmero correto de mdulos


para um projeto de software especfico?
Custo de desenvolvimento de mdulo
custo de
software
module
integration
cost

Quantidade tima Quantidade de mdulos


de mdulos rqr, labes-ufpa, 2015 24
Conceitos Fundamentais www.labes.ufpa.br

Modularidade

Qual o tamanho correto dos mdulos?


What's How big
inside?? is it??

MODULE

rqr, labes-ufpa, 2015 25


Conceitos Fundamentais www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 26


Conceitos Fundamentais www.labes.ufpa.br

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)

rqr, labes-ufpa, 2015 27


Conceitos Fundamentais www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 28


Conceitos Fundamentais www.labes.ufpa.br

Exerccio

rqr, labes-ufpa, 2015 29


Conceitos Fundamentais www.labes.ufpa.br

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)

rqr, labes-ufpa, 2015 30


Conceitos Fundamentais www.labes.ufpa.br

rqr, labes-ufpa, 2015 31


Conceitos Fundamentais www.labes.ufpa.br

Arquitetura
The overall structure of the software and the
ways in which that structure provides
conceptual integrity for a system. [SHA95a]

Propriedades Estruturais. Este aspecto da representao de projeto


arquitetural define os componentes de um sistema (e.g., mdulos, objetos,
filtros) e a maneira pela qual estes componentes so empacotados e interagem
entre si.

Propriedades No-Funcionais. A descrio do projeto arquitetural deve tratar


como a arquitetura atende os requisitos de performance, capacidade,
capacidade, segurana, adaptao e outras caractersticas do sistema

Famlias de sistemas relacionados. O projeto arquitetural deve ser baseado


em reutilizao e reutilizvel
rqr, labes-ufpa, 2015 32
Conceitos Fundamentais www.labes.ufpa.br

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"

rqr, labes-ufpa, 2015 33


Deciso especfica de projeto
Conceitos Fundamentais www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 34


Agenda www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 35


www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 36


Referncias bibliogrcas www.labes.ufpa.br

rqr, labes-ufpa, 2015 37


EsElos Arquiteturais www.labes.ufpa.br

Arquitetura = Componentes
+
Conectores

rqr, labes-ufpa, 2015 38


EsElos Arquiteturais www.labes.ufpa.br

Arquitetura composta de:


Subsistemas ou componentes
Responsveis pelo comportamento do sistema
Exemplos:
Carrinho de compras, gestor de transaes concorrentes, banco de
dados
Padres de Conexo
Possibilitando vrios Epos de interao e comparElhamento de
informao entre esses componentes
Exemplos:
Chamadas de mtodos, consultas SQL, requisies HTTP

rqr, labes-ufpa, 2015 39


EsElos Arquiteturais www.labes.ufpa.br

Cada esElo descreve uma categoria de sistemas que


engloba:
Um conjunto de componentes (um banco de dados,
mdulos de interface) que realiza uma funo requerida
pelo sistema
Um conjunto de conectores que fornecem comunicao,
coordenao e cooperao entre os componentes
Restries que denem como os componentes podem ser
integrados para compor um sistema
Modelos semnecos que permitem ao projeEsta entender
as propriedades gerais do sistema pela anlise das
propriedades conhecidas de suas partes

rqr, labes-ufpa, 2015 40


EsElos Arquiteturais www.labes.ufpa.br

Pipes & Filters


Chamada e Retorno
Orientadas a Objeto
Camadas
Centrada em Dados
Invocao implcita

rqr, labes-ufpa, 2015 41


EsElos Arquiteturais www.labes.ufpa.br

Centradas em Fluxo de dados ou Pipes and Filters

Considera uma rede pela qual ui


dados de uma extremidade (origem)
outra (desEno)

Exemplo: sistemas workow

rqr, labes-ufpa, 2015 42


EsElos Arquiteturais www.labes.ufpa.br

Centradas em Fluxo de dados ou Pipes and Filters:


Aplicao em compiladores (1)

1 gerao)
Anlise Anlise Gerao de
Anlise Lxica OEmizao
SintEca SemnEca cdigo

2 gerao) Cdigo intermedirio para atender portabilidade entre plataformas


Funo de anlise Funo de sntese
Anlise Anlise Gerao de
Anlise Lxica Otimizao
Sinttica Semntica cdigo

Gerao de
Cdigo
rqr, labes-ufpa, 2015 Intermedirio 43
EsElos Arquiteturais www.labes.ufpa.br

Pipes and Filters: Compiladores (2)


Gerao de
Integrao com editores e Cdigo
outras ferramentas Intermedirio

Anlise Anlise Gerao de


Anlise Lxica OEmizao
SintEca SemnEca cdigo

Tabela de smbolos de
estrutura sintEca

Outras
editor
rqr, labes-ufpa, 2015 44
ferramentas
www.labes.ufpa.br

DTE com seqncia de estados


e aes para TCC1 e TCC2.
rqr, labes-ufpa, 2015 (CBCC) 45
EsElos Arquiteturais www.labes.ufpa.br

Pipes & Filters


Chamada e Retorno
Orientadas a Objeto
Camadas
Centrada em Dados
Invocao implcita

rqr, labes-ufpa, 2015 46


EsElos Arquiteturais www.labes.ufpa.br

Chamada e Retorno
Estrutura relaEvamente fcil de ampliar e mudar
SubesElos:
Programa Principal/Subprograma
Chamada de Procedimentos Remotos (SD)

Exemplo: middleware para


programao distribuda

rqr, labes-ufpa, 2015 47


EsElos Arquiteturais www.labes.ufpa.br

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

Pipes & Filters


Chamada e Retorno
Orientadas a Objeto
Camadas
Centrada em Dados
Invocao implcita

rqr, labes-ufpa, 2015 49


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)

Tela Ins ero 3: comp


Computador
8: computador inserido 4: recuperar(loja)
: Atendente 6: inserir(comp)

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

rqr, labes-ufpa, 2015 51


EsElos Arquiteturais www.labes.ufpa.br

Orientado a Objetos
Mensagem
Comunicao entre obj1 e obj2 ()
obj2.msg(); // executada no contexto de obj1
DesEnatrio explicitamente declarado (ruim)

rqr, labes-ufpa, 2015 52


EsElos Arquiteturais www.labes.ufpa.br

Controlador : : Jogo : OcorrnciasJogoEquipe


: Usurio Relatrios Equipe
1: obterGolsAno
2: obterEquipes( )
3: equipes
4: equipes
5: obterQuantidadeGols(equipe, ano)
6: obterJogos(Equipe, ano)
7: jogosEquipeAno
repetir enquanto houver jogosEquipeAno
8: obterGols(Equipe, Jogo)
9: quantidadeGols
10: totalGols

rqr, labes-ufpa, 2015 53


EsElos Arquiteturais www.labes.ufpa.br

Orientado a Objetos
Interfaces
Representam responsabilidades em alto nvel de abstrao
Baixo acoplamento baixo: classes no se conhecem
Facilita a manuteno

rqr, labes-ufpa, 2015 54


EsElos Arquiteturais www.labes.ufpa.br

Orientado a Objetos
Interface

rqr, labes-ufpa, 2015 55


EsElos Arquiteturais www.labes.ufpa.br

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).

rqr, labes-ufpa, 2015 56


EsElos Arquiteturais www.labes.ufpa.br

Orientado a Objetos
Possibilita (todos) os esElos arquitetnicos descritos

rqr, labes-ufpa, 2015 57


EsElos Arquiteturais www.labes.ufpa.br

Pipes & Filters


Chamada e Retorno
Orientadas a Objeto
Camadas
Centrada em Dados
Invocao implcita

rqr, labes-ufpa, 2015 58


EsElos Arquiteturais www.labes.ufpa.br

Camadas
Inspirado em
Sistemas
Operacionais
UElizado hoje para
segmentar IU, Lgica
da aplicao, e BD
(normalmente)

rqr, labes-ufpa, 2015 59


EsElos Arquiteturais www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 62


EsElos Arquiteturais www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 64


EsElos Arquiteturais www.labes.ufpa.br

Pipes & Filters


Chamada e Retorno
Orientadas a Objeto
Camadas
Centrada em Dados
Invocao implcita

rqr, labes-ufpa, 2015 65


EsElos Arquiteturais www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 66


EsElos Arquiteturais www.labes.ufpa.br

Centradas em Dados - Repositrio


Acesso a um repositrio com dados comuns para os clientes
Componentes-clientes podem ser modicados ou adicionados sem
preocupao com os outros

SoCware do SoCware do
cliente cliente

Repositrio
de dados SoCware do
SoCware do cliente
cliente

SoCware do
cliente

rqr, labes-ufpa, 2015 67


EsElos Arquiteturais www.labes.ufpa.br

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.

rqr, labes-ufpa, 2015 68


EsElos Arquiteturais www.labes.ufpa.br

Pipes & Filters


Chamada e Retorno
Orientadas a Objeto
Camadas
Centrada em Dados
Invocao implcita

rqr, labes-ufpa, 2015 69


EsElos Arquiteturais www.labes.ufpa.br

Invocao Implcita (baseada em eventos)


ObjeEvo principal: baixo acoplamento
Funcionamento:
Ao invs de invocar um procedimento diretamente, um
componente pode anunciar um ou mais eventos
Outros componentes registram o interesse no evento
Quando um evento anunciado, o sistema por si s invoca os
procedimentos registrados pelo evento.
Portanto, um evento implicitamente causa a invocao de
procedimentos em diversos outros mdulos

rqr, labes-ufpa, 2015 70


EsElos Arquiteturais www.labes.ufpa.br

Invocao
Implcita

rqr, labes-ufpa, 2015 71


EsElos Arquiteturais www.labes.ufpa.br

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.

rqr, labes-ufpa, 2015 72


EsElos Arquiteturais www.labes.ufpa.br

Invocao implcita
Exemplo: framework
Fluxo de controle determinado pelo framework
O cdigo do framework invoca o cdigo adicionado

Framework Fluxo de Controle

Cdigo do usurio

rqr, labes-ufpa, 2015 73


EsElos Arquiteturais www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 75


Agenda www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 76


www.labes.ufpa.br

Parte 3
Padres de Projeto

rqr, labes-ufpa, 2015 77


Agenda www.labes.ufpa.br

Histrico
Autores Importantes
Linguagem para denio de Padres de Projeto
Padres de Gamma (GoF)
Outros Epos de Padres de Projeto

rqr, labes-ufpa, 2015 78


Introduo www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 79


Introduo www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 80


Introduo www.labes.ufpa.br

MoEvao
Padres existem em diferentes reas
Literatura
O heri tragicamente problemEco (Macbeth, Hamlet)
Arquitetura de prdios

rqr, labes-ufpa, 2015 81


Copyright Clenio F. Salviano 1997
Introduo www.labes.ufpa.br

Silver Bullet Engenharia


de Software

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

rqr, labes-ufpa, 2015 83


Copyright Clenio F. Salviano 1997

Introduo www.labes.ufpa.br

Conhecimento de Pessoas Experientes


intangvel e muita valioso
Principais Fatores para: [Capers Jones 96]
Sucesso: Gerentes e Tcnicos Experientes
Fracasso: Gerentes e Tcnicos Inexperientes
Experincia adquirida lentamente, como resultado de
trabalho duro e persistente
Como este conhecimento organizado?
Capturar, comunicar e assimilar
elementos deste conhecimento dincil

rqr, labes-ufpa, 2015 84


Introduo www.labes.ufpa.br

A estruturao de um sistema em subsistemas ajuda


a reduzir a complexidade
Minimiza a comunicao e dependncias entre
subsistemas
A adoo de padres pode
tornar mais fcil reuElizar projetos e arquiteturas bem-
sucedidas.
ajudar na escolha de alternaEvas de projeto que tornam
um sistema mais reuElizvel e a evitar alternaEvas que
comprometam a uElizao.

rqr, labes-ufpa, 2015 85


Tipos de padres 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

Padres para hipertextos


descrevem solues para problemas encontrados no
projeto de hipertextos.
Padres para hipermdia
descrevem solues para problemas encontrados no
desenvolvimento de aplicaes mulEmdia
...

rqr, labes-ufpa, 2015 88


AnE Padres www.labes.ufpa.br

Os anE-padres podem ser de dois Epos:


Aqueles que descrevem uma soluo ruim para um
problema que resultou em uma situao ruim.
Aqueles que descrevem como evitar uma situao ruim e
como proceder para, a parEr dela, aEngir uma boa
soluo.

rqr, labes-ufpa, 2015 89


Introduo www.labes.ufpa.br

O que um padro de projeto (design paGern)?


Um padro de projeto sistemaEcamente nomeia, explica e
avalia um projeto importante e recorrente em sistemas
orientados a objetos
Descrio de moldes para a(s) (micro-) arquitetura(s) de
soRware
Captura a experincia de projeto de uma forma que as
pessoas us-la efeEvamente
Documentao em forma de catlogo
Um padro de projeto encapsula uma tcnica testada e
aprovada

rqr, labes-ufpa, 2015 90


Introduo 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

rqr, labes-ufpa, 2015 91


Introduo www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 92


http://hillside.net/patterns/DPBook/DPBook.html

Introduo www.labes.ufpa.br

rqr, labes-ufpa, 2015 93


Padres de Projeto GoF www.labes.ufpa.br

Contexto, Problema, Foras e Soluo


Contexto: Voc tem bastante experincia prEca na
sua rea. Voc tem notado que uEliza certas solues para
problemas que ocorrem commumente. Voc gostaria de
comparElhar sua experincia com outros
Problema: Como comparElhar esta soluo de
problemas recorrentes com outros para que ela possa ser
reuElizada?

rqr, labes-ufpa, 2015 94


Denio www.labes.ufpa.br

Contexto, Problema, Foras e Soluo


Foras:
Manter a soluo com voc no requer esforo
ComparElhar verbalmente ajuda somente alguns
Escrever a soluo dicil e requer refexo
Transforma-la de especca em geral dicil
As pessoas no devem uEliza-la se no entenderem as razes
sobre porque uEliza-la
Escrever as solues talvez atrapalhe seu negcio

rqr, labes-ufpa, 2015 95


Denio www.labes.ufpa.br

Contexto, Problema, Foras e Soluo


Soluo: Escreva a soluo na forma de um pauern.
Capture ambos o problema e a soluo, e tambm as
razes porque (e onde) a soluo aplicvel. Apresente os
Elementos Obrigatrios para garanEr que as informaes
necessrias esto comunicadas de forma clara. Distribua o
pauern para grandes audincias, que no compremeta seu
negcio. s vezes publique o pauern apenas
internamente.

rqr, labes-ufpa, 2015 96


Denio www.labes.ufpa.br

Onde encontrar pauerns?


Livro GoF: 23 padres
hup://www.hillside.net/pauerns/
Padres para Java
hup://java.sun.com/blueprints/pauerns/index.html
Padres para Delphi:
hup://www.obsof.com/delphi_Eps/pauern.html
...

rqr, labes-ufpa, 2015 97


Denio www.labes.ufpa.br

Elementos essenciais na denio de um


padro
Nome
Problema
Soluo
Conseqncias

rqr, labes-ufpa, 2015 98


Denio www.labes.ufpa.br

Elementos essenciais na denio de um padro


Nome
Referncia para descrio de um problema de projeto, suas
solues e conseqncias em uma ou duas palavras
Dar nome a um padro aumenta imediatamente o vocabulrio de
projeto

rqr, labes-ufpa, 2015 99


Denio www.labes.ufpa.br

Elementos essenciais na denio de um padro


Problema
Descreve quando aplicar um problema
Explica o problema e seu contexto
Estruturas de classe
Lista de condies que devem ser saEsfeitas para que faa senEdo
aplicar o padro

rqr, labes-ufpa, 2015 100


Denio www.labes.ufpa.br

Elementos essenciais na denio de um padro


Soluo
Descreve os elementos que compem o projeto, seus
relacionamentos, suas responsabilidades e colaboraes
Arranjo geral de elementos que resolvem um problema
Uso de UML para descrio de solues

rqr, labes-ufpa, 2015 101


Denio www.labes.ufpa.br

Elementos essenciais na denio de um padro


Conseqncias
Anlise crEca do padro fornecido, incluindo vantagens,
desvantagens e limitaes
Elementos que inuenciam decisivamente na escolha de um
padro como soluo para um problema

rqr, labes-ufpa, 2015 102


Denio www.labes.ufpa.br

Descrio completa de um padro de projeto (Gamma et al)


Nome e classicao do padro
Inteno e ObjeEvo
Tambm conhecido como
MoEvao
Aplicabilidade
Estrutura (UML)
ParEcipantes
Colaboraes
Conseqncias
Implementao
Exemplo de cdigo
Usos conhecidos
Padres relacionados

rqr, labes-ufpa, 2015 103


Padres de Projeto (GoF) www.labes.ufpa.br

Organizao do Catlogo de Gamma et al


23 padres de projeto so propostos
Padres orientados para SmallTalk e C++
Para permiEr a reuElizao fundamental que o projeEsta consiga
localizar facilmente o padro que seja El
Padres de projeto variam quanto
Granularidade
Classe
Objeto
Propsito
De criao
Estrutural
Comportamental

rqr, labes-ufpa, 2015 104


Catlogo de Padres (GoF) www.labes.ufpa.br

rqr, labes-ufpa, 2015 105


Padres de Criao (GoF) www.labes.ufpa.br

Os padres de criao abstraem o processo de


instanciao. Eles ajudam a tornar um sistema
independente de como seus objetos so criados,
compostos e representados.

Os padres de criao se tornam mais importantes


medida que os sistemas evoluem no senEdo de
depender mais da composio de objetos do que da
herana de classes

rqr, labes-ufpa, 2015 106


Padres de Criao (GoF)
Singleton 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

rqr, labes-ufpa, 2015 107


Padres de Criao (GoF)
Singleton www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 109


Padres de Criao (GoF)
Singleton www.labes.ufpa.br

<<Singleton>>
Singleton Conexo
Estrutura Staec unicaInstancia
String login
Date dataHoraLogin

Singleton Staec instance()


...
static uniqueInstance
singletonData
return uniqueInstance
static Instance()
singletonOperation()
getSingletonData()
rqr, labes-ufpa, 2015 110
Padres de Criao (GoF)
Singleton www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 111


Padres de Criao (GoF)
Singleton www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 112


Padres de Criao (GoF)
Singleton www.labes.ufpa.br

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.

rqr, labes-ufpa, 2015 113


Padres de Criao (GoF)
Singleton www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 114


Padres de Criao (GoF)
Singleton www.labes.ufpa.br

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;
};

rqr, labes-ufpa, 2015 115


Padres de Criao (GoF)
Singleton www.labes.ufpa.br

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;
}

Os clientes acessam o singleton atravs da funo membro Instance

rqr, labes-ufpa, 2015 116


Padres de Criao (GoF)
Singleton www.labes.ufpa.br

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

Singleton em Java (1 alternaeva)


Pode uElizar excees para manipular com tentaEvas de
criao de uma segunda instncia da classe
hup://www.pauerndepot.com/put/8/Singleton.PDF

rqr, labes-ufpa, 2015 118


Padres de Criao (GoF)
Singleton www.labes.ufpa.br

Singleton em Java (1 alternaeva)


Denio de uma varivel estEca para determinar se uma
instncia foi criada

rqr, labes-ufpa, 2015 119


Padres de Criao (GoF)
Singleton www.labes.ufpa.br

Singleton em Java (1 alternaeva)


Gerao de excees especcas quando da solicitao de
criao de uma nova instncia

rqr, labes-ufpa, 2015 120


Padres de Criao (GoF)
Singleton www.labes.ufpa.br

Exemplo
Singleton em Java (1 alternaeva)

rqr, labes-ufpa, 2015 121


Padres de Criao (GoF)
Singleton www.labes.ufpa.br

Resultado rqr, labes-ufpa, 2015 122


Padres de Criao (GoF)
Singleton www.labes.ufpa.br

Singleton em Java (2 alternaeva)


Denir a classe como Final e seus mtodos estEcos
Anlogo soluo adotada pela classe Math
Math empacota funes matemEcas como sin e cos em uma
estrutura similar a uma classe
Java no permite funes que no estejam atreladas mtodos

rqr, labes-ufpa, 2015 123


Padres de Criao (GoF)
Singleton www.labes.ufpa.br

Singleton em Java (2 alternaeva)

Denio

Uso

rqr, labes-ufpa, 2015 124


Padres de Criao (GoF)
Singleton www.labes.ufpa.br

Singleton em Java (3 alternaeva)


rqr, labes-ufpa, 2015 125


Padres de Criao (GoF)
Singleton www.labes.ufpa.br

Singleton em Java (3 alternaeva)


Teste

rqr, labes-ufpa, 2015 126


Padres de Criao (GoF)
Singleton www.labes.ufpa.br

Singleton em Java (3 alternaeva)


Vantagens:
No necessita tratamento de excees
Se h um erro, retorna null.
O compilador verica a criao de objetos atravs de null

rqr, labes-ufpa, 2015 127


Padres Estruturais (GoF) www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 128


Padres Estruturais (GoF)
Fachada www.labes.ufpa.br

A inteno do padro faade


prover uma interface nica para
um conjunto de interfaces de um
subsistema.

Torna a aplicao mais fcil j que


toda a comunicao entre as
classes ocorre a parEr de uma
nica interface. Faade

rqr, labes-ufpa, 2015 129


Padres Estruturais (GoF)
Fachada www.labes.ufpa.br

Quando uElizar o Faade?


Quando se deseja construir um interface mais simples de
acesso s classes;
Para tornar o sistema mais reuElizvel;
Para encapsular o acesso aos dados de SGBD.

rqr, labes-ufpa, 2015 130


Padres Estruturais (GoF)
Fachada www.labes.ufpa.br

Exemplo: Uma nica interface denida para


comunicao com o banco de dados.

(Hage, 2003)
Padro Faade aplicado a uma
classe de um projeto.
rqr, labes-ufpa, 2015 131
Padres Estruturais (GoF)
Fachada www.labes.ufpa.br

Consideraes sobre implementao


Reduo do acoplamento do cliente-subsistema.
Ocorre tornando o Faade uma classe abstrata com
subclasses concretas.
Classe de subsistemas: pblicas ou privadas?
A classe Faade deve ser pblica.
As classes envolvidas no processo podem ser privadas,
mas por conveno de padronizao independente de
linguagem de programao podem/devem ser pblicas.

rqr, labes-ufpa, 2015 132


Padres Estruturais (GoF)
Fachada www.labes.ufpa.br

rqr, labes-ufpa, 2015 133


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

public Vector getNoticia()throws SQLException{ Definio da estrutura da


this.cadnt=new CadNoticia(); classe Faade,
Vector vetNoticia= new Vector();
vetNoticia=this.cadnt.getNoticia(); referenciando operaes
return vetNoticia; entre objetos.
}

public Noticia getNoticia(int id_noticia)throws SQLException{


this.cadnt=new CadNoticia();
Noticia n= new Noticia();
n=this.cadnt.getNoticia(id_noticia);
return n;
}

public boolean setNoticia(String operacao,Noticia n)throws


SQLException{
this.cadnt=new CadNoticia();
return this.cadnt.setNoticia(operacao, n)
}
...

rqr, labes-ufpa, 2015 135


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 Usuario(String login, String senha,String nome){


this.login=login;
this.senha=senha;
this.nome=nome;
}
/**Mtodo para retornar o login de usurio
* @return login*/
public String getLogin(){ return login; }
... rqr, labes-ufpa, 2015 136
Padres Estruturais (GoF)
Fachada www.labes.ufpa.br

package noticia; Definio da classe CadUsuario que tem


import java.util.*; como funes:
import java.sql.*;
import java.lang.*; Recuperar os atributos de um objeto para
repassar a classe de comunicao com o
public class CadUsuario{ banco de dados
private ResultSet rs=null;
private CadUsuarioBD cadusr; Construir uma coleo de objetos ou um
private Usuario u; objeto.
private String msg=null;

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

rqr, labes-ufpa, 2015 138


Padres Estruturais (GoF)
Fachada www.labes.ufpa.br

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;
}
}

rqr, labes-ufpa, 2015 140


www.labes.ufpa.br

class Credito {
public bool possuiBomCredito(Cliente c)
{
Console.WriteLine(Vericando crdito para " + c.nome);
return true;
}
}

rqr, labes-ufpa, 2015 141


Padres Estruturais (GoF)
Fachada www.labes.ufpa.br

Faade 2 exemplo

class EmpresEmo
{
public bool naoPossuiEmpresEmosEmAtraso(Cliente c)
{
Console.WriteLine(Vericando emprsEmos
de + c.nome);
return true;
}
}

rqr, labes-ufpa, 2015 142


www.labes.ufpa.br

public Cliente(string nome)


{
this.nome = nome;
}
}

rqr, labes-ufpa, 2015 143


Padres Estruturais (GoF) www.labes.ufpa.br

Faade 2 exemplo

class Hipoteca
{
private Banco banco = new Banco();
private EmpresEmo empresEmo = new EmpresEmo();
private Credito credito = new Credito();

rqr, labes-ufpa, 2015 144


www.labes.ufpa.br

public bool ehElegivel(Cliente c, int quanEa)


{
Console.WriteLine("{0} aplica para {1:C} empresEmo\n",
c.name, quanEa);

bool elegivel = true;

elegivel = bank.possuiSaldoSuciente(c, quanEa) &&
empresEmo.naoPossuiEmpresEmosEmAtraso(c) &&
credito.possuiBomCredito(c);
return elegivel; } .
rqr, labes-ufpa, 2015 145
Padres Estruturais (GoF) www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 146


Padres Estruturais (GoF) www.labes.ufpa.br

Adapter
Estrutura

rqr, labes-ufpa, 2015 147


Padres Estruturais (GoF) www.labes.ufpa.br

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()" );
}
}

rqr, labes-ufpa, 2015 148


Padres Estruturais (GoF) www.labes.ufpa.br

Adapter

class Adapter extends Target {


//Propriedades
private Adaptee adaptee = new Adaptee() ;
//Mtodos
public void request() {
/* * Provavelmente neste mtodo sero feitas algumas
* manipulaes de dados e ento efetuar a chamada
* especca */
adaptee.specicRequest() ; }
}

rqr, labes-ufpa, 2015 149


Padres Comportamentais www.labes.ufpa.br

Padres que denem a dinmica do funcionamento


Envolvem troca de mensagens
Exemplos mostrados aqui:
State
Observer

rqr, labes-ufpa, 2015 150


Padres Comportamentais www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 151


Padres Comportamentais www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 152


Padres Comportamentais www.labes.ufpa.br

State: Estrutura

rqr, labes-ufpa, 2015 153


Padres Comportamentais www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 154


Padres Comportamentais www.labes.ufpa.br

State: MoEvao

rqr, labes-ufpa, 2015 155


Padres Comportamentais www.labes.ufpa.br

State: exemplo 1

rqr, labes-ufpa, 2015 156


Padres Comportamentais www.labes.ufpa.br

State: exemplo 1

rqr, labes-ufpa, 2015 157


Padres Comportamentais www.labes.ufpa.br

State: exemplo 1

rqr, labes-ufpa, 2015 158


Padres Comportamentais www.labes.ufpa.br

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

State: exemplo 2 implementao sem padro de


projeto

rqr, labes-ufpa, 2015 160


www.labes.ufpa.br

rqr, labes-ufpa, 2015 161


Padres Comportamentais www.labes.ufpa.br

rqr, labes-ufpa, 2015 162


Padres Comportamentais www.labes.ufpa.br

rqr, labes-ufpa, 2015 163


Padres Comportamentais www.labes.ufpa.br

rqr, labes-ufpa, 2015 164


Padres Comportamentais www.labes.ufpa.br

rqr, labes-ufpa, 2015 165


Padres Comportamentais www.labes.ufpa.br

rqr, labes-ufpa, 2015 166


Padres Comportamentais www.labes.ufpa.br

rqr, labes-ufpa, 2015 167


Padres Comportamentais www.labes.ufpa.br

rqr, labes-ufpa, 2015 168


Padres Comportamentais www.labes.ufpa.br

rqr, labes-ufpa, 2015 169


Padres Comportamentais www.labes.ufpa.br

Aspectos de Implementao Padro State


Quem dene as transies de estado?
A classe Context ok para situaes simples
As classes ConcreteState geralmente mais exvel, mas
causa dependncia entre as classes de ConcreteState
Quando os objetos de ConcreteState so criados?
Quando necessrio
Todos so criados uma nica vez (singleton)
No seria possvel usar apenas uma tabela Estado-
Transio?
Dicil de entender
Diculdade em adicionar novas aes e comportamento

rqr, labes-ufpa, 2015 170


Padres Comportamentais www.labes.ufpa.br

Observer
Tambm conhecido como Publish/Subscrib
Usado para monitorar o estado de um objeto

rqr, labes-ufpa, 2015 171


Padres Comportamentais www.labes.ufpa.br

rqr, labes-ufpa, 2015 172


Padres Comportamentais www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 173


Padres Comportamentais www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 174


Padres Comportamentais www.labes.ufpa.br

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.

rqr, labes-ufpa, 2015 175


Padres Comportamentais www.labes.ufpa.br

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.

rqr, labes-ufpa, 2015 176


Padres de Projeto com
RaEonal Rose www.labes.ufpa.br

rqr, labes-ufpa, 2015 177


Padres GoF: Viso Geral www.labes.ufpa.br

rqr, labes-ufpa, 2015 178


Referncias adicionais www.labes.ufpa.br

Salviano, Clenio. Introduo SoCware Pauerns.


Tutorial SBES97
Cp://st.cs.uiuc.edu/pub/pauerns/presentaEons/
nswpau.zip

Hillside.net

Outros catlogos de padres:


Core J2EE Pauerns DAO
hup://java.sun.com/blueprints/corej2eepauerns/Pauerns/
DataAccessObject.html

rqr, labes-ufpa, 2015 179


1a parte da Avaliao www.labes.ufpa.br

5 pontos da avaliao total


Fornecer a implementao de trs padres de projeto
uElizados no projeto de TCC do curso
1 deve ser comportamental
1 deve ser estrutural
1 deve ser de criao
Deve ser entregue Relatrio contendo:
Documentao UML (estrutura do padro e da implementao)
Explicao e jusEcaEva do uso
Cdigo fonte da implementao

rqr, labes-ufpa, 2015 180


Agenda www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 181


www.labes.ufpa.br

Parte 4
Projeto e Implementao do EsElo Arquitetural
de Camadas e Model-View-Controller

(Contm trechos Adaptados de Padro Arquitetural MVC e suas


aplicaes para Web por Rafael M
rqr, endona
labes-ufpa, 2F rana / DCOMP UFS)
015 182
Projeto e Implementao do EsElo
Arquitetural de Camadas www.labes.ufpa.br

Agenda
Introduo
Decises de projeto
Quais camadas?
Quantas camadas?
Exemplos de implementao

rqr, labes-ufpa, 2015 183


Projeto e Implementao do EsElo
Arquitetural de Camadas www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 184


Projeto e Implementao do EsElo
Arquitetural de Camadas www.labes.ufpa.br

A luta pela qualidade no SoCware vem produzindo


h tempos padres e tcnicas para construo de
sistemas com menos defeitos e de manuteno mais
fcil e simples.
O uso de camadas um padro arquitetural que
ajuda na tarefa de separar responsabilidades,
promovendo baixo acoplamento e alta coeso

rqr, labes-ufpa, 2015 185


Projeto e Implementao do EsElo
Arquitetural de Camadas www.labes.ufpa.br

Aplicaes de uma camada:


AnEgamente um aplicaEvo era desenvolvido para ser
usado em uma nica mquina.
Esse aplicaEvo conEnha todas as funcionalidades em um
nico mdulo gerado por uma grande quanEdade de
linhas de cdigo e de manuteno nada fcil.
A entrada do usurio, vericao, lgica de negcio e
acesso a banco de dados estavam presentes em um
mesmo lugar.

rqr, labes-ufpa, 2015 186


Projeto e Implementao do EsElo
Arquitetural de Camadas www.labes.ufpa.br

Aplicaes de duas camadas:


Surgiram com a necessidade de comparElhar a lgica de
acesso a dados.
A base de dados geralmente colocada em uma mquina
especca
AplicaEvos instalados em estaes clientes contendo toda
a lgica da aplicao
Grande problema com o gerenciamento de verses.

rqr, labes-ufpa, 2015 187


Projeto e Implementao do EsElo
Arquitetural de Camadas www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 188


Projeto e Implementao do EsElo
Arquitetural de Camadas www.labes.ufpa.br

Introduo
Variao mais conhecida: 3 camadas
Permite alterar as regras de negcio, o interface ou o acesso aos
dados independentemente.

rqr, labes-ufpa, 2015 189


www.labes.ufpa.br

rqr, labes-ufpa, 2015 190


Projeto e Implementao do EsElo
Arquitetural de Camadas www.labes.ufpa.br

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

Conexes entre camadas


Denida atravs de:
Interfaces ou
PaGern Faade + PaGern Singleton

rqr, labes-ufpa, 2015 192


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

rqr, labes-ufpa, 2015 193


Projeto e Implementao do EsElo
Arquitetural de Camadas www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 194


Projeto e Implementao do EsElo
Arquitetural de Camadas www.labes.ufpa.br

Como protoEpar?
Escolher um Caso de Uso completo e signicaEvo e fazer
todas as camadas

Por que protoEpar?


Avaliar o tempo de resposta
Avaliar se as camadas se encaixam corretamente

rqr, labes-ufpa, 2015 195


Projeto e Implementao do EsElo
Arquitetural de Camadas www.labes.ufpa.br

Manter rastreabilidade dos Requisitos para


componentes
Recorte verEcal (pode ser
um protEpo)

Camada 3
CDU 1
EmiEr relatrio X


Camada 2
CDU2

Camada 1
CDJ3

Camada 0

rqr, labes-ufpa, 2015 196


Projeto e Implementao do EsElo
Arquitetural de Camadas www.labes.ufpa.br

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

(NOVA) Camada Persistncia

rqr, labes-ufpa, 2015 197


Projeto e Implementao do EsElo
Arquitetural de Camadas www.labes.ufpa.br

Exemplos

Solicitaes
IU remotas

IU iPhone
Segurana
Modelo de
Negcios
Modelo de
Acesso Negcios
Acesso
a base
remoto
local
Acesso a base local

rqr, labes-ufpa, 2015 198


Padro MVC. Model-View-
Controller www.labes.ufpa.br

um padro arquitetural que divide as aplicaes


em 3 camadas independentes.
Permite que um mesmo aplicaEvo possa ser
visualizado atravs de vrias interfaces.

rqr, labes-ufpa, 2015 199


MVC: Model-View-Controller www.labes.ufpa.br

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.

rqr, labes-ufpa, 2015 200


MVC: Model-View-Controller www.labes.ufpa.br

rqr, labes-ufpa, 2015 201


Evoluo do desenvolvimento WEB www.labes.ufpa.br

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.

rqr, labes-ufpa, 2015 202


Evoluo do desenvolvimento WEB www.labes.ufpa.br

Model 1: Arquitetura centrada na pgina


As pginas JSP tratam todos os aspectos da aplicao
apresentao, controle e processos de negcio
uElizando JavaBean para processar a lgica e links para a
navegao

rqr, labes-ufpa, 2015 203


Evoluo do desenvolvimento WEB www.labes.ufpa.br

Model 2: Arquitetura centrada no Servlet


As aplicaes implementadas uElizando o Model 2 so
mais fceis de manter e estender

rqr, labes-ufpa, 2015 204


Algumas Implementaes do MVC www.labes.ufpa.br

.NET
MicrosoC UIP
Maverick.NET
AcEonScript
ARP
PureMVC
Java
JavaServer Faces
Spring Framework
Struts
PHP
Zend Framework
Symfony Framework

rqr, labes-ufpa, 2015 205


Agenda www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 206


www.labes.ufpa.br

Parte 5
Avaliao Final

rqr, labes-ufpa, 2015 207


www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 208


Ilustrao dos itens a serem
entregues www.labes.ufpa.br

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

rqr, labes-ufpa, 2015 209


Ilustrao dos itens a serem
entregues www.labes.ufpa.br

Tela de Gerao : Sesso : Item


: Atendente
de Cont a

1: gerarContaSesso(s)

2: obter(s)

3: s

4: obterItensConsumidos

5: obterIt ens
: Promoo
6: itens

7: itens

repetir enquanto houver itens na sesso de consumo


8: obterNome

9: nome

10: obterPreo

11: preoUnit rio

12: obterQuantidade(item)

13: quantidade

14:

15: criar(s, itens) conta : Conta

16: conta

17: c onta

Diagrama de sequncia com


as mensagens para atender aquele
Caso de uso
rqr, labes-ufpa, 2015 210

Anda mungkin juga menyukai