Escolar Documentos
Profissional Documentos
Cultura Documentos
Projeto de Sistemas de
Software
Notas de Aula
2015
ndice
Captulo 1 - Introduo
2
4
6
9
11
17
18
21
21
25
28
31
34
41
50
58
60
66
67
70
72
75
82
83
85
87
93
94
97
98
101
105
107
110
111
112
115
116
Captulo 1 - Introduo
Captulo 1 Introduo
O desenvolvimento de software um processo que envolve atividades tcnicas,
gerenciais e de garantia da qualidade. No que concerne s atividades tcnicas,
tipicamente o processo de software inicia-se com o Levantamento de Requisitos,
quando os requisitos do sistema a ser desenvolvido so preliminarmente capturados e
organizados. Uma vez capturados, os requisitos devem ser modelados, avaliados e
documentados. A Modelagem Conceitual uma atividade essencial no processo de
Engenharia de Requisitos e cuida da elaborao de modelos descrevendo o qu o
software tem de fazer (e no como faz-lo). At este momento, a nfase est sobre o
domnio do problema e no se deve pensar na soluo tcnica, computacional, a ser
adotada.
Os requisitos podem ser funcionais ou no funcionais. Requisitos funcionais,
como o prprio nome indica, apontam as funes que o sistema deve prover e como o
sistema deve se comportar em determinadas situaes. J os requisitos no funcionais
descrevem restries sobre as funes a serem providas, restries essas que limitam as
opes para criar uma soluo para o problema, tais como restries de tempo e de
recursos, ou restries s quais o sistema como um todo (ou mesmo o projeto de
desenvolvimento) est sujeito. H, ainda, as regras de negcio, as quais so derivadas
do domnio de aplicao e podem restringir requisitos funcionais existentes ou
estabelecer como clculos especficos devem ser realizados, refletindo fundamentos do
domnio de aplicao.
Com os requisitos pelo menos parcialmente capturados e especificados na forma
de modelos, pode-se comear a trabalhar no domnio da soluo. Muitas solues so
possveis para o mesmo conjunto de requisitos e elas so intrinsecamente ligadas a uma
dada plataforma de implementao (linguagem de programao, mecanismo de
persistncia a ser adotado etc). Alm disso, requisitos no funcionais so, muitas vezes,
conflitantes e a escolha de quais atributos de qualidade sero mais atentamente
considerados tem tambm um forte impacto na escolha da soluo. Assim, ao se
considerar alternativas de soluo, todos esses aspectos tm de ser levados em conta.
A fase de projeto tem por objetivo definir e especificar uma soluo a ser
implementada. uma fase de tomada de deciso, tendo em vista que muitas solues
so possveis. Alm disso, o projeto um processo de refinamento. Inicia-se com o
projeto da arquitetura do sistema, que visa descrever a estrutura de nvel mais alto da
aplicao, identificando seus principais elementos ou componentes1 e como eles se
relacionam uns com os outros. Uma vez definida a arquitetura, o projeto passa a se
1
Grande parte dos trabalhos na literatura trata os blocos primrios de construo de uma arquitetura de
software como componentes. Contudo, conforme apontam Bass, Clements e Kazman (2003), este
termo vem sendo cada vez mais estreitamente associado ao movimento de Desenvolvimento Baseado em
Componentes DBC (GIMENES; HUZITA, 2005), onde assume uma conotao mais restrita. Assim,
neste texto procura-se utilizar o termo elemento para atribuir um carter mais geral. Quando usado, o
termo componente tem tambm essa concepo mais geral, tendo em vista que este texto no aborda
diretamente o DBC.
Captulo 1 - Introduo
Captulo 1 - Introduo
Domnio do
Problema
Mundo Real
Anlise e
Especificao
de Requisitos
(o qu)
Projeto
(como)
Domnio da
Soluo
Mundo
Computacional
Implementao
Captulo 1 - Introduo
Captulo 1 - Introduo
Alm dos captulos anteriormente citados, este texto contm, ainda, um anexo:
Referncias do Captulo
BASS, L., CLEMENTS, P., KAZMAN, R., Software Architecture in Practice, Second
edition, Addison Wesley, 2003.
GAMMA, E., HELM, R., JOHNSON, R., VLISSIDES, J.M., Design Patterns Elements of Reusable Object-Oriented Software. Addison-Wesley, 1995.
GIMENES, I. M. S., HUZITA, E. H. M., Desenvolvimento Baseado em Componentes:
Conceitos e Tcnicas, Cincia Moderna, 2006.
PFLEEGER, S.L., Engenharia de Software: Teoria e Prtica, Prentice Hall, 2 edio,
2004.
PRESSMAN, R.S., Engenharia de Software, McGraw-Hill, 6 edio, 2006.
WAZLAWICK, R.S., Anlise e Projeto de Sistemas de Informao Orientados a
Objetos, Elsevier, 2004.
refinar e descrever com mais detalhes cada parte ou viso da coisa, de modo
a prover orientao para a construo de cada detalhe.
Por fim, modelos de projeto tambm devem ser construdos com o objetivo de
prover uma viso geral do sistema a ser construdo, bem como uma variedade de vises
mais especficas de seus elementos, de modo a guiar a implementao. Um modelo da
arquitetura do sistema pode ser usado para prover uma viso geral da organizao do
sistema. Modelos especficos podem detalhar os diversos elementos da arquitetura.
Diferentes diagramas podem ser usados para prover diferentes vises desses elementos,
tais como diagramas de classes para uma viso estrutural e diagramas de sequncia para
uma viso comportamental. Por fim, devem-se projetar as classes que compem cada
um dos elementos da arquitetura, definindo detalhes de como implementar atributos,
associaes e mtodos.
Alm dos princpios gerais de projeto, Hooker (1996, apud PRESSMAN, 2006)
enumera sete princpios gerais da Engenharia de Software que se aplicam tambm ao
projeto de software. So eles:
Um sistema com um longo tempo de vida tem mais valor. Contudo, para ter
vida longa, um sistema deve ser projetado para acomodar mudanas.
Por fim, uma vez que a fase de projeto essencialmente uma atividade de
modelagem, princpios da modelagem gil (AMBLER, 2004) tambm se aplicam.
Dentre eles, merecem destaque:
Seja econmico. No crie mais modelos do que voc precisa. Seja capaz de
declarar um objetivo para cada modelo criado.
10
Baixa Coeso
Alto
Acoplamento
Vila Velha
Conjunto
Habitacional da
Siderrgica
Fbrica de
Refrigerantes
Serra
Trfego Intenso
Fbrica de
Garrafas
Plsticas
Alta Coeso
Baixo
Acoplamento
Vila Velha
Fbrica de
Garrafas
Plsticas
Siderrgica
Siderrgica
Serra
Pouco Trfego
Conjunto
Habitacional
da Siderrgica
11
12
13
14
15
sistema deve ter uma interface com o usurio amigvel. O que significa fcil de
manter ou interface amigvel? Os RNFs tm de ser especificados de forma tal que
seja possvel posteriormente avaliar se os mesmos foram atendidos ou no.
Uma forma de especificar requisitos no funcionais prover uma descrio
associada a um critrio de aceitao. Este ltimo deve ser testvel e, para tal, medidas
objetivas devem ser providas.
A ISO/IEC 91262 pode ser uma boa fonte de medidas. As partes 2 (Medidas
Externas) (ISO/IEC, 2003a) e 3 (Medidas Internas) (ISO/IEC, 2003b) dessa norma
apresentam diversas medidas que podem ser usadas para especificar objetivamente os
RNFs. Nessas partes da norma, medidas so sugeridas para as diversas subcaractersticas descritas na Parte 1, indicando, dentre outros nome e propsito da
medida, mtodo de aplicao e frmula, e como interpretar os valores da medida.
Seja o exemplo em que um sistema tem como requisito no funcional ser fcil de
aprender. Este requisito poderia ser especificado conforme mostrado na Tabela 2.1.
Tabela 2.1 Especificao de Requisito No Funcional.
RNF01 A funcionalidade Efetuar Locao de Item deve ser fcil de aprender.
Medida:
(ISO/IEC,
2003a)
Critrio de
Aceitao:
A Tabela 2.2 mostra exemplos de medidas que podem ser usadas para a
especificao e avaliao de requisitos no funcionais, algumas delas extradas e
adaptadas de (ISO/IEC, 2003a).
A famlia de normas ISO/IEC 9126 encontra-se em fase de transio para a nova famlia de normas, a
ISO/IEC 25000 - Software Product Quality Requirement and Evaluation (SQuaRE). Em especial,
medidas para a qualidade de produtos e sistemas so objeto da futura norma ISO/IEC 25023.
Medida
Propsito da Medida
Procedimento de Medio
Frmula de
Medio
Interpretao do
valor medido
Fonte de
Entrada para
Medio
Interoperabilidade
Consistncia de
interface
(protocolo)
Quo corretamente os
protocolos de interface
foram implementados?
X=NPIC/NPIT
Responsabilizao
Auditabilidade
de acesso
X=NALC/NART
Maturidade
Tempo mdio
entre falhas
X=TMAF+TMR
Disponibilidade
Probabilidade de
estar disponvel
Qual a probabilidade do
produto de software estar
disponvel?
X= TMAF /
(TMAF+TMR)
Reconhecimento
da Adequao
Funes
Evidentes
X=NFE/NFT
Inteligibilidade
Inteligibilidade
de funes
X=NFIC/NFIT
Projeto de IU
Operabilidade
Checagem de
validade de
entrada
Habilidade de
desfazer
Qual a proporo de
funes do produto de
software que esto
evidentes para os usurios?
Qual a proporo de
funes do produto de
software corretamente
entendidas pelos usurios?
Qual a proporo de itens
de entrada que checa se os
dados so vlidos?
Qual a proporo de
funes que podem ser
desfeitas?
Especificao de
requisitos,
Design, Cdigo
fonte
Especificao de
requisitos,
Design, Cdigo
fonte
Registros de
falhas e de
controle de
alteraes.
Registros de
falhas e de
controle de
alteraes.
Especificao de
requisitos,
Projeto de IU
X=NIE/NIEPC
Especificao de
requisitos,
Projeto de IU
Especificao de
requisitos,
Projeto de IU
Operabilidade
X=NFU/NTF
17
18
19
deve:
20
Leitura Complementar
Em (PRESSMAN, 2006), o Captulo 9 Engenharia de Projeto aborda vrios
dos temas discutidos neste captulo, com destaque para as sees 9.2 (Processo de
Projeto e Qualidade de Projeto), 9.3 (Conceitos de Projeto) e 9.5 (Projeto de Software
Baseado em Padro).
Em (PFLEEGER, 2004), o Captulo 5 Projetando o Sistema tem uma boa
discusso sobre decomposio, modularidade e nveis de abstrao (sees 5.2 e 5.4),
bem como acerca de caractersticas de um bom projeto (seo 5.5).
Em (BASS; CLEMENTS; KAZMAN, 2003), o Captulo 4 Understanding
Quality Attributes discute atributos de qualidade de sistemas de software e como
especificar requisitos especficos desses atributos na forma de cenrios. J o Captulo 2
What is Software Architecture? em sua seo 2.5, faz uma boa discusso sobre
vises para representar arquiteturas de software. Essas vises so posteriormente
exploradas no Captulo 9, que trata da documentao de arquiteturas de software.
No que se refere a padres, Buschmann e colegas tm uma coleo de cinco
volumes intitulados Pattern-Oriented Software Architecture (POSA) que apresentam
diversos padres arquitetnicos. Em especial, o Volume 1 - A System of Patterns
(BUSCHMANN et al., 1996) apresenta uma boa discusso sobre padres e categorias
de padres da fase de projeto. No que se refere aos padres de projeto (design patterns),
Gamma et al. (1995) apresentam um dos catlogos mais conhecidos e referenciados.
Referncias do Captulo
AMBLER, S.W., Modelagem gil, Artmed, 2004.
BASS, L., CLEMENTS, P., KAZMAN, R., Software Architecture in Practice, Second
edition, Addison Wesley, 2003.
BLAHA, M., RUMBAUGH, J., Modelagem e Projetos Baseados em Objetos com UML
2, Elsevier, 2006.
BUSCHMANN, F., MEUNIER, R., ROHNERT, H., SOMMERLAD, P., STAL, M.,
Pattern-Oriented Software Architecture: A System of Patterns, Volume 1, Wiley,
1996.
GAMMA, E., HELM, R., JOHNSON, R., VLISSIDES, J.M., Design Patterns Elements of Reusable Object-Oriented Software. Addison-Wesley, 1995.
ISO/IEC 9126-1, Software Engineering - Product Quality - Part 1: Quality Model, 2001.
ISO/IEC TR 9126-2:2003, Software Engineering Product Quality Part 2: External
Metrics, 2003.
ISO/IEC TR 9126-3:2003, Software Engineering Product Quality Part 3: Internal
Metrics, 2003.
LARMAN, C., Utilizando UML e Padres, 3 edio, Bookman, 2007.
PFLEEGER, S.L., Engenharia de Software: Teoria e Prtica, So Paulo: Prentice Hall,
2 edio, 2004.
PRESSMAN, R.S., Engenharia de Software, McGraw-Hill, 6 edio, 2006.
21
22
como se relacionam, como interagem e como usam outros elementos. Na maioria das
vezes, a arquitetura usada para descrever aspectos estruturais de um sistema.
Em quase todos os sistemas modernos, elementos interagem com outros por meio
de interfaces que dividem detalhes sobre um elemento em partes pblica e privada. A
arquitetura est preocupada com a parte pblica dessa diviso. Detalhes privados,
aqueles que tm a ver somente com a implementao interna, no so arquiteturais
(BASS; CLEMENTS; KAZMAN, 2003).
At o projeto arquitetnico, aspectos relacionados ao hardware e plataforma de
implementao ainda no foram tratados, j que a fase de anlise no se preocupa com a
tecnologia a ser usada na soluo, mas somente com o domnio do problema (viso de
mundo real). Este o momento para resolver como um modelo ideal vai executar em
uma plataforma restrita. importante realar que no existe a soluo perfeita. O
projeto da arquitetura uma tarefa de negociao, onde se faz compromissos entre
solues sub-timas. O modelo de arquitetura mapeia os requisitos essenciais da fase de
anlise em uma arquitetura tcnica. Uma vez que muitas arquiteturas diferentes so
possveis, o propsito do projeto arquitetnico escolher a configurao mais adequada.
Normalmente, o projeto da arquitetura discutido luz dos requisitos do sistema,
ou seja, necessrio conhecer minimamente os requisitos do sistema para se poder
projetar a sua arquitetura. Contudo, deve-se considerar o projeto arquitetnico como
algo mais abrangente, envolvendo aspectos tcnicos, sociais e de negcio. Todos esses
fatores (e no somente os requisitos) influenciam a arquitetura de software. A
arquitetura, por sua vez, afeta o ambiente da organizao (incluindo ambientes tcnico,
social e de negcio), o qual vai influenciar arquiteturas futuras, criando um ciclo de
realimentao contnua. Por exemplo, se os projetistas encarregados do projeto de um
novo sistema obtiveram bons resultados em projetos de sistemas anteriores usando uma
particular abordagem de arquitetura, ento natural que eles tentem a mesma
abordagem em um novo projeto. Por outro lado, se suas experincias anteriores com
essa abordagem foram desastrosas, os projetistas vo relutar em tent-la outra vez,
mesmo que ela se apresente como uma soluo adequada. Assim, as escolhas so
guiadas, tambm, pela formao e experincia dos projetistas (BASS; CLEMENTS;
KAZMAN, 2003).
Outro fator que afeta a escolha da arquitetura o ambiente tcnico (ou plataforma
de implementao) corrente. Muitas vezes, h para esse ambiente um conjunto
dominante de padres, prticas e tcnicas que aceito pela comunidade de arquitetos ou
pela organizao de desenvolvimento. Por fim, a arquitetura influenciada tambm pela
estrutura e natureza da organizao de desenvolvimento (BASS; CLEMENTS;
KAZMAN, 2003).
Assim, no projeto da arquitetura de software, projetistas so influenciados por
requisitos para o sistema, estrutura e metas da organizao de desenvolvimento,
ambiente tcnico disponvel e por sua prpria experincia e formao. Alm disso, os
relacionamentos entre metas de negcio, requisitos de sistemas, experincia dos
projetistas, arquiteturas e sistemas implantados geram diversos laos de realimentao
que podem ser gerenciados pela organizao. Esse ciclo de realimentao, ilustrado na
Figura 3.1, atua, dentre outros, das seguintes maneiras (BASS; CLEMENTS;
KAZMAN, 2003):
Estrutura da
Organizao
23
1. Informaes para
EAP e alocao de
recursos
Requisitos
3. Novas oportunidades,
reso, qualidade
2. Introduo em um
novo segmento de
mercado
Metas da
Organizao
Arquitetura
4. Novas
experincias
Formao e
Experincia dos
Projetistas
Representa uma abstrao do sistema que pode ser usada para compreenso
mtua, negociao, consenso e comunicao entre os interessados. A
arquitetura prov uma linguagem comum na qual diferentes preocupaes
podem ser expressas, negociadas e resolvidas em um nvel que seja
intelectualmente gerencivel.
24
25
26
27
Interativas: envolvem uma maior interao com o usurio, tais como formulrios
de inscrio, apresentao de informaes personalizadas, jogos online etc.
Pressman e Lowe (2009), por sua vez, propem outras categorias de aplicaes
web, que incluem aplicaes informativas, de download, orientadas a transaes,
orientadas a servios, de acesso a bases de dados, data warehousing, portais, dentre
outras.
28
29
Dutos
30
Facilita o reso. Quaisquer dois filtros podem ser conectados, desde que eles
estejam de acordo em relao aos dados sendo transmitidos entre eles.
Suporta execuo concorrente. Cada filtro pode ser implementado como uma
tarefa separada e potencialmente executada em paralelo com outros filtros.
Devido a seu carter transformacional, este estilo no cai bem para tratar
aplicaes interativas.
Camadas
No estilo em camadas, um sistema organizado hierarquicamente, como um
conjunto ordenado de camadas, cada uma delas construda em funo das camadas
inferiores e fornecendo servios para as camadas superiores. O conhecimento
unidirecional, i.e., uma camada conhece as camadas inferiores, mas no tem qualquer
conhecimento sobre as camadas superiores. H uma relao cliente-servidor entre uma
camada usuria de servios e suas camadas inferiores, provedoras de servios (BLAHA;
RUMBAUGH, 2006). Cada camada acrescenta um nvel de abstrao sobre a camada
inferior (MENDES, 2002). Arquiteturas de redes, tal como a arquitetura de Internet
TCP/IP, so bons exemplos de sistemas em camadas.
Uma arquitetura em camadas pode ser fechada, quando uma camada construda
apenas em funo da camada imediatamente inferior, ou aberta, quando uma camada
pode usar recursos de quaisquer camadas inferiores. A arquitetura fechada reduz a
dependncia entre as camadas, permitindo que alteraes sejam feitas mais facilmente.
J a arquitetura aberta reduz a necessidade de redefinir operaes em vrios nveis, o
que tende a resultar em melhor desempenho. Por outro lado, mudanas em uma camada
podem afetar qualquer camada acima, tornando a arquitetura menos robusta e
comprometendo a manutenibilidade do sistema (BLAHA; RUMBAUGH, 2006). A
Figura 3.3 ilustra arquiteturas em camadas fechada e aberta.
31
Camadas
Geralmente
chamadas de
procedimento
Arquitetura Fechada
Arquitetura Aberta
Parties
Outra forma de estruturar sistemas por meio de parties. Parties dividem
um sistema verticalmente em subsistemas fracamente acoplados, cada um fornecendo,
normalmente, um tipo de servio. Este o caso, por exemplo, de sistemas operacionais,
que possuem parties para controle de arquivos, gerncia de memria, controle de
processo etc. As parties podem ter algum conhecimento acerca das outras, mas esse
conhecimento no profundo e evita maiores dependncias de projeto. Ao contrrio das
camadas, que variam em seu nvel de abstrao, as parties simplesmente dividem um
sistema em partes, todas tendo um nvel de abstrao semelhante. Outra diferena entre
32
camadas e parties que as camadas dependem umas das outras, enquanto as parties
podem ser tanto independentes como dependentes e eventualmente mutuamente
dependentes (BLAHA; RUMBAUGH, 2006). A Figura 3.4 ilustra o estilo em parties.
Nesta figura, as parties 1 e 2 so mutuamente dependentes, enquanto a Partio 2
dependente da Partio 3. J as Parties 3 e 4 so parties independentes.
Parties dependentes
Partio 1
Partio 2
Partio 3
Partio 4
Parties independentes
33
Componente
Ouvinte 1
Componente
Anunciante
evento
Mecanismo
de Difuso de
Eventos
Invocao de procedimento
registrado, passando evento
Componente
Ouvinte n
34
Interface com
o Usurio
Memria
Mecanismo
de Inferncia
Base de
Conhecimento
35
36
If ....
Then ....
Else ....
If ....
Then ....
Else ....
Camada de
Lgica do
Negcio
Camada de
Interface com o
Usurio
Camada de
Gerncia de
Dados
37
Alm desses trs grupos, Fowler (2003) discute, ainda, outros dois grupos, um
relativo a padres que buscam tratar problemas de concorrncia e outro envolvendo
padres enfocando o problema de estado de sesses.
Os padres apresentados em (FOWLER, 2003) tm a seguinte estrutura: nome,
inteno (que busca resumir um padro em uma ou duas sentenas), esboo (uma
representao visual do padro, geralmente na forma de um diagrama UML), problema,
soluo, quando usar o padro e leitura adicional (apontando outras discusses acerca
do padro).
Alm do catlogo de padres apresentado em (FOWLER, 2003), que enfoca o
projeto de sistemas de informao em camadas, outro catlogo bastante interessante o
conhecido como POSA (Pattern Oriented Software Architecture) (BUSCHMANN et
al., 1996). Este , na verdade, um conjunto de catlogos de propsito mais geral,
enfocando diversos aspectos e envolvendo tanto padres arquitetnicos como padres
de projeto, idiomas e linguagens de padres.
38
Clientes
Servidor
39
Clientes
Servidor de Dados
Servidor de
Aplicao
preciso, portanto, escolher onde cada uma das camadas lgicas vai rodar
(camadas fsicas). De maneira geral, a gerncia de dados ficar no servidor. A exceo
ficar por conta de situaes em que necessrio duplicar dados para permitir operao
desconectada (FOWLER, 2003).
No que se refere camada de apresentao, a deciso depende principalmente do
tipo desejado de interface com o usurio. Com a difuso do uso da Web como
plataforma para o desenvolvimento de sistemas de informao, a opo mais simples
rodar tudo no servidor, cabendo ao cliente apenas a apresentao de uma interface
40
HTML (front end) rodando em um navegador Web. Essa soluo facilita a manuteno
e a implantao de novas verses, mas no permite operao desconectada e
compromete a rapidez com que o sistema reconhece uma solicitao do usurio
(responsiveness), uma vez que a solicitao tem de trafegar, ida e volta, para o servidor
(FOWLER, 2003). Alm disso, interfaces mais ricas podem no ser possveis. Para
tratar esses problemas, surgiram as Aplicaes Ricas para Internet (Rich Internet
Applications RIAs), discutidas na Seo 3.6.
Por fim, em relao camada de domnio, pode-se rodar tudo no cliente (cliente
pesado), tudo no servidor (servidor pesado) ou dividi-la. Rodar tudo no servidor a
melhor opo do ponto de vista da manutenibilidade. Dividir a lgica de negcio entre o
servidor e o cliente traz uma dificuldade adicional na manutenibilidade do sistema:
saber onde certa poro da aplicao est rodando. Neste caso, devem-se isolar as
pores que vo rodar no cliente em mdulos autocontidos que sejam independentes das
outras partes do sistema.
Levando-se em considerao os aspectos discutidos anteriormente, o projeto de
sistemas de informao distribudos envolve questes adicionais, dentre elas (RUBLE,
1997):
41
taxa de ocorrncia dos casos de uso que criam novas instncias da classe,
perodo de reteno.
Cliente
Pedido
Item de Pedido
Efetuar pedido
Cancelar pedido
RD
RD
Alterar pedido
RU
CRUD
42
43
Localizao
Casos de Uso
Internet
Efetuar pedido
Matriz
Filiais
Cancelar pedido
Alterar pedido
44
45
Casos de uso so realizados uma nica vez (ou muito poucas vezes), tais como
converso de dados e instalao do sistema.
46
Requisio HTTP
Cliente
(Navegador)
Recursos
Resposta HTTP
Servidor Web
47
Cliente
(Navegador)
Script CGI
Resposta
Servidor Web
Resultado
48
Cliente
Resposta
Servidor Web
Servidor de Aplicao
<HTML>
...
<%>
script code
</%>
</HTML>
Template
de Pgina
49
<HTML>
<BODY>
...
</BODY>
</HTML>
Servidor Web
Pgina
HTML
Pgina
Apresentada
Mquina de Script
50
51
1. Requisio
HTTP
2. Requisio
de Script
3. Chamada de
Componente
4. Consulta
Servidor de
Dados
Cliente
8. Resposta
(Navegador)
HTTP
Servidor
Web
7. Pgina
HTML
Motor de
Script
6. Resposta
5. Resultados
Servidor de
Aplicao
Sistemas
Legados
Contudo, essas aplicaes ainda permitem uma interao pouco flexvel. Mais
recentemente, com a implementao da API XMLHttpRequest dentro da maioria dos
navegadores, scripts de lado do cliente passaram a poder fazer, tambm, requisies
HTTP para um servidor Web de maneira transparente em background e
52
53
54
Um componente envia um silvo (som agudo prolongado) e espera receber um eco de volta, dentro de um tempo predefinido, do componente
sendo examinado. Ex.: clientes enviam um silvo para verificar se o servidor e o caminho de comunicao at ele esto operando dentro do limites
de desempenho esperados.
Batida de Corao
(Heartbeat)
Um componente emite mensagens peridicas (batida de corao) e outro componente as escuta. Se a batida de corao falhar, assume-se que o
componente de origem falhou e um componente de recuperao de falha notificado.
Excees (Exceptions)
Uma exceo gerada quando uma falha detectada. Um manipulador de exceo ento acionado para trat-la. O manipulador de exceo
opera dentro do mesmo processo que gerou a exceo e geralmente realiza uma transformao da falha em uma forma que possa ser processada.
Votao (Voting)
Processos rodando em processadores redundantes recebem entradas equivalentes e computam a sada que enviada para um votante (voter). Se o
votante detectar um comportamento desviante de um dado processador, ele gera uma falha no correspondente componente.
Recuperao de Falha
Redundncia Ativa
(Active Redundancy)
Componentes redundantes respondem a eventos em paralelo. Apenas a resposta de um deles utilizada (geralmente o primeiro a responder) e o
restante descartado. Em sistemas distribudos que precisam de alta disponibilidade, a redundncia pode ocorrer nos caminhos de comunicao.
Redundncia Passiva
(Passive Redundancy)
Um componente (o principal) responde aos eventos e informa os demais (os componentes em espera standbys) sobre as atualizaes de estado
que ele fez. Quando uma falha ocorre, o sistema precisa primeiro garantir que o estado de backup suficientemente recente para prosseguir.
Sobressalente (Spare)
Uma plataforma de computao sobressalente em espera configurada para substituir componentes com falha. Essa plataforma tem de ser
iniciada com a configurao apropriada e o estado recuperado. Para tal, periodicamente o estado do sistema deve ser armazenado, bem como se
devem registrar as alteraes feitas no dispositivo de persistncia.
Operao em Sombra
(Shadow Operation)
Um componente que falhou anteriormente, para voltar a executar normalmente, precisa primeiro rodar em modo sombra por um pequeno
perodo de tempo para garantir que ele tem o mesmo comportamento do componente que est funcionando correntemente.
Ressincronizao de
Estado (State
Resynchronization)
As tticas de redundncia ativa e passiva requerem que um componente sendo restaurado tenha seu estado atualizado antes de retornar ao
servio.
Ponto de Verificao /
Reverso (Checkpoint /
Rollback)
Um ponto de verificao, criado periodicamente ou em resposta a eventos especficos, registra um estado consistente. O sistema, aps a
ocorrncia de uma falha, deve ser restaurado usando um ponto de verificao de um estado consistente e um registro (log) das transaes que
ocorreram aps o ponto de verificao.
Um componente removido do sistema em operao para ser submetido a atividades que previnam falhas antecipadamente. Ex.: reiniciar um
componente para evitar, por exemplo, estouro de pilha.
Transaes
(Transactions)
Uma transao a agregao de diversos passos sequenciais de modo que o pacote como um todo possa ser desfeito de uma s vez. Transaes
so usadas para prevenir que dados sejam afetados caso um dos passos do processo falhe, bem como para prevenir colises entre threads
simultneas acessando os mesmos dados.
Monitor de processo
(Process monitor)
Uma vez que uma falha detectada em um processo, um processo de monitoramento pode excluir o processo que no est executando e criar
uma nova instncia do mesmo.
57
3.7.2 Desempenho
Desempenho est dentre os mais importantes requisitos no funcionais. Ele
depende fortemente da interao (e do tipo da interao) existente entre os componentes
de um sistema e, portanto, est muito associado arquitetura do mesmo. Contudo,
geralmente difcil lidar com este atributo de qualidade, uma vez que ele conflita com
vrios outros, tais como confiabilidade e manutenibilidade. De maneira geral, requisitos
de desempenho impem restries relativas velocidade de operao de um sistema.
Isso pode ser especificado em termos de (MENDES, 2002):
Requisitos de tempo de resposta: especificam o tempo de resposta aceitvel para
certas funcionalidades do sistema;
Requisitos de processamento (throughput): especificam restries relativas
quantidade de processamento (p.ex., nmero de transaes) realizada em um
determinado perodo de tempo;
Requisitos de temporizao: especificam quo rapidamente o sistema deve
coletar dados de entrada de sensores, antes que novas leituras sejam feitas,
sobrescrevendo os dados anteriores;
Requisitos de recursos: estabelecem condies (memrias principal e secundria,
velocidade do processador etc.) para o bom funcionamento do sistema.
Bass, Clements e Kazman (2003) listam diversas tticas para tratar requisitos de
desempenho. O propsito dessas tticas gerar uma resposta a um evento que chega ao
sistema dentro de alguma restrio de tempo. Aps a chegada do evento, o sistema pode
estar processando sobre esse evento ou o processamento pode estar bloqueado por
alguma razo. Assim, h dois fatores principais que influenciam o tempo de resposta:
consumo de recursos e tempo de bloqueio. Recursos incluem processadores, bases de
dados, redes de comunicao e memria. Um processamento pode estar impedido de
usar um recurso devido disputa pelo mesmo, devido ao fato do recurso estar
indisponvel ou porque a computao depende do resultado de outros componentes que
no esto disponveis. Com base nessas consideraes, as tticas de desempenho
propostas so agrupadas em:
Uma forma de diminuir o tempo de resposta consiste em aperfeioar os algoritmos usados em partes crticas do software.
Reduzir overhead
computacional
O uso de intermedirios, to importantes para a manutenibilidade, aumenta o consumo de recursos no processamento de um evento e, portanto,
remov-los pode ajudar a diminuir o tempo de resposta. Consideraes anlogas valem para camadas, sobretudo quando utilizada uma
arquitetura em camadas fechada.
Reduzir o nmero de
eventos processados
Se for possvel reduzir a frequncia de amostragem na qual variveis do ambiente so monitoradas, ento a demanda pode ser reduzida.
Quando no se tem controle sobre a chegada de eventos gerados externamente, as solicitaes podem ser tratadas com uma frequncia menor,
com perda de algumas requisies.
Gerncia de Recursos
Introduzir concorrncia
Concorrncia pode ser introduzida, processando diferentes conjuntos de eventos em diferentes linhas de controle (threads) ou criando linhas de
controle adicionais para diferentes conjuntos de atividades. Uma vez introduzida concorrncia, balancear a carga importante para explor-la
de maneira tima. Contudo, essa ttica s pode ser aplicada se as requisies puderem ser processadas em paralelo.
O propsito de uma rplica reduzir a conteno que ocorreria se todas as computaes ocorressem em um computador central. O uso de
cache e fragmentao de bases de dados so exemplos dessa ttica. Caching uma ttica na qual dados so replicados para reduzir conteno.
Uma vez que, neste contexto, os dados colocados em cache so cpias de dados existentes, manter as cpias consistentes e sincronizadas
torna-se uma responsabilidade do sistema.
Aumentar a disponibilidade
de recursos.
Processadores mais rpidos, processadores adicionais, memria adicional e redes mais rpidas so tticas para aumentar a disponibilidade de
recursos.
Arbitragem de Recursos
Escolher poltica de
escalonamento
Todas as polticas de escalonamento atribuem prioridades. Alm disso, para que um evento de mais alta prioridade seja disparado, necessrio
interromper o processo usurio corrente do recurso (preempo). Algumas polticas comuns de escalonamento so: FIFO (first-in first out),
prioridades fixas, prioridades dinmicas e escalonamento esttico.
59
3.7.3 Segurana
A segurana tem como objetivo no permitir que pessoas ou sistemas no
autorizados tenham acesso a eventos ou a dados do sistema. Para controlar o acesso,
necessrio identificar, autenticar e autorizar usurios. A identificao se d atravs de
uma forma unvoca, ou seja, que identifique apenas um usurio. A autenticao consiste
em comprovar que o usurio mesmo quem ele diz ser na identificao, sendo feita, por
exemplo, por meio de uma senha. Finalmente, a autorizao dada ao usurio, ou a uma
classe de usurios, dando acesso a determinadas funcionalidades do sistema (XAVIER;
PORTILHO, 1995).
Bass, Clements e Kazman (2003) listam algumas tticas para prover segurana,
agrupadas em tticas para resistir a ataques, tticas para detectar ataques e tticas para
recuperar o sistema de ataques. A Tabela 3.3 apresenta as tticas de segurana propostas
por esses autores.
Para tratar aspectos relativos segurana, casos de uso tm de ser adicionado ao
modelo de casos de uso do sistema, de modo a permitir a definio de classes de
usurios e seus perfis, incluso, excluso e alterao de usurios, alm, claro, das
atividades de autenticao e autorizao de usurios. Uma matriz Caso de Uso x Classe
de Usurio pode ser utilizada para documentar o nvel de autorizao adotado no
projeto, como ilustra a Figura 3.7.
Classes de Usurios
Casos de Uso
Cliente
Efetuar pedido
Gerente
Funcionrio
Cancelar pedido
Alterar pedido
Autenticao diz respeito a garantir que um usurio ou computador remoto realmente quem diz ser. Senhas, certificados digitais e identificao
biomtrica so alguns meios de se prover autenticao.
Autorizar usurios
Autorizao diz respeito a garantir que um usurio autenticado tenha o direito de acessar e modificar tanto dados quanto servios. Isso feito
normalmente provendo alguns padres de controle de acesso dentro do sistema. O controle de acesso pode ser por usurio ou classe de usurio.
Classes de usurios podem ser definidas por grupos de usurios, por papis de usurio ou por listas de indivduos.
Manter confidencialidade
dos dados
Dados devem ser protegidos contra acesso no autorizado. Confidencialidade normalmente atingida aplicando alguma forma de criptografia a
dados e links de comunicao. Criptografia prov uma proteo extra para dados mantidos em bases de dados, alm da autorizao. J links de
comunicao tipicamente no tm controles de autorizao e, portanto, a criptografia a nica proteo neste caso.
A integridade dos dados tambm deve ser garantida. Para verificar a integridade, informao redundante, tal como soma de verificao, pode ser
codificada junto aos dados.
Limitar exposio
A alocao de servios a servidores pode ser feita de modo que apenas servios limitados estejam disponveis em cada servidor.
Limitar acesso
Firewalls podem ser usados para restringir o acesso com base em fonte de mensagens ou porta de destinao. Mensagens de fontes
desconhecidas podem ser uma forma de ataque. Contudo, nem sempre possvel limitar o acesso a fontes conhecidas. Um site web pblico, por
exemplo, pode esperar receber solicitaes de fontes desconhecidas.
Detectar Ataques
Sistema de deteco de
intruso
Sistemas de deteco de intruso funcionam comparando padres de trfego de rede. No caso de deteco de mau uso, o padro de trfego
comparado com padres histricos de ataques conhecidos. Detectores de intruso tm de ter, dentre outros, algum tipo de sensor para detectar
ataques, bases de dados para registrar eventos para posterior anlise, ferramentas para anlise e um console de controle que permita ao analista
modificar aes de deteco de intruso.
Recuperar-se de Ataques
Restaurar estado
As tcnicas de recuperao de falhas sugeridas nas tticas de confiabilidade podem ser aplicadas, j que elas se propem a restaurar um estado
consistente a partir de um estado inconsistente. Ateno especial deve ser dada manuteno de cpias redundantes de dados administrativos do
sistema, tais como senhas, listas de controle de acesso, servios de nomes de domnio e dados de perfis de usurios.
Uma trilha de auditoria um registro das transaes aplicadas aos dados do sistema junto com informaes de identificao. Essas informaes
podem ser usadas para trilhar as aes do agressor, apoiar reconhecimento (provendo evidncia de que uma particular requisio foi feita) e
apoiar a recuperao do sistema. Trilhas de auditoria so frequentemente alvo de ataques e, portanto, devem ser mantidas de modo confivel.
61
3.7.4 Usabilidade
A usabilidade est preocupada com o quo fcil para o usurio realizar uma
tarefa desejada e o tipo de apoio provido pelo sistema ao usurio. Envolve, dentre
outros, aspectos relativos facilidade de entender, aprender e operar o sistema.
Bass, Clements e Kazman (2003) definiram tticas para apoiar a usabilidade, as
quais so organizadas em dois grandes grupos: tticas de tempo de execuo e tticas de
tempo de projeto. As tticas de tempo de execuo, como o prprio nome indica, se
referem ao apoio ao usurio durante a execuo do sistema. Uma vez que o sistema
estiver executando, a usabilidade reforada dando feedback ao usurio sobre o qu o
sistema est fazendo e provendo ao usurio a capacidade de entrar com comandos que
permitam operar o sistema de modo mais eficiente ou corrigir erros, tais como cancelar
e desfazer (BASS; CLEMENTS; KAZMAN, 2003).
As tticas de usabilidade em tempo de execuo so agrupadas em tticas para
apoiar iniciativas do usurio e tticas para apoiar iniciativas do sistema. Quando um
usurio toma uma iniciativa, o projetista projeta a resposta como se fosse uma outra
poro de funcionalidade (ex.: cancelar e desfazer). Quando o sistema toma a iniciativa,
ele precisa apoiar-se em alguma informao sobre o usurio, a tarefa sendo executada
pelo usurio ou sobre o estado do sistema. Assim, so tticas de apoio a iniciativas do
sistema (BASS; CLEMENTS; KAZMAN, 2003):
3.7.5 Manutenibilidade
Para se obter sistemas fceis de manter, deve-se, dentre outros, facilitar a
localizao das alteraes (analisabilidade), a realizao das alteraes
(modificabilidade) e os testes (testabilidade).
62
3.7.6 Portabilidade
Para se obter sistemas fceis de portar, deve-se, dentre outros, facilitar a
instalao, a substituio de partes do sistema e a adaptao a diferentes plataformas. As
tticas de portabilidade esto bastante relacionadas s tticas de manutenibilidade. De
fato, algumas delas so as mesmas, tal como garantir interfaces existentes, usar
intermedirios e separar a interface da aplicao. Alm disso, o uso de linguagens,
bibliotecas e mecanismos de persistncia capazes de rodar em diferentes plataformas
operacionais uma importante ttica para tratar a portabilidade.
63
64
65
Referncias do Captulo
ALBIN, S.T., The Art of Software Architecture: Design Methods and Techniques, John
Wiley & Sons, 2003.
BASS, L., CLEMENTS, P., KAZMAN, R., Software Architecture in Practice, Second
edition, Addison Wesley, 2003.
BLAHA, M., RUMBAUGH, J., Modelagem e Projetos Baseados em Objetos com UML
2, Elsevier, 2006.
BUSCHMANN, F., MEUNIER, R., ROHNERT, H., SOMMERLAD, P., STAL, M.,
Pattern-Oriented Software Architecture: A System of Patterns, Volume 1, Wiley,
1996.
CARDOSO, A.C., MARQUES, A.S., Sistemas Baseados em Regras, 2007. Disponvel
em http://mestradosiad.blogspot.com/2007/11/sistemas-baseados-em-regras.html.
CASTELEYN, S., DANIEL, F., DOLOG, P., MATERA, M., Engineering Web
Applications, Springer, 2009.
FOWLER, M., Patterns of Enterprise Application Architecture, Addison-Wesley, 2003.
GORTON, I., Essential Software Architecture, Springer, 2006.
KOSCIANSKI, A., SOARES, M.S., Qualidade de Software, Novatec, 2006.
MARINHO, E.H., RESENDE, R.F., Extenso de um Metamodelo de Aplicaes
Baseadas na Web considerando jax, Anais do VII Simpsio Brasileiro de
Sistemas de Informao, Salvador, Brasil, pp. 141 152, 2011.
MENDES, A., Arquitetura de Software: desenvolvimento orientado para arquitetura,
Editora Campus, 2002.
MURUGESAN, S., GINIGE, A., Web Engineering: Introduction and Perspectives,
In: Software Engineering for Modern Web Applications: Methodologies and
Technologies, pp. 1-24, IGI Global, 2008.
PFLEEGER, S.L., Engenharia de Software: Teoria e Prtica, So Paulo: Prentice Hall,
2 edio, 2004.
PRESSMAN, R.S., Engenharia de Software, McGraw-Hill, 6 edio, 2006.
PRESSMAN, R.S., LOWE, D., Web Engineering: A Practitioners Approach, Mc Graw
Hill, 2009.
RUBLE, D.A., Practical Analysis and Design for Client/Server and GUI Systems,
Yourdon Press Computing Series, 1997.
SHAW, M., GARLAN, D., Software Architecture: Perspectives on an Emerging
Discipline, Prentice Hall, 1996.
XAVIER, C.M.S., PORTILHO, C., Projetando com Qualidade a Tecnologia de
Sistemas de Informao, Livros Tcnicos e Cientficos Editora, 1995.
66
67
Seja qual for a opo escolhida, para apoiar a definio dos mtodos das classes,
pode ser til elaborar diagramas de interao.
Este captulo discute o projeto da camada de lgica de negcio. A Seo 4.1
discute brevemente os diagramas de interao, dando destaque aos diagramas de
sequncia, que sero usados posteriormente ao longo do captulo para apoiar a definio
de mtodos das classes. A Seo 4.2 apresenta sucintamente os padres arquitetnicos
Modelo de Domnio e Camada de Servio. A Seo 4.3 trata do projeto da lgica de
domnio do problema, discutindo as alteraes e refinamentos a serem feitos nos
diagramas de classes da anlise para incorporar as decises de projeto. Finalmente, a
Seo 4.4 trata do projeto da lgica de aplicao, que lida com a lgica dos casos de
uso.
68
parmetros
linha de vida
tempo
mensagens sncronas
mensagem de retorno
mensagem de
destruio
chamada
local
destruio de
objeto
mensagem assncrona
foco de controle
69
Uma mensagem de criao indica que o objeto receptor est sendo criado
naquele momento. Assim, ao contrrio dos demais objetos, ele aparece
nivelado na altura do envio da mensagem e no na parte superior do
diagrama.
70
Uma classe controladora de sistema um controlador no sentido usado no padro Modelo-VisoControlador (MVC) discutido no Captulo 5.
71
Classes gerenciadoras de caso de uso so classes que centralizam as interaes no contexto de casos de
uso especficos e no so consideradas controladores no sentido usado no padro MVC.
72
73
origem a novas classes (ou tipos de dados enumerados) para atender a requisitos de
qualidade, tais como usabilidade, manutenibilidade e reusabilidade.
Adio de navegabilidades nas associaes: Na fase de anlise, as associaes
so consideradas navegveis em todas as direes. O mesmo no ocorre na fase de
projeto, quando se pode definir que certas associaes so navegveis apenas em um
sentido, indicando que apenas um dos objetos ter uma referncia para o outro (ou para
colees de objetos, no caso de associaes com multiplicidade *). Esta deciso deve
ser feita, sobretudo, considerando os usos frequentes das funcionalidades do sistema e
requisitos no funcionais, com destaque para desempenho, mesmo que ele no seja um
atributo condutor da arquitetura. Alm disso, essa definio pode ser influenciada,
dentre outros, pelo mecanismo de persistncia de objetos a ser adotado.
Adio de informaes de visibilidade de atributos e associaes: De maneira
geral, na fase de anlise no se especifica a visibilidade de atributos e associaes.
Como discutido anteriormente, as associaes so tipicamente consideradas navegveis
e visveis em todas as direes. J os atributos so considerados pblicos. Porm essa
no uma boa estratgia para a fase de projeto. Conforme discutido no Captulo 2,
ocultar informaes um importante princpio de projeto. Assim, atributos s devem
poder ser acessados pela prpria classe ou por suas subclasses. Uma classe no deve ter
acesso aos atributos de uma classe a ela associada. Como consequncia disso, cada
classe deve ter operaes para consultar (tipicamente nomeadas como get) e atribuir /
alterar valor (normalmente nomeada como set) de cada um de seus atributos e
associaes navegveis. Essas operaes, contudo, no precisam ser mostradas no
diagrama de classes, visto que elas podem ser deduzidas pela prpria existncia dos
atributos e associaes (WAZLAWICK, 2004).
Adio de mtodos s classes: Muitas vezes, as classes de um diagrama de
classes de anlise no tm informao acerca das suas operaes. Mesmo quando elas
tm essa informao, ela pode ser insuficiente, tendo em vista que no projeto que se
decide efetivamente como abordar a distribuio de responsabilidades para a realizao
de funcionalidades. Assim, durante o projeto do CDP ateno especial deve ser dada
definio de mtodos nas classes. Para apoiar esta etapa, diagramas de sequncia podem
ser utilizados para modelar a interao entre objetos na realizao de funcionalidades do
sistema. A escolha de um padro arquitetnico para o projeto da lgica de negcio
tambm tem influncia na distribuio de responsabilidades, conforme discutido na
Seo 4.2. Vale ressaltar que j se assume que algumas operaes, consideradas bsicas,
existem e, portanto, no precisam ser representadas no diagrama de classes. Essas
operaes so as operaes de criao e destruio de instncias, alm das operaes de
consulta e atribuio / alterao de valores de atributos e associaes, conforme
discutido no item anterior. No diagrama de classes devem aparecer apenas os mtodos
que no podem ser deduzidos (WAZLAWICK, 2004).
Eliminao de classes associativas: Caso o diagrama de classes de anlise
contenha classes associativas, recomenda-se substitu-las por classes normais, criando
novas associaes. Isso importante, pois as linguagens de programao no tm
construtores capazes de implementar diretamente esses elementos de modelo.
Alm das alteraes bsicas a que todos os diagramas de classes do CDP estaro
sujeitos, outras fontes de alterao incluem:
74
75
Vale ressaltar que, embora a classe controladora de sistema seja modelada no diagrama de classes do
domnio do problema, ela corresponde, de fato, ao pacote de interface com o usurio, tendo em vista que
ela um controlador no sentido adotado pelo padro MVC.
76
capaz de tratar a requisio. Neste caso, a execuo delegada para objetos do domnio
do problema, procurando efetuar uma cadeia de delegao sobre as linhas de
visibilidade das associaes j existentes, at se atingir um objeto capaz de atender
requisio. Novas linhas de visibilidade s devem ser criadas quando isso for
estritamente necessrio. Deste modo, mantm-se fraco o acoplamento entre as classes,
conforme preconiza o padro de projeto Acoplamento Fraco (LARMAN, 2004).
Assim, partindo-se do controlador do sistema, deve-se identificar qual o objeto a
ele relacionado que melhor pode tratar a requisio e delegar essa responsabilidade a
ele. Esse objeto, por sua vez, vai colaborar com outros objetos para a realizao da
funcionalidade.
De maneira geral, um objeto s deve mandar mensagens para outros objetos que
estejam a ele associados ou que foram passados como parmetro no mtodo que est
sendo executado. Nessa abordagem, deve-se evitar obter um objeto como retorno de um
mtodo (visibilidade local) para mandar mensagens a ele (WAZLAWICK, 2004),
conforme apontado pelo padro no fale com estranhos (LARMAN, 2004).
Seja o exemplo de uma locadora de vdeo, cujo modelo de projeto do domnio
do problema parcialmente apresentado na Figura 4.2.
77
Figura 4.3 Diagrama de Sequncia Caso de Uso Efetuar Locao Padro Modelo de Domnio
Figura 4.4 Diagrama de Sequncia Caso de Uso Efetuar Locao Padro Camada de Servio
81
Leitura Complementar
Descries detalhadas dos principais elementos de modelagem de diagramas de
interao (diagramas de sequncia e de comunicao) da UML podem ser encontradas
no Captulo 19 de (BOOCH; RUMBAUGH; JACOBSON, 2006) Diagramas de
Interao. Wazlawick (2004), por sua vez, discute em seu Captulo 7 Projeto da
Camada de Domnio como elaborar um diagrama de comunicao. Sua abordagem
para elaborao desses diagramas segundo um padro de Modelo de Domnio pode ser
facilmente estendida para diagramas de sequncia, tendo em vista que esses diagramas
so semanticamente equivalentes.
No Captulo 7 de (WAZLAWICK, 2004) Projeto da Camada de Domnio,
alm da tima apresentao acerca da elaborao de diagramas de comunicao, outros
aspectos do projeto da Lgica de Negcio so discutidos, incluindo modelos de domnio
ricos e padres de projeto associados, possveis modificaes a serem feitas nos
diagramas de classes de projeto, delegao e envio de informaes de diagramas de
comunicao para diagramas de classes de projeto.
Em (FOWLER, 2003), o Captulo 2 Organizing Domain Logic discute a
organizao da camada de lgica de negcio. Os padres discutidos nesse captulo so
posteriormente apresentados em detalhes no Captulo 9 Domain Logic Patterns.
Em (BLAHA; RUMBAUGH, 2006), o Captulo 15 Projeto de Classes
aborda vrios dos temas discutidos neste captulo, com destaque para as sees 15.3
(Realizando Casos de Uso), 15.7 (Otimizao do Projeto), 15.9 (Ajuste da Herana) e
15.10 (Organizando um Projeto de Classes).
Referncias do Captulo
BLAHA, M., RUMBAUGH, J., Modelagem e Projetos Baseados em Objetos com UML
2, Elsevier, 2006.
BOOCH, G., RUMBAUGH, J., JACOBSON, I., UML Guia do Usurio, 2a edio,
Elsevier Editora, 2006.
FOWLER, M., Patterns of Enterprise Application Architecture, Addison-Wesley, 2003.
FOWLER,
M.,
Anemic
Domain
Model,
2003a.
Disponvel
em
http://www.martinfowler.com/bliki/AnemicDomainModel.html. ltimo acesso em
06.05.2010.
FRAGMENTAL Bliki, Evitando VOs e BOs, 2007. Disponvel em
http://www.fragmental.com.br/wiki/index.php?title=Evitando_VOs_e_BOs. ltimo
acesso em 06.05.2010.
LARMAN, C., Applying UML and Patterns: An Introduction to Object-Oriented
Analysis and Design and Iterative Development, Third Edition, Addison Wesley,
2004.
WAZLAWICK, R.S., Anlise e Projeto de Sistemas de Informao Orientados a
Objetos, Elsevier, 2004.
82
83
Finalmente, a Seo 5.5 discute como alguns padres de projeto (design patterns)
podem ser empregados no projeto da IU.
84
85
86
87
Projeto
Preliminar
Construo do
1 Prottipo da IU
o
Avaliao do
Usurio
Construo de novo
Prottipo da IU
Modificaes do Projeto
de Interface
Estudo da Avaliao
pelo Projetista
88
89
90
91
Para facilitar a percepo da mensagem por parte do usurio, pode ser til
que a mesma seja acompanhada de uma dica visual (p.ex., destacar o campo
em que o preenchimento apresentou problema) ou sonora.
Tipos de Comandos
Diferentes grupos de usurios tm diferentes necessidades de interao. Em
muitas situaes til prover aos usurios mais de uma forma de interao. Nestes
casos, necessrio definir e avaliar:
Quais funes tero mais de uma forma de interao (p.ex., um item de menu
e um comando correspondente);
Progresso do Processamento
importante mostrar o progresso do processamento para os usurios,
principalmente para eventos com tempo de resposta longo ou com grande variao de
tempos de resposta. A Figura 5.9 ilustra uma janela de progresso de processamento.
92
Pea confirmao para aes destrutivas, tais como aes para apagar ou
sobrepor informaes ou para terminar a seo corrente do aplicativo.
Separe diferentes tipos de informao. Painis podem ser usados para este
fim.
93
Nunca requeira que o usurio entre com uma informao que possa ser
adquirida automaticamente pelo sistema ou computada por ele.
94
i.e., uma aplicao Web que no se enquadra no conceito de Aplicao Rica para Internet, conforme
discutido no Captulo 3.
95
uso de mltiplas representaes. Por exemplo, os mesmos dados estatsticos podem ser
apresentados em formato de um grfico de barras ou em uma planilha, usando
apresentaes diferentes. O grfico de barras e a planilha devem ser independentes.
Contudo, eles tm de se comportar consistentemente, isto , quando um usurio alterar a
informao na planilha, o grfico de barras deve refletir a troca imediatamente e viceversa, como ilustra a Figura 5.11 (GAMMA et al., 1995). Na soluo proposta pelo
padro observador, a apresentao atua como um observador do domnio do problema:
sempre que o domnio do problema alterado, ele envia um evento e a apresentao
atualiza a informao (FOWLER, 2003).
50
30
20
X
a = 50%
b = 30%
c = 20%
notificao de alterao
pedido de alterao
96
97
http://www.hibernate.org/
98
Nome
Marcos
Rita
Mnica
Mrcia
CPF
17345687691
56935101129
81176628911
91125769120
Dt-Nasc
11/04/66
21/02/64
01/11/70
20/10/80
Matrcula
0158
5295
7712
Funcionrios
Nome
Jos
Ricardo
Rosane
Cod-Depto
MAT
INF
INF
Chave Estrangeira
Figura 6.2 Exemplo de ligao entre tabelas, por meio de chave estrangeira.
99
Interesses
CPF-Pessoa CdigoAssunto
96100199
COMP
96100199
MUS
02765140
ENG
Assuntos
Cdigo
Nome
ENG
COMP
MUS
Engenharia
Computao
Msica
Cada tabela possui um nome, o qual deve ser distinto do nome de qualquer
outra tabela da base de dados.
Cada clula de uma relao pode ser vazia (exceto os campos de chaves
primrias) ou, ao contrrio, pode conter no mximo um nico valor.
Cada coluna tem um nome, o qual deve ser distinto dos demais nomes das
colunas de uma mesma tabela.
Um campo que seja chave estrangeira (ou parte dela) s pode assumir valor
nulo ou um valor para o qual exista um registro na tabela onde ele chave
primria.
100
Diagrama Relacional
#Dep #FunChefet
#Fun
Departamentos
Funcionrios
Funcionrios
Matrcula
Nome
13888
Jorge
00877
Dede
06001
Pedro
Relacionamento
(0,1)
(1,1)
(0,N)
(1,N)
101
102
103
objetos esto em uma nica tabela. O problema fundamental dessa soluo que, se as
subclasses tm muitos atributos diferentes, haver muitas colunas que no se aplicam
aos objetos individualmente, provocando grande desperdcio de espao no banco de
dados. Alm disso, sempre que um atributo for adicionado a qualquer classe na
hierarquia, um novo atributo deve ser adicionado tabela. Isso aumenta o acoplamento
na hierarquia, pois, se um erro for introduzido durante a adio desse atributo, todas as
classes na hierarquia podem ser afetadas e no apenas a classe que recebeu o novo
atributo.
No segundo caso, utiliza-se uma tabela para cada classe concreta na hierarquia.
Cada tabela derivada para as classes concretas inclui tanto os atributos da classe quanto
os de suas superclasses. Fowler (2003) descreve essa soluo como o padro Herana
em Tabela Concreta (Concrete Table Inheritance). A grande vantagem a facilidade de
processamento sobre as subclasses concretas, j que todos os dados de uma classe
concreta esto armazenados em uma nica tabela. Da mesma forma que o caso anterior,
a designao de ids facilitada, com a vantagem de se eliminar o desperdcio de espao.
Contudo, h tambm desvantagens. Quando uma superclasse alterada, necessrio
alterar as tabelas. Alm disso, quando h muito processamento envolvendo a
superclasse, h uma tendncia de queda do desempenho da aplicao, j que passa a ser
necessrio manipular vrias tabelas ao invs de uma.
A terceira soluo a mais genrica: utiliza-se uma tabela por classe, no
importando se concreta ou abstrata. Deve haver uma tabela para cada classe e vises
para cada uma das classes derivadas (subclasses). Fowler (2003) descreve essa soluo
como o padro Herana em Tabela de Classe (Class Table Inheritance). Essa
abordagem a que prov o mapeamento mais simples entre classes e tabelas. muito
mais fcil modificar uma superclasse e acrescentar subclasses, j que necessrio
apenas alterar ou acrescentar uma tabela. Uma desvantagem o grande nmero de
tabelas no banco de dados, uma para cada classe. Alm disso, pode levar mais tempo
para acessar dados de uma classe, uma vez que pode ser necessrio acessar vrias
tabelas. Podem ser necessrias mltiplas unies (joins) de tabelas para recuperar um
nico objeto, o que usualmente reduz o desempenho (FOWLER, 2003).
6.3.3 - Mapeando Associaes
Conforme discutido na introduo desta seo, h diferenas substanciais na
forma de lidar com relacionamentos nos modelos orientado a objetos e relacional.
Assim, fundamental mapear associaes em um modelo de objetos para um modelo
relacional. Associaes 1:1 e 1:N so mapeadas por meio da transposio de chaves.
Para tal, aplica-se o padro Mapeamento de Chave Estrangeira (Foreign Key Mapping)
(FOWLER, 2003). J associaes N:N requerem uma tabela associativa, com preconiza
o padro Mapeamento de Tabela Associativa (Association Table Mapping) (FOWLER,
2003). A seguir, algumas particularidades de cada um desses tipos de associaes so
discutidas.
Associaes 1:1
O mapeamento de associaes 1:1 feito transpondo-se a chave primria de uma
tabela para a outra. Quando a associao for obrigatria nas duas extremidades
(multiplicidade mnima 1 em ambas as extremidades), pode-se escolher qualquer das
chaves para transpor. Quando a associao for opcional em pelo menos uma das duas
104
extremidades (multiplicidade mnima 0), melhor transpor a chave que dar origem a
uma coluna mais densa, isto , que ter menos valores nulos. Este o caso do exemplo
da Figura 6.5. Outro fator a ser levado em considerao a navegabilidade da
associao. Sempre que possvel, deve-se transpor a chave que facilite a navegabilidade
escolhida. Por fim, bom frisar que sempre que a associao for obrigatria
(multiplicidade mnima 1), a coluna resultante da chave transposta no poder ter
valores nulos.
Associaes 1:N
O mapeamento de associaes 1:N feito transpondo-se a chave primria da
tabela correspondente classe cuja extremidade da associao tem multiplicidade
mxima 1 para a tabela que corresponde classe cuja extremidade da associao tem
multiplicidade mxima n, como ilustra a Figura 6.6. bom lembrar que sempre que a
associao for obrigatria (multiplicidade mnima 1), a coluna resultante da chave
transposta no poder ter valores nulos, como ilustra a Figura 6.6.
Associaes N:N
O mapeamento de associaes N:N feito utilizando-se uma tabela associativa,
uma vez que bancos de dados relacionais no so capazes de manipular diretamente
relacionamentos N:N. A Figura 6.7 ilustra este caso. Vale frisar que, muitas vezes, as
chaves transpostas so parte da chave primria da tabela associativa. Quando este for o
caso, elas so identificadas no modelo como sendo chaves primrias, como ilustra a
Figura 6.7.
105
106
107
http://java.sun.com/products/jdo
http://www.oracle.com/technology/products/ias/toplink
10
108
Leitura Complementar
Em (FOWLER, 2003), o Captulo 3 Mapping to Relational Databases
discute diversos aspectos do projeto da persistncia de objetos em bancos de dados
relacionais. Os padres discutidos nesse captulo so posteriormente apresentados em
detalhes nos captulos 10, 11, 12 e 13. Alm de aspectos discutidos neste texto, Fowler
trata vrios outros problemas relativos ao projeto da camada de persistncia, dentre eles
problemas relacionados com a recuperao de objetos e com conexes com o banco de
dados.
O Captulo 10 de (WAZLAWICK, 2004) Projeto da Camada de Persistncia,
trata do projeto da camada de persistncia, incluindo equivalncias entre modelos de
classes e modelos relacionais e aspectos relativos a como e quando os objetos sero
salvos e carregados do banco de dados.
109
110
112
deve ser aplicada a mtodos em que no intuitivo saber o que se espera deles ou
quando h regras de negcio especficas a serem tratadas.
Durante o projeto detalhado dos mtodos, deve-se levar em conta que projetistas
muitas vezes no conhecem os recursos da linguagem de programao adotada to bem
quanto os programadores. Por exemplo, as linguagens de programao oferecem uma
variedade de estruturas de dados, tais como vetores, listas, filas, pilhas, conjuntos,
mapas etc., e o projetista pode no fazer a melhor escolha em relao s estruturas a
serem utilizadas. O mesmo ocorre em relao ao projeto dos algoritmos. De fato, o
projeto de mtodos est na tnue fronteira entre o projeto detalhado e a implementao.
Assim, pode ser mais produtivo deix-lo por conta dos programadores, supervisionados
pelos projetistas.
113
114
Leitura Complementar
Em (BLAHA; RUMBAUGH, 2006), o Captulo 15 Projeto de Classes
aborda os temas discutidos neste captulo, com destaque para a seo 15.4 (Projetando
Algoritmos).
O Captulo 8 de (WAZLAWICK, 2004) Gerao de Cdigo apresenta regras
para a gerao de cdigo a partir do Componente de Domnio do Problema e aborda
vrios dos aspectos discutidos neste captulo.
Referncias do Captulo
BLAHA, M., RUMBAUGH, J., Modelagem e Projetos Baseados em Objetos com UML
2, Elsevier, 2006.
COAD, P., YOURDON, E., Projeto Baseado em Objetos, Editora Campus, 1993.
WAZLAWICK, R.S., Anlise e Projeto de Sistemas de Informao Orientados a
Objetos, Elsevier, 2004.
115
116
117
A Tabela A.1 apresenta o catlogo de padres proposto por Gamma et al. (1995).
Na sequncia, apresentada uma breve descrio de cada um dos padres.
118
Criativo
Mtodo-Fbrica
Estrutural
Adaptador (classe)
Comportamental
Interpretador
Mtodo Modelo
Objeto
Construtor
Adaptador (objeto)
Cadeia de Responsabilidade
Fbrica Abstrata
Composto
Comando
Prottipo
Decorador
Iterador
Singular
Fachada
Mediador
Peso-Mosca
Memorial
Ponte
Observador
Procurador (Proxy)
Estado
Estratgia
Visitador
Padres de Classe:
Padres de Objetos:
119
Singular (Singleton): garante que uma classe possui uma nica instncia e
prov um ponteiro global para acess-la.
Estado (State): permite que um objeto altere o seu comportamento quando seu
estado interno muda, fazendo parecer que o objeto mudou de classe.
120
121
interface, tais como janelas, botes, barras de scroll, etc. Para ser portvel ao
longo de diferentes padres de apresentao, uma aplicao no pode se
comprometer com um padro especfico.
Aplicabilidade:
Sistema deve ser independente de como seus produtos so criados,
compostos e representados.
Sistema deve ser configurado com uma dentre vrias famlias de produtos.
Uma famlia de produtos relacionados foi projetada para ser usada em
conjunto e esta restrio tem de ser garantida.
Estrutura:
Cliente
FbricaAbstrata
CriarProdutoA
CriarProdutoB
ProdutoAbstratoA
ProdutoA2
FbricaConcreta1
FbricaConcreta2
CriarProdutoA
CriarProdutoB
CriarProdutoA
CriarProdutoB
ProdutoA1
ProdutoAbstratoB
ProdutoB2
ProdutoB1
Participantes:
Fbrica Abstrata: declara uma interface para operaes criam objetosproduto abstratos;
Fbrica Concreta: implementa as operaes para criar objetos-produto
concretos;
Produto Abstrato: declara uma interface para um tipo de objeto produto.
Produto Concreto: implementa a interface abstrata de Produto Abstrato e
define um objeto-produto a ser criado pela Fbrica Concreta
correspondente.
Cliente: utiliza apenas as interfaces declaradas por Fbrica Abstrata e
Produto Abstrato.
122
FbricaDeObjetos
Grficos
Janela
CriarJanela
CriarBarraScroll
JanelaPM
FbricaMotif
FbricaPM
CriarJanela
CriarBarraScroll
CriarJanela
CriarBarraScroll
JanelaMotif
BarraScroll
BScrollPM
BScrollMotif
123
Estrutura:
Participantes:
Classe Abstrata: implementa um mtodo modelo, definindo o esqueleto de
um algoritmo e define operaes primitivas abstratas que as subclasses
concretas tm de definir para implementar os passos do algoritmo;
Classe Concreta: implementa as operaes primitivas para realizar passos
do algoritmo que so especficos da subclasse.
Colaboraes: A Classe Concreta conta com a Classe Abstrata que
implementa os passos que no variam do algoritmo.
Padres Relacionados:
Mtodo Fbrica: mtodos-fbrica normalmente so chamados por
mtodos-modelo;
Estratgia: enquanto os mtodos-modelo utilizam herana para variar
partes de um algoritmo, as estratgias usam delegao para variar o
algoritmo inteiro.
A 2.3 - Procurador (Proxy)
124
fi guraReal :
FiguraReal
desenhar( )
[figuraReal == null] c arregar( )
desenhar( )
125
Participantes:
Assunto: define uma interface comum para o ObjetoReal e para o
Procurador, de modo que o procurador possa ser usado no lugar do objeto
real;
Procurador: representa um substituto para o objeto real. Para tal, mantm
uma referncia ao objeto real, que o permite acessar este objeto. Sua
interface deve ser idntica do objeto real, de modo que possa ser por ele
substitudo. Alm disso, controla o acesso ao objeto real e pode ser
responsvel pela criao e excluso do mesmo. Outras responsabilidades
podem lhe ser atribudas em funo do tipo do procurador;
ObjetoReal: define o objeto real que o procurador representa.
Colaboraes: O procurador envia requisies para o objeto real, quando for
apropriado, dependendo do tipo de Procurador.
Consequncias: O padro Procurador introduz um nvel de indireo quando
se acessa o objeto. Essa indireo adicional tem muitos usos, dependendo do
tipo de procurador. Um Procurador Remoto, por exemplo, pode esconder o
fato de um objeto residir em um espao de endereamento diferente. Um
Procurador Virtual pode realizar otimizaes, como criar um objeto sob
demanda. Procuradores de Proteo e de Referncia Inteligente, por sua vez,
permitem tarefas adicionais de gerenciamento quando um objeto acessado.
Figura
126
0. .*
E ditorTe xto
des e nhar()
c arreg ar()
Figura Rea l
0. .*
desenhar()
carregar()
0..1
des e nhar()
c arregar()
des enhar()
{
if (figuraReal = = null)
figuraReal = carregar();
figuraReal.desenhar();
}
Padres Relacionados:
Adaptador: um adaptador prov uma interface diferente para o objeto que
ele adapta. O procurador prov a mesma interface.
Decorador: Um decorador adiciona responsabilidades a um objeto,
enquanto o procurador controla o acesso ao objeto.
A 1. 5 Observador (Observer)
127
50
30
20
X
a = 50%
b = 30%
c = 20%
notificao de alterao
pedido de alterao
128
Estrutura:
S ujeito
1
0 ..* Ob servador
atualiz ar()
S ujeitoConcreto
ObservadorConcreto
es tad o
estado
atribu ir Es tado() 1
obterE s tad o()
0..*
atualiz ar()
atualizar()
{
es tado = s ujeitoConcreto.obterE s tado
}
Participantes:
Sujeito: conhece seus observadores e prov uma interface para adicionar e
remover objetos observadores. Qualquer nmero de observadores pode
observar um sujeito.
Observador: define uma interface de atualizao para os objetos que
devem ser notificados das mudanas no sujeito.
SujeitoConcreto: armazena o estado de interesse para os observadores
concretos e envia notificaes para eles quando o seu estado alterado.
ObservadorConcreto: mantm uma referncia para um objeto
SujeitoConcreto, armazena o estado que deve ficar consistente com o
estado do sujeito e implementa a interface de atualizao do Observador,
de modo a manter seu estado consistente com o do sujeito.
Colaboraes: O sujeito concreto notifica seus observadores sempre que
ocorre uma alterao que pode tornar o estado de seus observadores
inconsistente com o seu estado. Aps ser informado de uma mudana no
sujeito concreto, um objeto ObservadorConcreto pode consultar o sujeito,
usando esta informao para reconciliar seu estado com o estado do sujeito.
: Cli ente
s ujeitoConc reto :
S ujeitoConc reto
129
ob servador1 :
ObservadorConc reto
...
obs ervadorN :
ObservadorConc reto
atribuirE s tado( )
notificar( )
atualizar( )
obterE s tado( )
...
atu aliz ar( )
obt erEs tado( )
130