Professional Documents
Culture Documents
Componentes de Software
ligar
velocidade
Motor
Boto
Marcador
parar
Figura 1. Exemplo de uso de componentes [DSouza & Wills, 1998, pg. 405]
O exemplo da Figura 1, tratado por DSouza & Wills [1998], ilustra a componentizao na
ligao de um motor a dois botes e a um marcador. Os mesmos botes e o marcador podem
ser reutilizados em outras situaes (por exemplo, utilizando o marcador para marcar a
temperatura) e estes componentes so substituveis por outros equivalentes, porm com
implementaes diferentes (por exemplo, substituindo os dois botes por uma chave ligadesliga ou o marcador analgico por um digital). A interoperabilidade assegurada pela
compatibilidade entre os conectores e as interconexes so feitas pelos fios eltricos. O
conjunto todo pode ser encarado como um componente de um sistema maior.
A componentizao de software visa trazer estes princpios para o desenvolvimento:
reutilizao, substituio e montagem. O desenvolvedor passa a desenvolver pedaos de
software encapsulados na forma de componentes para que outros desenvolvedores possam
Newsfeed
Planilha
Aplicao Web
Banco de Dados
Figura 2. Exemplo de uso de componentes de software [DSouza & Wills, 1998, pg 384]
DSouza & Wills [1998] exemplificam a composio de software atravs da situao ilustrada
na Figura 2. Uma aplicao l dados de um newsfeed sobre aes, registra em uma planilha e
passa os resultados a um banco de dados. O banco de dados compartilhado por uma
aplicao web, que extrai as informaes sob demanda. Cada componente relativamente
independente, compartilhado e utilizado para compor um sistema maior. Os componentes
disponibilizam interfaces para interconexo e podem ser substitudos por outros equivalentes.
Eventualmente, um componente, como a planilha, no precisa de interface com o usurio ou
de mecanismos de persistncia.
Brinquedo composto por partes encaixveis utilizado para montar construes, veculos, etc.
(http://www.lego.com)
explcitas e bem definidas para os servios que prov, (c) tem interfaces
explcitas e bem definidas para os servios que espera de outros, e (d)
pode ser utilizado para composio com outros componentes, sem
alteraes em sua implementao, podendo eventualmente ser
customizado em algumas de suas propriedades.
Councill & Heineman [2001, Um componente de software um elemento que est em conformidade
pg 7]
com um modelo de componentes e pode ser instalado
independentemente e composto sem modificaes.
Barroca et al. [2005]:
Unidade de software independente, que encapsula, dentro de si, seu
projeto e implementao, e oferece servios, por meio de interfaces bem
definidas, para o meio externo.
Tabela 1. Definies de componente de software
Neste trabalho, adotada a definio proposta por DSouza & Wills [1998], que enfatiza a
possibilidade de customizao e a necessidade de explicitar as interfaces fornecidas e
requeridas. Entretanto, as outras definies so consideradas, principalmente as de Szyperski
[1997], que diz que o componente uma unidade executvel 2 , e a de Councill & Heineman
[2001, pg 7], que diz que o componente segue um modelo de componentes. Apesar destas
duas caractersticas no estarem explcitas na definio proposta por DSouza & Wills [1998],
estes autores seguem esses conceitos ao longo do texto.
Componentes de software so utilizados nas mais diversas reas e com os mais diversos
propsitos. Um exemplo bastante conhecido o uso de plugins nos navegadores Web,
utilizados para dar suporte visualizao de contedos, como animaes flash, documentos
Word e vdeos diversos. Os plugins se comportam como componentes, pois so autocontidos, reutilizveis, substituveis, provem servios especficos de uma maneira coesa e
bem definida, seguem uma padronizao e so disponibilizados como uma unidade
executvel. Vrias aplicaes utilizam o suporte a plugins para estender as funcionalidades
nativas, como o Adobe Photoshop, Eclipse IDE e Apache web server.
Componentes visuais de interface com o usurio (widgets) outro exemplo bastante
difundido de uso de componentes. Alguns ambientes de desenvolvimento integrado (IDEs)
disponibilizam ao desenvolvedor um conjunto de componentes visuais que podem ser
utilizados para compor a interface com o usurio. O programador instancia e posiciona os
componentes, configura suas propriedades e associa mtodos a seus eventos, sem ter acesso
ao cdigo fonte.
Dada a elasticidade e o desgaste do termo componente, apropriado diferenci-lo de outros
conceitos e tecnologias para melhor caracteriz-lo. A seguir, o conceito de componente de
software comparado com os conceitos de mdulo, objeto, classe, biblioteca e API.
O conceito de componente similar ao conceito tradicional de mdulo, presente h bastante
tempo na engenharia de software. A modularidade de fato um pr-requisito para a
tecnologia de componentes [Szyperski, 1997, pg 33], que diferenciada pela existncia de
uma padronizao (component model) e de uma infra-estrutura especfica para seu
gerenciamento e execuo (component framework e container) [DSouza & Wills, 1998, pg
386].
Tambm h uma certa confuso entre componentes e objetos, principalmente porque a
maioria dos componentes implementada utilizando linguagens orientadas a objetos
[DSouza & Wills, 1998, pg 390]. Objetos so instncias identificveis criadas por um
2
Clemens Szyperski, na nova edio de seu livro, passou a caracterizar um componente como executvel, ao
invs de binrio, visto que o que relevante a capacidade de execuo em uma plataforma e no a forma de
empacotamento. O autor afirma que um componente pode ser eventualmente implementado na forma de um
script de cdigo.
Um componente no obrigatoriamente precisa conter classes [Szyperski, 1997, pg 31]. Um componente pode
conter cdigo escrito em outras tecnologias.
software pode ser construdo a partir de uma nica classe ou ser to complexo como um
subsistema [Ginenes & Huzita, 2005]. As definies apresentadas na Tabela 1, ajudam a dar
indcios sobre os critrios para considerar um pedao de cdigo como sendo um componente:
ele deve ser passvel de implementar e manter independentemente, coeso, no-trivial e com
uma funo clara no contexto da arquitetura, bem como passvel de separao, distribuio e
reutilizao.
Resumindo, no contexto do DBC, componente de software um elemento arquitetural
mapeado em um arquivo executvel, que segue uma especificao, e foi concebido para ser
auto-contido, reutilizvel, substituvel, alm de prover servios especficos de uma maneira
coesa e bem definida. Portanto, classificar algo como componente depende tambm de como
o cdigo foi concebido e construdo e como ele se relaciona com o restante do sistema, e no
somente da aderncia a uma padronizao. Vale ressaltar que na literatura costuma-se
encontrar alguns sinnimos para componentes, utilizados em contextos especficos, como
plugin, add-on, mdulo, servio e widget.
sendo que a maioria dos componentes nem documentam este tipo de requisitos [Gimenes &
Huzita, 2005]. Por fim, o desenvolvimento baseado em componentes tambm demanda uma
adaptao no processo de desenvolvimento, que passa a incluir etapas como anlise de
domnio, busca de componentes, testes especficos, etc.
Para um componente substituir outro, o substituto precisa prover ao menos os mesmos servios solicitados ao
original e no deve solicitar servios distintos dos que o anterior utilizava [DSouza & Wills, 1998].
Componente B
interface
requerida
InterfaceZ
interface
requerida
InterfaceY
Componente D
interface
fornecida
Componente C
interface
fornecida
As linguagens de programao orientadas a objetos atuais no oferecem suporte para a representao explcita
das interfaces requeridas [DSouza & Wills, 1998, pg 388].
passa a ser um conjunto de operaes que podem ser invocadas pelos clientes [Szyperski,
1997, pg 40]. Alguns modelos de componentes definem maneiras prprias para representar a
interface, como por exemplo a IDL do Corba.
Um componente pode implementar diretamente uma interface ou pode implementar objetos
que provem interfaces [Szyperski, 1997, pg 41]. Estes objetos so passados de componente
em componente, de modo que um componente no tem cincia da origem do objeto e do
cdigo sendo executado [Szyperski, 1997, pg 42]. Cdigo adicional, conhecido como
conector, pode ser inserido entre componentes para realizar converses simples de modo a
compatibilizar interfaces nos casos em que a substituio de tipos no suficiente.
Chama-se de instncia de componente, o conjunto de objetos pelos quais se manipula o
componente [Szyperski, 1997, pg 370]. Estes objetos so a manifestao do componente em
tempo de execuo [DSouza & Wills, 1998, pg 390]. Em alguns casos, a instncia do
componente serializada em um stream que tratado pelo container [DSouza & Wills, 1998,
pg 392].
Para utilizar um componente necessrio instal-lo (deployment) em uma infra-estrutura de
execuo. Esta instalao no pressupe a modificao do componente, entretanto, ele pode
ser customizado externamente [Heineman, 2000] [DSouza & Wills, 1998, pg 395]. A
customizao a habilidade de adaptar um componente antes de sua instalao ou uso,
normalmente com o objetivo de especializar seu comportamento [Weinreich & Sametinger,
2001, pg 42] [DSouza & Wills, 1998, pg xvii]. Como normalmente componentes so
desenvolvidos no estilo blackbox, revelando o mnimo possvel de sua implementao, as
maneiras mais comuns de customizar um componente atravs da modificao de
propriedades ou da composio com outros componentes que especializam determinados
comportamentos [Weinreich & Sametinger, 2001, pg 42].
Na customizao por composio, um componente passa a conter uma referncia a outro e
repassa a ele as chamadas das operaes. Um componente s depende da interface do outro, o
que caracteriza um reuso blackbox [Szyperski, 1997, pg 137]. No reuso blackbox, nenhum
detalhe, alm dos providos pelas interfaces do componente e por sua especificao,
disponibilizado aos clientes. Outra maneira de customizar o comportamento de um
componente modificando suas propriedades. Tcnicas para isto incluem passagem de
parmetros para seus mtodos, tabelas lidas pelo componente, configurao e opes no
deploy. Uma abordagem comum associar um arquivo descritor a um componente.
O arquivo descritor possibilita que o componente seja configurado sem que seja necessrio
recompil-lo [Szyperski, 1997, pg 33]. O arquivo descritor prov informaes sobre o
contedo do pacote, sobre as dependncias externas e sobre as configuraes do componente.
Esta descrio analisada pela infra-estrutura de execuo e usada para instalar e configurar
o componente adequadamente [Weinreich & Sametinger, 2001, pg 44].
Componentes podem ser blackbox ou whitebox, com as classificaes intermedirias de
graybox ou glassbox [Szyperski, 1997, pg 29]. No reuso whitebox, detalhes do cdigo interno
so liberados, possibilitando, por exemplo, o uso da herana para customizar o
comportamento do componente [Szyperski, 1997, pg 33]. Apesar de no ser recomendada, a
herana que ultrapassa as fronteiras do componente s vezes utilizada [Szyperski, 1997, pg
32]. Entretanto, esta herana cria uma dependncia e acoplamento direto entre as
implementaes das classes, o que vai de encontro s caractersticas de componentes.
[DSouza & Wills, 1998, pg 475] prope uma maneira de transformar heranas em
composies de objetos.
5.1
Modelos de Componentes
O termo component model equivalente ao termo component architecture definido por DSouza & Wills
[1998].
10
[Weinreich & Sametinger, 2001, pg 37] [Szyperski, 1997, pg 32] [DSouza & Wills, 1998, pg
396, pg 411]. Um component model tambm define padres para o component framework
associado.
O component model define o padro de descrio de interface [Weinreich & Sametinger,
2001, pg 39]. Alguns component models utilizam uma interface description language (IDL)
independente da linguagem de programao, enquanto outros valem-se de conceitos da
prpria linguagem ou da tecnologia para definir a interface, como o caso das interfaces OO.
Dependendo da IDL, interfaces podem incluir as excees que podem ser lanadas, prcondies e ps-condies para cada operao [Weinreich & Sametinger, 2001, pg 39].
Um componente deve ser unicamente nomeado [Weinreich & Sametinger, 2001, pg 40].
Alguns component models definem a existncias de identificadores nicos, como o caso do
COM Component Model. Outros modelos utilizam um espao de nomes hierrquico, como
o caso das tecnologias da Sun Microsystems, que utilizam o nome do domnio invertido.
Um component model deve definir quais so os padres de composio. Os tipos de
acoplamento mais comuns entre dois componentes so o de cliente/servidor e de
publicador/ouvinte [Weinreich & Sametinger, 2001, pg 43]. No primeiro, o cliente
explicitamente chama operaes do servidor e, no segundo, o ouvinte se registra como
tratador de eventos e informaes disponibilizadas pelo publicador. O component model
define tambm os tipos de conectores disponveis, que podem ser herdados da linguagem de
programao correspondente ou serem prprios da tecnologia de componentes, como no caso
do SOAP e IIOP.
Eventualmente, verses antigas e atuais de um componente tm que co-existir no mesmo
sistema. As regras e padres para a evoluo dos componentes e seu versionamento tambm
fazem parte do modelo de componentes [Weinreich & Sametinger, 2001, pg 44]. Um
component model tambm deve descrever como os componentes so empacotados e de forma
que eles podem ser individualmente instalados no sistema.
O component model tambm define o padro de deployment, que especifica a estrutura e a
semntica para os arquivos descritores. O component model define a maneira como feito o
deployment, incluindo o eventual registro do componente e da interface [Weinreich &
Sametinger, 2001, pg 45]. Tipicamente o deployment envolve trs passos: instalao do
componente; configurao do componente e do ambiente de execuo; e instanciao do
componente para uso [Councill & Heineman, 2001, pg 9].
Um projeto pode definir seu prprio component model independentemente ou como uma
especializao de um existente [DSouza & Wills, 1998, pg 411]. Os component models
genricos no provem um modelo de negcio especfico para um domnio. Ao especializar
um component model utiliza-se os servios de infra-estrutura transversais aos diversos
domnios [Weinreich & Sametinger, 2001, pg 37].
Por exemplo, a Object Management Architecture (OMA), definida pela Object Management
Group (OMG), prev a utilizao do CORBA como base para a construo de modelos de
componentes especializados. CORBAservices define a padronizao voltada para servios
gerais de sistemas distribudos, enquanto CORBAfacilities define a padronizao dos servios
horizontais (comuns a vrios domnios) [Weinreich & Sametinger, 2001, pg 46].
Alm da padronizao de servios de infra-estrutura, o modelo de componentes
eventualmente define tambm uma padronizao vertical [DSouza & Wills, 1998, pg 396]. A
padronizao vertical define um modelo de objetos que os componentes inter-operantes
compartilham e manipulam. Este modelo de objetos est ligado a um domnio especfico.
Normalmente, cada projeto define sua prpria padronizao.
11
H um tempo atrs, a OMG definiu padres para alguns domnios, como sistemas mdicos
(http://www.omg.org/docs/corbamed), finanas (http://www.omg.org/docs/finance), entre
outros. No h um padro especfico para o domnio da colaborao.
Corba Component Model (CCM), Microsoft OLE,(D)COM/COM+, Sun EJB, JavaBeans e
Webservice so alguns exemplos de componente models. Alguns modelos, como CORBA e
Webservices, possibilitam a reutilizao de componentes que no foram necessariamente
desenvolvidos na mesma linguagem de programao [Gimenes & Huzita, 2005]. Na subseo
seguinte, so apresentados alguns component models a ttulo de exemplo.
5.2
COM, DCOM e ActiveX so outros modelos de componentes utilizados pela Microsoft que
vieram da evoluo das idias do modelo original OLE [Brockschmidt, 1996]. Os modelos
do suporte a diversos nveis de complexidade de componentes e possibilitam a integrao de
aplicaes desenvolvidas por diferentes fabricantes. A soluo enfoca componentes binrios
que inter-operam.
A Microsoft definiu um padro para seus componentes de interface com o usurio (widgets),
disponibilizados atravs da linguagem Visual Basic. O modelo introduzido foi o VBX, que
posteriormente foi substitudo pelo OCX, pelo ActiveX e depois pelo COM. Atualmente, o
modelo de componentes do .NET unifica toda a tecnologia de componentes da Microsoft. A
Borland desenvolveu seu prprio modelo de componentes de interface. O CLX (Component
Library for Cross Platform) possibilita o desenvolvimento de aplicaes para o Microsoft
Windows e para o Linux atravs dos ambientes Kylix, Delphi e C++ Builder.
O CORBA (Common Object Request Broker Architecture) fornece um modelo de
componentes que possibilita a comunicao entre componentes distribudos. O CORBA
utiliza a IDL (Interface Definition Language) para descrever a interface pblica de seus
12
Para rodar estes componentes, necessria uma infra-estrutura de execuo especfica, que
cuida do ciclo de vida, agregao, segurana, configurao, persistncia, etc. Por exemplo, no
caso do Portlets, o container aciona os componentes que geram dinamicamente o contedo
exibido para o usurio, agregando a sada de cada um em uma nica apresentao.
Infra-estrutura de Execuo
13
Component framework um termo com diversos entendimentos na literatura. Neste trabalho, est sendo
seguida a definio proposta por [Szyperski, 1997]. Component Framework equivalente ao conceito de
component model implementation definido por [livro cbse, pg 7].
14
Kits de Componentes
Um component kit uma coleo de componentes que foram projetados para trabalhar em
conjunto [DSouza & Wills, 1998, pg 404]. Component kits so frequentemente utilizados
para construir interfaces grficas para aplicaes a partir de botes, formulrios, listas, etc. De
um kit de componentes gera-se uma famlia de solues, fazendo diferentes arranjos e
eventualmente desenvolvendo alguns sob medida [Wills, 2001, pg 309]. DSouza & Wills
[1998] ilustram a utilizao de component kits na eletrnica. A partir de um conjunto de
componentes interoperveis e que seguem uma padronizao, pode-se construir circuitos para
os mais variados propsitos.
15
Aplicao 1
Component A
Aplicao 2
Component B
Aplicao 3
Component C
Component D
Infra-estrutura
de execuo
Um toolkit um tipo de SDK (Software Development Kit), que apresenta, alm dos
componentes, um conjunto de ferramentas para criar aplicaes para uma determinada
plataforma, sistema ou framework. Os toolkits so mais comumente encontrados para
componentes de interface com o usurio, tambm chamados de widgets. Alguns exemplos de
toolkits de widgets para a linguagem Java so o AWT (Abstract Windowing Toolkit), Swing e
SWT (Standard Widget Toolkit).
Toolkits possibilitam que programadores desenvolvam software a partir de componentes
prontos, mesmo sem muita experincia de programao, no estilo das ferramentas RAD
(Rapid Application Development). Os toolkits favorecem a criatividade dos desenvolvedores,
o que fundamental para reas no bem estabelecidas. Ao encapsular detalhes de
implementao de baixo nvel, os toolkits liberam os desenvolvedores para pensar em novas
interfaces e mecanismos de interao, e possibilitam uma prototipao rpida para testar,
refinar e validar as idias.
Na literatura, muitas vezes o termo arquitetura tambm usado com outro sentido, para representar a infraestrutura da aplicao, em frases do tipo o componente interage com a arquitetura da aplicao.
16
383]. Fluxo de dados, mquina virtual, chamada de procedimento, MVC (Model View
Controller), cliente-servidor, peer-to-peer, blackboard, camadas e orientao a servios so
exemplos de estilos arquiteturais [Barroca et al., 2005, pg 17]. Cada estilo normalmente
enderea um aspecto especfico do sistema, sendo portanto possvel de utilizar mais de um
estilo na mesma arquitetura. Alm disto, cada componente de um sistema pode ter uma
arquitetura e estilo arquitetural prprios, desde que a parte externa do componente seja
compatvel com a arquitetura da aplicao.
Apesar da arquitetura ser nica, pode-se fornecer vrias vises sobre ela [DSouza & Wills,
1998, pg 483]. Cada viso enfoca um determinado aspecto da arquitetura, omitindo os demais
[Stafford & Wolf, 2001, pg 386]. Algumas vises so mais apropriadas para o
desenvolvimento do sistema, outras para o reuso, outras para o teste e implantao.
O desenvolvimento baseado em componentes considera pelo menos duas vises da
arquitetura: arquitetura de aplicao e arquitetura tcnica [D'Souza & Wills, 1998]. Na
arquitetura de aplicao, a preocupao com a estrutura dos componentes do domnio,
representando um projeto lgico de alto nvel independente da tecnologia de suporte. Nesta
arquitetura so mostradas a funo de cada componente no contexto do sistema e a interao
entre eles. A arquitetura de aplicao consiste de um conjunto de decises sobre a plataforma,
um conjunto de component frameworks e os mecanismos de interoperao entre eles
[Szyperski, 1997, pg 275]. A arquitetura tcnica considera os detalhes da tecnologia de
componentes a ser utilizada e totalmente independente do domnio da aplicao. A
arquitetura tcnica retrata as tecnologias de comunicao entre os componentes (TCP/IP,
ODBC, etc.) e aspectos referentes a escalabilidade e performance.
Representa-se a arquitetura para facilitar o entendimento, implementao, reuso e evoluo do
sistema [DSouza & Wills, 1998, pg 483]. Para isto utiliza-se uma ADL (Architecture
Description Language). Algumas vantagens do uso de uma descrio formal da arquitetura
so [Stafford & Wolf, 2001, pg 378]: melhoria da comunicao entre os envolvidos, que
passam a contar com uma descrio precisa; identificao de similaridades entre diversas
arquiteturas; explicitao das caractersticas e propriedades das arquiteturas; e documentao
e identificao de dependncias e inter-relacionamentos.
17
De acordo com este conceito, um arquivo de cdigo fonte, uma tabela do banco de dados, um
documento de ajuda, um arquivo de dados, um arquivo de iniciao, scripts etc., podem ser
considerados componentes. Na UML o propsito mais comum para o qual os componentes
so utilizados a modelagem de componentes de implantao que compe a implementao
do sistema. No DBC o termo componente representa um elemento arquitetural mapeado a um
executvel, que foi concebido visando a substitutibilidade, a reusabilidade e a
interoperabilidade, entre outros fatores. Entretanto, pode-se utilizar e estender a notao da
UML para representar componentes no contexto do DBC. Na Figura 9, a representao de um
componente na UML apresentada. Esta a notao adotada neste trabalho.
agent.class
kernel32.dll
ComponenteA
InterfaceX
ComponenteB
ComponenteB
+ operacao1() : int
+ operacao2(s : String) : boolean
+ operacao3(s : String) : String
18
Classe1
ComponenteA
Classe2
Componente
Componente
DSouza & Wills [1998, pg. 84] prope a utilizao de um component type para documentar
um componente. O component type tem duas partes: o modelo esttico que representa o
estado interno e as informaes trocadas nas chamadas de operaes e nas associaes (o que
o componente conhece e entende), e a especificao das aes e seus efeitos no componente,
usando o vocabulrio provido pelo modelo esttico, conforme pode ser observado na Figura
13.
Component Name
BusinessModelObjects
Operations
19
relacionados,
requisitos
no-funcionais,
10 Frameworks
O conceito de frameworks est intimamente relacionado ao de componentes, so conceitos
complementares que contribuem para a reutilizao de software [Gimenes & Huzita, 2005].
Um framework uma infra-estrutura reutilizvel de todo ou de parte de um sistema, com o
objetivo de ser instanciado para resolver uma famlia de problemas. As partes invariantes de
um domnio so implementadas no framework e reutilizadas nas instanciaes [Sommerville,
2003]. O framework oferece um arcabouo comum para um domnio de aplicaes,
promovendo a reutilizao do contedo conceitual do domnio de um software ou da soluo
de um problema [Gimenes & Huzita, 2005].
Ao definir uma arquitetura parcialmente implementada e encapsular detalhes de
implementao, o framework libera os desenvolvedores de terem que entender as
complexidades envolvidas com a soluo do problema e com o domnio utilizado [Pree,
1995]. O framework normalmente construdo por especialistas em um domnio particular e
utilizado por leigos naquele domnio [Lajoie & Keller, 1995]. A reutilizao proporcionada
pelo uso de um framework no atinge somente a implementao, se refletindo tambm na
anlise e no projeto do sistema.
Alguns frameworks so voltados para soluo de problemas ligados tecnologia, como
interface com o usurio, persistncia de objetos, suporte a MVC, etc. Outros frameworks so
voltados para um determinado domnio, como, por exemplo, aplicaes bancrias,
relacionamento com o cliente, etc. Estes frameworks so embasados em teorias e modelos do
domnio e definem uma arquitetura orientada para aquela rea de aplicao.
A utilizao de frameworks traz as vantagens associadas ao reuso de cdigo: aumento da
qualidade, reduo do esforo de implementao, direcionamento dos esforos para os
aspectos especficos da soluo, etc. Contudo, conforme discutido anteriormente, o reuso,
principalmente de cdigo proveniente de terceiros, pode trazer complicaes adicionais ao
desenvolvimento. No caso de framework, como muitas vezes ele que assume o fluxo da
aplicao 9 , para alterar os processos de execuo pode ser necessrio alterar o cdigo do
framework.
A construo de um framework no simples, e deve ser planejada para o reuso [Mattsson,
2000]. O framework deve ser: flexvel (reutilizar as abstraes em diversos contextos),
extensvel (permitir a adio ou modificao de funcionalidades) e compreensvel (bem
documentado, seguindo padres e provendo exemplos de utilizao) [Gimenes & Huzita,
2005]. Para desenvolver um framework, deve-se identificar e caracterizar o domnio do
problema e definir a arquitetura, o projeto da soluo e as maneiras de interagir e estender o
framework. Como muito difcil prever em um primeiro momento todas variabilidades e
requisitos de um framework, seu desenvolvimento normalmente feito iterativamente.
Um framework normalmente implementado de forma orientada a objetos, onde o
framework composto de classes abstratas e concretas, interfaces e arquivos de configurao.
Para especializar o framework utiliza-se herana, composio ou configurao. Os pontos de
extenso do framework so chamados hot-spots ou plug points [Johnson, 1997][Govoni,
9
A inverso de controle costuma ser usada em frameworks para reduzir o acoplamento entre a aplicao e o
framework. Este princpio chamado na literatura de princpio de Hollywood: No nos ligue, ns ligamos para
voc [Larman, 2002]. Ao invs da aplicao chamar o framework, o framework chama a aplicao em mtodos
pr-definidos.
20
11 Consideraes Finais
Nas linguagens de programao, o suporte ao reuso de cdigo iniciou-se com a possibilidade
do agrupamento de funcionalidade, onde linhas de cdigo so encapsuladas e rotuladas em
unidades denominadas procedimentos ou funes para serem reutilizadas em diversos pontos
do cdigo [Salus, 1998]. Com o tempo, passou-se a perceber a utilidade de agrupar funes
relacionadas na forma de bibliotecas, para serem reutilizadas entre aplicaes distintas.
Linguagens de programao orientadas a objetos aumentaram a possibilidade de reuso atravs
de unidades denominadas classes, que encapsulam dados e funes e possibilitam a herana
de cdigo e o polimorfismo de objetos. Da mesma maneira que a reutilizao de funes
especficas evoluiu para bibliotecas de funes, a reutilizao de conjuntos relacionados de
classes evoluiu para frameworks e componentes [Oliveira, 2001]. Um framework prov um
conjunto genrico de classes que deve ser completado para instanciar uma aplicao
especfica, enquanto o uso de componentes possibilita construir um sistema compondo-o a
partir de unidades de execuo.
A idia de que o software deveria ser componentizado surgiu na conferncia da NATO, que
lanou o termo engenharia de software, na Alemanha em 1968. Nesta conferncia, Doug
McIlroy [1968], em um artigo intitulado Mass Produced Software Components, levantou a
necessidade de agrupar coerentemente rotinas relacionadas de forma a montar componentes
que poderiam ser reutilizados em diversos sistemas. Esta reutilizao, alm de economizar
esforo de desenvolvimento, possibilitaria a produo de programas a partir de partes j
testadas e amplamente utilizadas [Gimenes & Huzita, 2005]. O surgimento dos componentes
21
para interface com o usurio, popularizado em 1992, com o Visual Basic eXtension, ou VBX,
ajudou a alavancar a utilizao de componentes [Oliveira, 2001]. Diversos estudos apontam a
tecnologia de componentes como promissora para melhorar o reuso e a manutenabilidade de
software [Szyperski, 1997, pg 18]
Componentes de software so auto-contidos (so relativamente independentes, fracamente
acoplados e encapsulam seu projeto e implementao, incluindo dados e funcionalidades);
reutilizveis (podem ser utilizados por terceiros, que no necessariamente precisam ter acesso
ao seu cdigo fonte); substituveis (podem ser trocados por outros componentes compatveis)
e provem servios especficos de uma maneira coesa, bem definida e padronizada. Um
componente de software pode ser desenvolvido e mantido independentemente e interage com
outros componentes ou com a infra-estrutura da aplicao. A orientao a objetos uma das
melhores maneiras de implementar componentes [Szyperski, 1997, pg 13] [DSouza & Wills,
1998].
A montagem de sistemas a partir de componentes est no meio termo entre configurao e
programao [Morch, 1997]. mais alto nvel que a programao, mas no to limitada como
a configurao. A componentizao oferece meios para evoluir e adaptar um sistema de uma
forma no to limitada quanto a customizao e no to complexa quanto a extenso. Atravs
do uso de componentes, o sistema pode evoluir medida que os processos de trabalho, as
necessidades e a experincia com o uso do sistema evoluem. Com componentes, reduz-se as
interdependncias amarradas fortemente no cdigo fonte da aplicao, melhorando a
extensibilidade e facilitando a adaptao e extenso.
Mesmo utilizando uma arquitetura de componentes, a interface da aplicao pode ocultar dos
usurios finais que o sistema foi desenvolvido baseado em componente. A componentizao
fica disponvel apenas aos desenvolvedores, que podem liberar diferentes verses da
aplicao alterando a configurao e o conjunto de componentes. Quando for necessrio
prover flexibilidade para o usurio final, pode-se disponibilizar a ele o conceito de
componente, bem como os mecanismos para instalar e desinstalar componentes da aplicao.
Estes componentes muitas vezes so do estilo plug & play, que imediatamente se tornam
disponveis para uso aps o deploy.
Ao utilizar o software baseado em componentes, o usurio aplica um conjunto de ferramentas
de sua escolha aos documentos e artefatos. Ao invs de apresentar ao usurio uma aplicao
que coloca um prego ou parafuso na parede, ele equipado com uma caixa de ferramentas
contendo, entre outras coisas, martelo, chave de fenda e parafusadeira, de onde ele pode
escolher qual a ferramenta mais adequada s suas preferncias e tarefa em questo.
Adicionalmente, ferramentas existentes podem ser combinadas para formar novas ferramentas
mais complexas para a realizao de tarefas especficas. Entretanto, esta flexibilidade para o
usurio final deve ser utilizada com cautela, pois abre espao para o usurio gerar
aberraes, combinando componentes incompatveis e destoantes.
12 Bibliografia
Apperly, H. (2001) The Component Industry Metaphor, in: Component-Based Software
Engineering: Putting the Pieces Together, Hineman, G.T. & Councill, W.T. (eds), AddisonWesley, ISBN 0-201-70485-4.
Barroca, L., Gimenes, I.M.S. & Huzita, E.H.M. (2005) Conceitos Bsicos, in:
Desenvolvimento Baseado em Componentes, Gimenes, I.M.S. & Huzita, E.H.M. (eds),
Editora Cincia Moderna, Rio de Janeiro, 2005. ISBN 85-7393-406-9, pg. 57-103.
22
Bass, L., Clements, P. & Kazman, R. (2003), Software Architecture in Practice, AddisonWesley 2003. ISBN: 0-321-15495-9
Booch, G. (1987), Software Components with Ada: Structures, Tools, and Subsystems.
Benjamin-Cummings, Redwood City, CA.
Booch, G., Rumbaugh, J. & Jacobson, I. (2000) UML: Guia do Usurio. Editoria Campus,
Rio de Janeiro. ISBN 85-352-0562-4
Brockschmidt, K. (1996) What OLE Is Really About, MSDN Archive, Microsoft
Comporation.
Disponvel
em:
msdn.microsoft.com/archive/
enus/dnarolegen/html/msdn_aboutole.asp
Brown & Wallnau [1996]
Clements, P. & Northrop, L. (2001) Software Product Lines Practices and Patterns.
Readding, Addison-Wesley, 2001.
Councill, B. & Heineman, G.T. (2001) Definition of a Software Component and Its Elements,
in: Component-Based Software Engineering: Putting the Pieces Together, Hineman, G.T. &
Councill, W.T. (eds), Addison-Wesley, ISBN 0-201-70485-4.
DSouza, D.F. & Wills, A.C. (1998) Objects, Components and Frameworks with UML: The
Catalysis Approach. Addison Wesley, ISBN 0-201-31012-0, 1998.
Gimenes, I.M.S. & Huzita, E.H.M. (2005) Desenvolvimento Baseado em Componentes,
Editora Cincia Moderna, Rio de Janeiro, 2005. ISBN 85-7393-406-9.
Govoni, D. (1999) Java Application Frameworks, Wiley & Sons, ISBN 0-471-32930-4.
Griss, M.L. (2001) Product-Line Architectures, in: Component-Based Software Engineering:
Putting the Pieces Together, Hineman, G.T. & Councill, W.T. (eds), Addison-Wesley, ISBN
0-201-70485-4.
Heineman, G.T. (2000), A model for designing adaptable software components, ACM
SIGSOFT Software Engineering Notes archive, Volume 25, Issue 1, January 2000, ISSN
0163-5948, pg 55-56
Houston, K. & Norris, D. (2001) Software Componentes and the UML, in: Component-Based
Software Engineering: Putting the Pieces Together, Hineman, G.T. & Councill, W.T. (eds),
Addison-Wesley, ISBN 0-201-70485-4.
Johnson R. (1997) Components, Frameworks Patterns .Symposium of Software Reusability
1997 USA.
Krueger, C.W. (1992) Software Reuse, ACM Computing Surveys, Volume 4 Issue 2 p131183.
Lajoie, R. & Keller, R.K. (1995). Design and reuse in object-oriented frameworks: Patterns,
contracts, and motifs in concert. In V. Alagar and R. Missaoui, editors, Object-Oriented
Technology for Database and Software Systems, pages 295-- 312, Singapore, 1995. World
Scientific
Mattsson, M. Evolution and Composition of Object-Oriented Frameworks, PhD Thesis,
Department of Software Engineering and Computer Science, University of
Karlskrona/Ronneby, 2000.
McIlroy, M.D. (1968), "Mass Produced Software Components", Software Engineering,
NATO Science Committee, pp. 138-150.
23
24