I. INTRODUCO
Este trabalho consiste no estudo sobre arquitetura de
software baseada em componentes de acordo com o livro UML
Components: A simple Process for Specifying ComponentBased Software [1]. Com base no livro a atividade proposta foi
trabalhar os conceitos aprendidos na disciplina de Tpicos
Especiais em Arquitetura de Software e utilizar a
componentizao de maneira prtica e com um problema real.
Como exemplificao para o estudo proposto discutido a
componentizao de um sistema Web que gerencia solicitaes
diversas em uma prefeitura de uma determinada cidade da
Regio dos Lagos. Ou seja, a proposta realizar um estudo de
caso sobre um sistema de gerenciamento de solicitaes de
muncipes a uma prefeitura de um determinado municpio.
A problematizao segue o seguinte pressuposto: Um
cidado ou simplesmente Solicitante entra com um pedido no
sistema, tal qual um servio de poda de rvore, um conserto ou
melhoria em sua rua ou bairro, etc. Existe um atendente que o
auxilia no processo de pedidos. O cidado realiza a solicitao
que relacionada a um determinado Assunto. Ao realizar uma
solicitao o cidado receber como comprovante uma
mensagem via e-mail ou SMS. Cada solicitao verificada e
encaminhada para um determinado setor na prefeitura. Cada
Setor pertence a um determinado Departamento e cada
Departamento pertence a uma determinada Unidade. Quem
acompanha o Andamento desse processo o Atendente. As
solicitaes devem estar relacionadas a um Ttulo (muncipe,
servidor, vereador, etc) indicando o papel que o solicitante
assume ao realizar a solicitao. Cada ttulo est associado a
uma Prioridade padro, mas esta prioridade pode ser alterada
pelo Atendente, se ele assim desejar.
A partir do estudo de caso, sero realizadas as tarefas de
especificao com o intuito de entender melhor o sistema e
b) Associaes
Tal como acontece com os atributos, associaes devem ter
visibilidade pblica. Usa-se navegabilidade (setas em
associaes) para indicar a responsabilidade por manter
associaes entre interfaces.
c) Significado de Atributo e Associao
importante lembrar que os modelos de tipo so modelos
de especificao. Em um modelo de tipo de negcio, um
atributo ou associao descreve um conjunto de dados
relacionados com o tipo nomeado no retngulo. Coletivamente,
os atributos e associaes definem um conjunto de consultas
que pode ser aplicado a um tipo ao escrever restries de
especificao em OCL. Eles so um vocabulrio formal para se
referir informao.
d) Atributos parametrizados
Um atributo parametrizado aquele cujo valor depende dos
valores de seus parmetros. Por exemplo, o nmero de contato
de uma pessoa pode ser dependente do dia da semana. Ento ao
invs de ter um atributo
contactNumber: String
podemos definir
contactNumber(day: Day): String
J que nosso esteretipo type no tem operaes (estes
pertencem s interfaces), isto deixa as "operaes" de type
disponveis para uso como atributos parametrizados. Elas
devem ser definidas como funes, sempre tendo um valor de
retorno. Pode ser til marcar essas operaes como atributos
usando um esteretipo como att.
2) Tipos de Dados Estruturados
Ns usamos as classes UML novamente para definir tipos
de dados estruturados e usamos o esteretipo datatype para
estes. Esse esteretipo define certas restries: O tipo de dados
no pode ter associaes, ou operaes, e atributos tambm
devem ser tipificados como tipos de dados (simples ou
estruturados). Durante a especificao de interface tambm
permitimos que atributos sejam referncias a objetos
componentes (ou seja, sejam do tipo interface).
3) Tipo Interface
Ns usamos uma classe estereotipada para representar uma
interface no nvel de especificao; o esteretipo chamado de
interface type. Tambm adotamos a conveno de prefaciar
os nomes das interfaces com "I".
4) Invariantes
UML define uma invariante como um esteretipo de
restrio, que se aplica aos classificadores e seus
relacionamentos. Para nossos propsitos, uma invariante ,
portanto, uma restrio em um modelo de tipo, e muitas vezes
usamos essas restries em modelos de tipo de negcio.
Costumamos escrever invariantes utilizando a OCL.
Uma invariante como uma regra sobre as instncias,
assim, no nvel de especificao muitas das invariantes
especificadas correspondem a regras de negcio.
G. Especificao de Interface
Uma especificao de interface uma interface em
conjunto com todos os outros apetrechos de especificao
necessrios para definir com preciso o que um componente
que oferece essa interface deve fazer, e o que um cliente dessa
interface pode esperar.
Uma especificao de interface consiste das seguintes
partes:
prprio tipo interface
2) Modelo de Informao
Um dos objetivos da modelagem de componentes definir
especificaes de interfaces relativamente independentes. Ao
especificar interfaces buscamos definir uma srie de modelos
de tipo independentes, uma para cada interface. Cada interface
tem sua prpria viso das informaes que necessita. Por esta
razo, ns chamamos esses tipos de Tipos de Informao, para
distingui-los dos tipos de negcios no modelo de tipo de
negcio, e ns damos-lhes o esteretipo info type.
Ns descrevemos o modelo de informao de uma interface
em um diagrama de especificao de interface. Ele mostra
todos os tipos no modelo de informao e um diagrama
fundamental durante as tarefas detalhadas de especificao de
operao. Assim, o modelo de tipo de negcio consiste de tipos
de negcios (e interfaces), ao passo que um modelo de
informao interface consiste em uma interface e um conjunto
exclusivo de tipos de informao.
3) Especificao da operao
Uma especificao de operao consiste em uma assinatura
e um par de pr e ps-condio.
a) Assinatura
Uma operao definida em uma interface tem uma
assinatura que inclui zero ou mais parmetros tipificados. O
tipo de um parmetro pode ser:
uma referncia a um objeto componente; o tipo do
parmetro ser tipicamente uma interface
um tipo de dados simples
um tipo de dados estruturado
uma coleo de qualquer um destes
b) Par Pr e Ps-condio
Em UML, pr e ps-condies da operao so definidas
como restries nessa operao, com os esteretipos
precondition e postcondition, respectivamente. So
expresses booleanas normalmente escritas em OCL. A ideia
que, se a pr-condio for verdadeira, a ps-condio tambm
deve ser verdadeira. Se a pr-condio for falsa, o
comportamento indefinido.
c) Comportamento Transacional
Um tpico importante na especificao de operaes de
sistemas de componentes distribudos o seu comportamento
transacional, mas isso no coberto em UML. Em sistemas de
informao empresariais praticamente tudo transacional. Por
conseguinte, a questo de especificao resume-se a se uma
operao inicia sua prpria transao ou executada em uma
transao existente. Uma vez que esta uma escolha binria,
podemos model-la simplesmente atravs da definio de um
esteretipo de operao para um dos casos. Ns escolhemos o
caso de iniciar uma transao nova e definimos um esteretipo
transaction para ele.
H. Especificao de Componente
Ns definimos uma especificao de componente como
outro esteretipo de classe, chamado comp spec. Assim
como a distino entre uma interface UML e uma classe
interface type, um componente UML realiza uma classe
comp spec.
Uma especificao de componente oferece um conjunto de
tipos de interface. Ao nvel de implementao essa relao
"ofertas" modelada como uma realizao de um conjunto de
interfaces de um componente. Ns, portanto, definimos um
novo esteretipo de dependncia UML chamado offers para
capturar essa relao importante.
A especificao de componente o bloco de construo de
uma arquitetura de componentes. Alm do conjunto de
interfaces que ele oferece, ela define o conjunto de interfaces
que ele deve usar. Esta uma restrio de arquitetura, no uma
escolha de design de componentes. Modelamos isso com uma
dependncia de uso UML simples. Uma dependncia de uso
entre uma especificao de componente e um tipo de interface
especifica que todas as realizaes do componente devem usar
essa interface.
Uma especificao de componente tambm define
quaisquer restries que ele necessita entre essas interfaces e
quaisquer restries sobre a execuo de suas operaes. Essas
restries de implementao de operao podem ser definidas
usando interaes de componentes.
I. Arquiteturas de Componentes
A arquitetura de componentes define um contexto no qual
as dependncias de uso da interface de especificaes de
componentes autnomos esto vinculados s dependncias
offers de outras especificaes de componente autnomos.
Assim, em vez de uma srie de especificaes de
componentes independentes, temos uma nica arquitetura de
componentes. Chamamos o tipo de diagrama mostrado na Fig.
8 de Diagrama de Arquitetura de Componentes. Este mostra
uma arquitetura de especificao de componente (podemos
dizer que a partir dos esteretipos comp spec). A mesma
forma (usando a notao padro UML de sublinhado para
instncias) pode ser usada para mostrar uma arquitetura objeto
componente.
Fig. 9. Diagrama de Atividade do Processo de Registro de Solicitaes
C. Casos de Uso
Um modelo de caso de uso descreve como diferentes tipos
de atores interagem com o sistema para resolver um
determinado problema. No trabalho sero considerados os
atores: Solicitante(cidado) e Atendente. Com isso, o modelo
descreve as metas a serem atingidas, as interaes entre os
usurios e o Sistema de Solicitao, bem como o
comportamento necessrio do sistema para satisfazer estas
metas.
1) Identificao de Casos de Uso
A Especificao de Caso de Uso criada tipicamente na
Fase de Elaborao numa maneira iterativa. Inicialmente,
somente uma breve descrio dos passos necessrios para
executar o fluxo normal do caso de uso (isto , que
2) Encaminhar Solicitao
A prxima interface do sistema que definimos a
IEncaminharSolicitao. No caso de uso Encaminhar
Solicitao realizado o envio da solicitao ao setor
correspondente para sua avaliao e futuro atendimento. Ao ser
enviada a solicitao o cidado receber uma notificao via email ou sms. As duas interfaces definidas at agora aparecem
na Fig. 16. At o momento elas no possuem parmetros
definidos para suas operaes. Deve ser visto que as interfaces
definidas se encontram na camada de servios do sistema, e
que so especficas para este sistema, ou seja, no so
tipicamente reutilizveis (embora sero bastante usadas nas
aplicaes requisitadas com o mesmo sistema subjacente). O
reuso de interfaces um dos propsitos das interfaces de
negcio.
4) Identificando Tipos-ncleo
Nessa fase decidimos quais tipos do modelo de tipo de
negcio ns consideramos como tipos-ncleo. O propsito de
identificar os tipos-ncleo comear a pensar e a trabalhar nas
informaes que so dependentes ou no de outras
informaes, podendo ou no atuarem sozinhas. Este um
passo importante em direo a alocao de responsabilidades
s interfaces. O tipo-ncleo de negcio dado como um tipo
de negcio que tem existncia independente dentro do negcio.
Os tipos-ncleo so indicados no modelo atravs do esteretipo
<<core>>. O esteretipo <<core>> absorve a semntica do
esteretipo <<type>>.
pkg
ISolicitanteMgt
IDepartamentoMgt
Solicitante
Solicitao
cmp
IGerarSolicitao
IEncaminharSolicitao
<<comp
spec>>
Agora vamos decidir
como
os componentes iro trabalhar
Sistema
de
Solicitao
em conjunto para fornecer a funcionalidade IGerarSolicitao
necessria.
Chamamos esta segunda etapa do fluxo de trabalho de
especificao, ilustrada na Fig. 25, de Interao de
IEncaminharSolicitao
Componentes.
ISolicitanteMgt IDepartamentoMgt
ISolicitanteMgt IDepartamentoMgt
<<comp spec>>
SolicitanteMgr
<<comp spec>>
DepartamentoMgr
No
seguinte
trabalho
IGerarSolicitao
e
IEncaminharSolicitao fazem parte de uma especificao de
componente.
2) Uma Arquitetura Inicial
O resultado at ento obtido um conjunto inicial de
especificaes de componentes, que inclui as interfaces e as
suas dependncias. Uma vez que no temos qualquer interface
sendo oferecida por mais de uma especificao de componente
no nosso exemplo, podemos ligar as dependncias de interface
das especificaes de componentes diretamente com as suas
interfaces de especificao de componente correspondentes. A
arquitetura de especificao de componentes resultante aparece
na Fig. 24.
<<comp spec>>
Sistema de Solicitao
itao
IGerarSolicitao
IEncaminharSolicitao
ISolicitanteMgt IDepartamentoMgt
<<comp spec>>
SolicitanteMgr
<<comp spec>>
DepartamentoMgr
IGerarSolicitacao::getDetalhesDepartamento
(in busca: String): DetalhesDepartamento[]
id:
D. Refinando as Interfaces
Durante a modelagem de interao, ns nos concentramos
principalmente na alocao de responsabilidade e descoberta
de operaes. recomendvel que o processo de descoberta
seja razoavelmente irrestrito em sua fase inicial. Depois
podemos trazer outros fatores para modificar as especificaes.
1) Fatorando Interfaces e operaes
Fatorar uma interface envolve particionar suas
responsabilidades entre duas ou mais interfaces. O objetivo
muito semelhante ao de subtipagem para separar o
comportamento geral do comportamento mais especializado.
Fatorar tambm se aplica s operaes no sentido de que
podemos buscar generalidade e no-redundncia em operaes
de interface se for o caso.
Grande parte da flexibilidade no projeto de sistemas
baseado em componentes vem do fato de que os componentes
podem oferecer mltiplas interfaces. Quando aparecem novos
requisitos, o suporte pode ser fornecido atravs da adio de
novas interfaces.
IX. ESPECIFICAO DE COMPONENTES
A. Especificando Interfaces
As interfaces constituem um conjunto de operaes. Cada
operao define algum servio ou funo que um componente
realizar para um cliente. Uma operao, no entanto, representa
um contrato com granularidade fina entre um cliente e o objeto
componente. A interface tida como uma unidade contratual
atmica, e em geral uma operao no prov um nvel
adequado de gerenciamento de dependncias. Nesse quesito
preciso algo que descreva um estado do objeto componente, j
que as operaes no tm aspectos estruturais para isso e sim
as interfaces. Em alguns casos preciso que uma interface seja
separada em duas para que possam ser melhores gerenciadas.
1) Especificao de operaes
Uma operao especifica uma ao individual que um
objeto componente realiza para um cliente. As especificaes
implicam em outras facetas, tais como os parmetros de
entrada que especificam a informao provida ou repassada
para o objeto; ou parmetros de sada que especificam a
informao atual/atualizada ou de retorno para o objeto.
Cada operao precisa especificar como as entradas, sadas,
e o estado do objeto componente so relacionados, e que efeito
chamar a operao tem nesse relacionamento.
2) Modelos de Referncia de Informao
preciso representar os estados dos objetos componentes
das quais as interfaces so dependentes. Ao fazer isso, cada
interface tem um modelo de informao de interface. Isso um
modelo de tipo, modelado no diagrama de especificao de
interface, dos possveis estados de um objeto componente aos
quais as operaes podem se referir.
O modelo de informao de interface desenvolvido de
maneira incremental de acordo com a criao das
especificaes de operao, adicionando os tipos, atributos e
associaes necessrias. Foram determinadas quatro operaes
para a interface ISolicitanteMgt. As operaes demonstram as
necessidades de um modelo de informao de interface para as
interfaces. Qualquer objeto que prov/requisita ISolicitanteMgt
detm informao sobre solicitantes. Para cada solicitante
3) Pr- e Ps-condies
Cada operao possui uma pr e ps-condio. Essa regra
define o efeitos da operao sem prescrever um algoritmo ou
tipo de implementao. Atuam na especificao nos detalhes
do que ser realizado pelas operaes bem como garantias para
a sua realizao.
A pr-condio a condio sob a qual a operao garante
que a ps-condio ser verdadeira. Se a pr-condio falsa
quando a operao invocada, o resultado simplesmente no
especificado.
B. Um Processo Sistemtico
O modelo de informao de interfaces um produto
derivado do modelo de tipo de negcio. O modelo que
representa o diagrama de responsabilidade de interfaces
(baseado em composies). IDepartamentoMgt visa a relao
entre departamentos e o gerenciamento de Solicitantes.
IDepartamentoMgt
responsvel por armazenar o
relacionamento entre Solicitaes e Solicitantes. Com
utilizao da ideia do diagrama de responsabilidade possvel
descrever o modelo de informao de Interface para
IDepartamentoMgt. Vale salientar que no modelo que aparece
na Fig. 34, IDepartamentoMgt no se preocupa
necessariamente com os detalhes de Solicitante e sim apenas
com a identidade de Solicitante. O modelo em questo visto
de maneira completa. importante observar que o tipo
Solicitante se encontra no pacote de IDepartamentoMgt e no
pacote de ISolicitanteMgt, porm os dois tipos se encontram
separados e so distintos, embora possam ser rastreados pelo
tipo Soliciante no modelo de tipo de negcio.
Fig.
36.
Snapshot
do
"after"
do
diagrama
de
instncias
para
IDepartamento::gerarSolicitacao()
Fig. 34. Diagrama de especificao de interface para IDepartamentoMgt
Fig.
35.
Snapshot
do
"before"
IDepartamento::gerarSolicitacao()
do
diagrama
de
instncias
para
REFERNCIAS
[1] J. Cheesman and J. Daniels, UML Components: A Simple
Process for Specifying Component-based Software. AddisonWesley, 2001.
[2] L. Bass, P. Clements, and R. Kazman, Software Architecture in
Practice. Pearson Education, 2012.
[3]