Professional Documents
Culture Documents
Resumo:
A tcnica de desenvolvimento baseado em componentes visa fornecer um
conjunto de procedimentos, ferramentas e notaes que possibilitem que, ao longo do
processo de software, ocorra tanto a produo de novos componentes quanto a
reutilizao de componentes existentes. Este captulo apresenta aspectos relevantes a
serem considerados no processo de desenvolvimento de software baseado em
componentes. O processo apresentado tem por base o mtodo Catalysis. A aplicao
utilizada como ilustrao um Gerenciador de Obras de construo civil.
Mestranda, DCA-FEE-Unicamp
6.1 Introduo
A engenharia de software tem por objetivo tanto a melhoria da qualidade dos produtos e
processos de software quanto o aumento da produtividade e reduo dos custos e
esforos para produo de software. Assim, a definio de tcnicas de desenvolvimento
de software que enfatizem princpios como extensibilidade, flexibilidade e
principalmente reutilizao, dentre outros, de grande relevncia no contexto da
engenharia de software.
A reutilizao um princpio importante uma vez que permite a construo de software
por meio de unidades bem especificadas e testadas. possvel pensar, tambm, na
reutilizao em nvel de artefatos resultantes do processo de desenvolvimento de
software (processo de software), como idias, conceitos, requisitos e projetos adquiridos
ou construdos.
A tcnica de desenvolvimento baseado em componentes visa fornecer um conjunto de
procedimentos, ferramentas e notaes que possibilitem que ao longo do processo de
software ocorra tanto a produo de novos componentes quanto a reutilizao de
componentes existentes.
Este captulo apresenta aspectos relevantes a serem considerados no Processo de
Desenvolvimento de Software Baseado em Componentes P(CBD5 ). Embora ainda seja
difcil especificar precisamente um PCBD, alguns modelos de processo tm surgido na
literatura. Particular ateno tem sido dada a abordagens mais recentes como o Processo
Unificado[JAC 99] e o Catalysis [DSO 99] [WIL 99]. Essas abordagens tm a
vantagem de utilizar, UML6 [RUM 99] [BOO 99] como notao bsica. Neste texto
exploramos um PCBD baseado nas idias do Catalysis.
A aplicao utilizada como ilustrao um Gerenciador de Obras de construo civil. O
objetivo do texto mostrar um PCBD guiado pelo Catalysis [DSO 99]7 , porm
destacando tambm os fundamentos bsicos de CBD, no necessariamente associados a
este mtodo. Ao longo do processo destacamos um subconjunto mnimo dos modelos
do Catalysis, por questes de simplicidade e espao.
A seo 6.2 apresenta o conceito de componente. A seo 6.3 apresenta uma descrio
sumria do sistema exemplo. A seo 6.4 apresenta um PCDB baseado no Catalysis. As
sees seguintes seguem as fases definidas no PCDB, apresentado na seo 6.4, que
so: especificao de requisitos, especificao do sistema, projeto da arquitetura e
projeto interno dos componentes. Finalmente, na seo 6.9, apresentamos os
comentrios finais.
6.2 Componentes
Um componente definido como uma unidade de software independente, que encapsula
dentro de si seu projeto e implementao, e oferece interfaces bem definidas para o
meio externo. Por meio destas interfaces, um componente pode se unir a outros
componentes e dar origem aos sistemas baseados em componentes [DSO 99]. Um
componente apresenta interfaces que separam sua especificao da implementao.
Essas interfaces no permitem que os usurios conheam os detalhes de implementao
do componente. A especificao de um componente , normalmente, publicada
separadamente de seu cdigo fonte por meio da especificao das interfaces oferecidas
por ele.
Componentes podem variar desde componentes construdos pelo cliente, ou
componentes adquiridos para um domnio especfico, at componentes Commercial
Off-The-Shelf (COTS). Componentes COTS so componentes genricos que podem ser
prontamente adquiridos no mercado (de prateleira). Existe uma grande motivao para o
uso de componentes COTS, mas para que o uso efetivo desses componentes se realize
ainda necessrio o desenvolvimento de mtodos mais precisos para sua produo e
utilizao [CAR 97].
Componentes de software podem ser constitudos por componentes mais simples, assim
o processo de construo de componentes pode ser considerado como recursivo. Nesse
contexto, um componente pode ser no apenas cdigo pronto para reutilizao mas
tambm unidades de projeto que tm significado prprio. A exemplo, frameworks
podem ser vistos como componentes flexveis, em nvel de projeto.
Para que a reutilizao de componentes seja possvel preciso que estes sejam
adaptveis. O projeto de um componente deve ser conduzido de tal forma que alm de
tornar a sua execuo correta e eficiente, deve ser genrico para que se torne adaptvel a
vrios propsitos e no somente ao propsito ao qual ser primeiramente aplicado
[DSO 99].
Muitas vezes pode ser til entender a distino entre objeto, no contexto do paradigma
de orientao a objetos, e componente. Um componente geralmente trabalha com outros
para apoiar uma particular ao em nvel de negcio (caso de uso) enquanto um objeto
geralmente representa uma instncia de um conceito do negcio[DSO 99]. A princpio,
o nvel de granulosidade de um componente maior do que o de um objeto.
Para uma ilustrao simples, a figura 6.10 mostra um sistema baseado em componentes
construdo a partir da paleta de beans (componentes) do VisualAge [ITE 99]. A
aplicao tem uma lista de partes e uma entrada para adicionar partes lista. Para
construir a aplicao so selecionados da paleta de componentes do VisualAge os
seguintes componentes: um campo de texto, dois botes, uma lista e dois rtulos. Estes
componentes so selecionados e adicionados na rea de projeto, podendo ser adequados
as suas cores, tamanhos e fontes, como o projetista desejar. Em seguida, os
componentes so associados s funes que devem realizar. Assim, o boto Exit e a
Janela da aplicao so associados ao mtodo dispose(), indicando que ao acionar o
boto ou o X no canto superior direito da janela, esta dever ser fechada. Da mesma
forma o boto Add associado a um mtodo add(string) da List of Parts, tomando como
entrada o string contido na caixa de texto com o rtulo Part.
Caixa de texto
Part
Add
List of Parts
Botes
Rtulos
Exit
dispose()
dispose()
Lista
Essas tarefas so executadas por mestre de obras, pedreiro, azulejista e eletricista. Para a
execuo dessas tarefas, deve-se definir e alocar os recursos materiais e humanos
necessrios, agendar essas tarefas, alm de monitorar a execuo destas tarefas.
Modelos de domnio
Especificao de
Requisitos
Contexto do sistema
Cenrios
Projeto de interface
do usurio
Especificao do
sistema
Modelo de tipos e
especificaes de operaes
Fluxo de dilogo,
prottipo, usabilidade
Plataforma,
arquitetura fsica
Projeto da arquitetura
Arquitetura de
aplicao lgica
Especificaes de
classe e interface
Projeto de
banco de dados
Mapeamento de classes,
transaes, etc.
Implementao e teste
Rota Construir
Construir 1
Refinamento:
mapeando da
especificao ao
domnio
Rota Montar
Montar 1
Construir 2
Montar 5
Especificao do sistema :
comportamentos e modelo de tipos
Modelo de domnio
do sistema
Refinamento, recuperao:
mapeamento dos componentes
internos para especificao do
sistema
Construir 3
Montar 4
Construir 4
Montar 3
Montar 2
Construir 5
Tipo de ao
Construir
Construir
Contratar
servio
Construtora
Realizar
obras
Pagar
servio
Cliente
Obra
Tipo de objeto
Construtora
Obra
Cliente
Gerente
Informar Andamento
Cliente
Gerncia de
Construo Civil
Estudar Viabilidade
Contratar Servio
Gerncia
Comercial
Gerenciar Obra
Requisitar Oramento
Realizar Pagamento
Gerncia
Financeira
Gerncia
Pessoal
Gerncia de
Materiais
Solicitar Material
Fornecedor
Possui
Cliente
Servio
Fatura
1..*
1..*
1..*
Administra
Reponsvel por
Contrata
Controla
1..*
1..*
Fornece
1..*
1..*
Utiliza
Material
Gerncia Financeira
Gerncia Comercial
Gerncia de Materiais
Viabilidade
Possui
Obra
1..*
1..*
1..*
Responsvel por
Aloca pessoas
Gerncia de Construo Civil
Fornecedor
Gerncia Pessoal
Projetar Arquitetura
Arquiteto
Elaborar Projeto
Hidrulico
Engenheiro
Eltrico
Projetar Estrutura
Rebocar
Engenheiro
Civil
Construir Alicerce
Levantar Paredes
<<inclui>>
<<inclui>>
<<inclui>>
Terraplanar e Alinhar
Terreno
<<inclui>>
<<inclui>>
Colocar Teto
Construir
<<inclui>>
<<estende>>
<<inclui>>
Telha de Fibra
Construir Telhado
Mestre de
Obras
Fazer Madeiramento
<<estende>>
Telha de Cermica
Pedreiro
Carpinteiro
Eletricista
Encanador
Note que o esteretipo <<inclui>> substitui o relacionamento esteretipo <<usa>> na verso mais
recente de UML. Veja [Rum99] e [Boo99] para detalhes e exemplos de utilizao.
10
O diagrama correspondente no contm a seta tracejada pois usamos uma verso anterior da ferramenta
Rational Rose que no suporta a seta tracejada.
Viabilidade
Implementa
0..*
Atende
Possui
Projeto
Arquitetnico
Necessidade_Cliente
1..*
1..*
1..*
Estrutural
Hidrulico
Eltrico
Telhado Cermica
Obra
Telhado Fibra
1..*
Terraplanagem
Alicerce
Paredes
Teto
Madeiramento
Desempenho
Avalia
Possui
Custo
1..*
Utiliza
Material
1..*
0..*
Registra
Reboco
arquiteto
Estima
Tarefa
1..*
Telhado
Emprega
Agenda
engenheiro eltrico
engenheiro civil
Registro de Execuo
mestre de obras
1..*
Possui
Pessoa
0..*
Cargo
0..*
pedreiro
eletricista
encanador
carpinteiro
Arquiteto
Projetar
Arquitetura
Implementa
Atende 0..*
Possui
Projeto
Arquitetnico
Necessidade_Cliente
Estrutural
Auxiliar
Pedreiro
na construo
1..*
1..*
1..*
Hidrulico
Eltrico
TelhadoCermica
Obra
TelhadoFibra
1..*
Terraplanagem
Elaborar
Engenheiro Eltrico Projeto
Eltrico
Alicerce
Paredes
Teto
Madeiramento
Desempenho
Avalia
Possui
Custo
1..*
Utiliza
Material
1..*
0..*
Registra
arquiteto
Estima
Tarefa
1..*
Telhado
Emprega
Agenda
Reboco
Realizar
Instalao
Eltrica
Eletricista
engenheiroeltrico
engenheiro civil
RegistrodeExecuo
Projetar e
Monitorar
Engenheiro Civil
a Construo
mestre de obras
1..*
Possui
Pessoa
0..*
Cargo
0..*
pedreiro
Realizar
Instalao
Encanador
Hidrulica
eletricista
encanador
carpinteiro
Conduzir
Mestre de Obras a Construo
Fazer
Madeiramento Carpinteiro
do Telhado
type
Custo
-custo_final : Real
-padro : enumerate = (A, B, C, D)
+estabelece_padro(padro_escolhido : enumerate)
+estabele_custo_individual(valor : Real)
type
Obra
-nome : String
-custo_total : Real
+insere_tarefa(nova_tarefa : Tarefa)
Elaborando
Projetos
Arquiteto e Engenheiro
Eltrico
Definindo e
Alocando
Recursos
Engenheiro Civil
Agendando
Tarefas
Monitorando
Tarefas
Executando
Tarefas
Mestre de Obras
Construtores
Elaborando Projetos
Agendando Tarefas
Seleo e execuo
de tarefas
Executando Tarefas
Execuo de tarefas
Monitorando Tarefas
Acompanhamento da
execuo de tarefas
Definindo Tarefas
Agendando Tarefas
Elaborando Projetos
Cargo
Projeto
Executando Tarefas
Tarefa
Monitorando Tarefas
Tarefa
Viabilidade
Tarefa
engenheiro eltrico
Custo
Agenda
Pessoa
engenheiro civil
Pessoa
Necessidade_Cliente
Registro de Execuo
Cargo
Desempenho
mestre de obras
Tarefa
pedreiro
eletricista
Material
encanador
carpinteiro
Definindo Tarefa
Telhado Cermica
Terraplanagem
Alicerce
Paredes
Teto
Madeiramento
Telhado Fibra
Telhado
Tarefa
Projeto
Arquitetnico
Estrutural
Hidrulico
Eltrico
Reboco
Framework de Modelo consiste na traduo, utilizada neste trabalho, para o termo Model Framework
apresentado pelo mtodo Catalysis.
12
Esse pacote genrico chamado no Catalysis de Framework ou Template Package.
PKG_AG_TAREFAS
FrSenha
Gerente de
Projeto
<FrCargo>
Engenheiro de
Software
-Car_Nome : String
+Valida()
+Car_Remove()
+Car_Cria()
+Car_Altera()
Utiliza
Visualizar agenda
individual
0..n
0..n
Possui
<FrProjeto>
<FrIntAgenda>
<FrAtor>
Agendar tarefas
Visualizar todas as
tarefas agendadas
-TFAtor : String
-TFCargo : String
-TFPai : String
-TFTarefa : String
-TFProjeto : String
-TFData_Ini : String
-TFAndamento : String
-TFData_Ter : String
-TFStatus : Slider
+Aplicar()
+Cancelar()
+Remover()
+Adiar()
+Agendar()
+Ver_Alteracoes()
+Visualizar()
+Status()
+Atualiza_Pai()
+Desabilita()
+Inicia()
+Restaura()
+Sair()
-Ator_Nome : String
-Ator_Login : String
-Ator_Senha : String
+Ator_Remove()
+Ator_Cria()
+Ator_Altera()
1..n
Possui
-Pro_Nome : String
+Pro_Remove()
0..n
+Pro_Cria()
+Pro_Altera()
1..n
1..n
Possui
1
Possui
<FrAgenda>
-Ag_Status : Int
-Ag_Data_Inicio : String
1..n -Ag_Data_Termino : String
-Ag_Andamento : Int
-/Ag_Duracao : Int
+Get_ID_Ator()
+Get_ID_Processo()
+Get_ID_Cargo()
+Get_ID_Tarefa()
0..n
1..n
<FrTarefa>
-Tar_Nome : String
+Tar_Remove()
+Tar_Cria()
+Tar_Altera()
Cargo
Obra
FrCargo
FrProjeto
PKG_AG_TAREFA
refa
FrTa
Tarefa
FrIntAgenda
AgendaConsCivil
Agenda
FrAgenda
FrAtor
Pessoa
componentes: qualquer elemento que realiza uma tarefa bem definida, como
definido anteriormente;
portas: as interfaces expostas que definem os plugs (tomadas) e soquetes dos
componentes, locais por meio dos quais os componentes oferecem acesso aos
seus servios e a partir dos quais eles acessam os servios de outros. Um plug
pode ser conectado a qualquer soquete do tipo compatvel usando um conector
adequado;
conectores: as conexes entre portas que permitem a montagem de uma
coleo de componentes para construir um produto de software ou um
componente maior. Conectores conectam portas.
Componentes Heterogneos
Componentes heterogneos so componentes que no foram projetados para trabalhar
em conjunto e que, no, foram necessariamente especificados para trabalhar em um
outro software que no aquele para o qual ele empregado. Esse tipo de componente
pode ser utilizado em um sistema que no segue um tipo de arquitetura como definido
no item anterior pois ele no tem portas e conectores standardizados.
O projeto de um sistema com componentes heterogneos mais complexo devido s
dificuldades inerentes insero de um componente em uma arquitetura para o qual ele
no foi projetado. No exemplo apresentado na figura 6.3, a rota montar pode ser seguida
no projeto desse tipo de sistema, fazendo assim uma definio preliminar de requisitos
para depois encontrar os componentes heterogneos adequados para atender, o mais
prximo possvel, os requisitos definidos.
O ponto chave neste tipo de composio encontrar uma arquitetura ad hoc que permita
a interoperao dos componentes. Componentes adicionais (glue components) podem
ser incorporados para executar funes complementares ou melhorar os servios
oferecidos pelos componentes conectados.
6.8.2 Exemplos
A figura 6.18 [DSO 99, WIL 99] ilustra a composio de um kit componentes por meio
de um sistema de componentes que simula uma coleo de peas de hardware.
O motor tem duas portas incia e para que recebem informaes dos botes aos quais
esto conectadas. Alm disso, tem uma porta de sada velocidade que est conectada a
um medidor. A conexo entre os botes e o motor indica um tipo de conector em que a
ocorrncia gerada por um compone nte ativa um mtodo de outro componente enquanto
a conexo entre motor e medidor indica um tipo de conector por meio do qual um par de
valores mantido continuamente em sincronizao.
apertado
Boto
inicia
velocidade
valor
Motor
Medidor
para
Boto
apertado
Departamentos
Pedidos de compras
Crdito disponvel
Materiais Comprados
Oramentos
solicitados
Finanas
Compras
Oramento escolhido
Fornecedores
Faturas
Pagamentos
Vaor gasto
A agenda apresentada na seo anterior pode ser vista como um componente, conforme
ilustra a figura 6.20. Nesta viso uma aplicao qualquer envia solicitaes de
agendamento que so controladas pela agenda. A agenda utiliza os servios de um
gerenciador de banco de dados para armazenar as informaes do projeto. Alm disso, a
agenda pode prover interfaces adicionais para plug-ins que adicionam ou adaptam o
comportamento das interfaces primrias.
Uma das vantagens do desenvolvimento baseado em componentes est na possibilidade
de reutilizao em vrios nveis, desde a especificao at ao cdigo. No entanto, para
tornar um componente reutilizvel necessrio que o projeto dele seja desenvolvido de
forma a torn- lo ao mesmo tempo genrico e adaptvel. A generalizao necessria
para capturar aspectos comuns de diferentes contextos, enquanto a possibilidade de
adaptao importante para permitir a especializao necessria do componente,
Ambas as propriedades aumentam assim o potencial de reutilizao do componente.
A reutilizao pode-se dar tanto em nvel de componentes como em nvel de
frameworks. Na reutilizao de componentes sabe-se unicamente a especificao das
interfaces, desconhecendo-se o que quer que seja de sua implementao. No entanto, a
reutilizao em nvel de framework requer adaptaes e instanciaes. A vantagem
que este tipo de framework pode ser adaptado a vrias aplicaes ainda em nvel de
projeto.
A possibilidade de reutilizao de frameworks reconhecida a partir do estgio de
projeto da arquitetura do software. Assim, como mencionado na seo 4, deve-se iniciar
com a modelagem do domnio e especificao de requisitos, e reconhecida a
possibilidade de reutilizao, deve-se retroceder para realizar possveis ajustes nos
requisitos decorrentes da reutilizao.
plug-ins
Solicitaes de
Agendamento
Aplicao
Agenda de
Tarefas
Solicitaes de
armazenamento e
recuperao de dados
Servidor de
Banco de
Dados
6.10 Bibliografia
[ALE 77] ALEXANDER C. et al., A Pattern Language, Oxford University Press,
1977.
[BAR 96] BARROCA, L., HENRIQUES, P. R., A framework and Patterns for the
Specification of Reactive Systems, in the Proceedings of the EuroPLoP96, July
1996.
[BAR 97] BARROCA, L., HENRIQUES, P. R., Frameworks for the Application of
Development Methods . Dept of Computing, The Open University, Inglaterra, 1997.
[BAR 99a] BARROCA, L., HALL, J., HALL, P., Ed., Software Architectures
Advances and Applications , Springer-Verlag, Londres, 1999.
[BAR 99b] BARROCA, L., HALL, J., HALL, P., An Introduction and History of
Software Architectures, Components, and Reuse, in [BAR 99a].
[BAS 98] BASS, L., CLEMENTS, P., KAZMAN, R., Software Architecture in
Practice, Addison-Wesley, 1998.
[BOO 99] BOOCH, G., RUMBAUGH, J., JACOBSON, I., The Unified Modeling
Language Users Guide , Addison-Wesley Publishing Company, 1999.
[BUS 96] BUSCHMANN, F., et al., Pattern-Oriented Software Architecture - A
System of Patterns , John Wiley & Sons, 1996.
[CAR 97] CARNEY, D., Assembling Large Systems from COTS Components:
Opportunities, Cautions, and Complexities, SEI Monographs on the Use of
Commercial Software in Government Systems, http://www.sei.cmu.edu/cbs/papers,
ltimo acesso: 16/11/1999.
[DSO 99] DSOUZA, D., WILLS, A., Objects, Components and Frameworks with
UML The Catalysis Approach, Addison-Wesley Publishing Company, 1999.
[GAM 95] GAMMA, E., HELM, R., JOHNSON, R, VLISSIDES, J., Design Patterns:
Elements of Reusable Object-Oriented Software , Addison-Wesley, 1995.
[GAR 95] GARLAN, D., PERRY, D. E., Introduction to Special Issue on Software
Architecture , IEEE Transaction on Software Engineering, April, 1995.
[GIM 94] GIMENES, I. M. S. Uma Introduo ao Processo de Engenharia de Software.
XII Jornada de Atualizao em Informtica. XIV Congresso de Sociedade
Brasileira de Computao., Julho, 1994.
[GIM 97] GIMENES, I. M. S., CIFERRI, C. D. A., NANNI, E. L., SABIO, S. B., An
Object Oriented Method for Designing Sharable Data Schemas in Software
Engineering Environments, Revista UNIMAR, Cincias Exatas e da Terra ,19 (4),
ISSN: 0100-9354, pags. 937-953, 1997.
[GIM 99] GIMENES, I. M. S. WEIS, G. M. HUZITA, E. H. M., Um Padro para
Definio de um Gerenciador de Processos de Software, in Proceedings of the II
Workshop Ibero Americano de Engenharia de Requisitos e Ambientes de Software,
San Jos, Costa Rica, Maro, 1999.