-
UMA INTRODUO A PLATAFORMA NETBEANS
O presente documento tem como principal objetivo fornecer uma
breve descrio da plataforma netbeans, mostrando como possvel, a
partir de seus recursos, o desenvolvimento de aplicaes rich client.
A partir da, contextualizamos seus benefcios para uma perspectiva
de elaborarmos uma ferramenta grfica de modelagem
Daniel Interliche de Oliveira
Grupo de Estudos em interao do LTS Escola Politcnica da
Universidade de So Paulo
-
Uma Introduo ao Netbeans Platform
Breves consideraes
Este documento visa introduzirmos os conceitos envolvidos no
desenvolvimentos de aplicaes de alto nvel, pela utilizao da
plataforma Netbeans. Trata-se de uma pea chave para o
desenvolvimento do framework x-gov, j que traz diversas
funcionalidades que podem ser exploradas de modo a proporcionarmos
alta usabilidade no sistema. Abordamos aqui uma viso geral sobre
modelagem grfica, com uma breve descrio de alguns exemplos de
aplicao do conceito. Em seguida direcionamos nossa abordagem
explorando como utilizar o Netbeans Platform juntamente com a a
biblioteca visual library para a criao das FGM's. Finalmente,
fornecemos um panorama, uma breve descrio de como utilizaremos
estes conceitos no projeto X-gov.
1.Introduo ao Conceito de Modelagem Grfica
O objetivo de se trabalhar com ferramentas grficas de modelagem
reduzir o trabalho do desenvolvedor ao criar aplicaes. Todas as
bibliotecas necessrias para a execuo de determinadas tarefas so
manipuladas em uma camada intermediria, por meio de uma interface
grfica, que detm parte do esforo ou ainda parte do tempo que seria
gasto pelo programador para o desenvolvimento de determinadas
aplicaes. A camada intermediria provida de componentes grficos, que
auxiliam no desenvolvimento de rotinas sem a necessidade da
utilizao de tcnicas de programao, ou ainda o domnio de uma
determinada linguagem de programao. O conceito de modelagem grfica
utilizado pelos prprios IDE's, que utilizam recursos grficos para
simplificar a utilizao de determinadas bibliotecas. A ttulo de
exemplo podemos citar os recursos do Netbeans IDE para a
implementao de componentes palletes, utilizando a biblioteca swing
do Java. Um componente grfico criado, de forma que a programao
necessria para desenvolver uma aplicao deste nvel, como um
formulrio, mnima. Ou seja, os prprios IDE's exploram o conceito de
modelagem, sempre focando a simplificao de tarefas. importante
ressaltar quo poderoso pode ser a utilizao deste conceito, j que
podemos aliar tcnicas de programao com recursos grficos, e a partir
da criarmos uma plataforma de desenvolvimento de alto nvel. Alm
disto, podemos reaproveitar os recursos do prprio IDE para a criao
de plataformas de desenvolvimento de alto nvel. Este ltimo
conceito, definido aqui como programao modular, ser explorado com
mais detalhes mais adiante. A ilustrao abaixo fornece, a grosso
modo, a arquitetura das plataformas de desenvolvimento que iremos
lidar.
-
A plataforma de desenvolvimento, de acordo com a definio da
figura, pode constituir um framework de aplicaes.
2.Exemplos de Ferramentas Grficas de Modelagem
Vamos agora partir para uma abordagem mais prtica, procurando
ilustrar, por meio de exemplos, os usos finais do conceito de
ferramentas grficas de modelagem. A idia que se mostre como podemos
abstrair determinados task models atravs de interfaces grficas e
ferramentas interativas, com recursos visuais, constituindo assim
as FGM's. Note como estas podem ser uteis para implementar
usabilidade nos sistemas, proporcionando facilidade de uso.
The ConcourTaskTrees Enviroment
Realizado pelo ISTI/CNR (Institute of Information Science and
Technologies/National Research Council). A ferramenta, implementada
em JAVA 1.3 beta, traz funcionalidades grficas para o
desenvolvimento e analise de task models. O aplicativo a ser
desenvolvido abstrado numa estrutura denominada
ConcourTaskTree(CTT) que visa fornecer um fluxograma com o intuito
de organizar e analisar os modelos a serem implementados. A figura
abaixo ilustra como um sistema pode ser abstrado utilizando a
CTT:
As principais caractersticas da CTT so:
Focus on Activities: Possibilita o detalhamento de implementaes
de baixo nvel, ao
-
concentrar nas requisies do sistema referentes ao usurio
Hierarchical Structure: Fornece suporte na decomposio de tarefas em
vrios nveis
semnticos estruturando os problemas e classificando-os de acordo
com sua relevncia Graphical Syntax: Caracterstica que mais se
enquadra no contexto deste artigo. Uma
sintaxe grfica reflete a estrutura lgica do sistema em
desenvolvimento, utilizando para este fim recursos visuais
Concurrent Notation: Define relaes temporais entre as tarefas
Task Allocation: Utilizao de cones para indicao de tarefas e
descrio da performance
de processos ou entidades
A ferramenta, assim como mais informaes sobre o projeto pode ser
obtida no site oficial: http://giove.isti.cnr.it/ctte.html
Dialog-Graph-Editor
Ferramenta implementada como um Plugin do Eclipse, utilizando o
Eclipse Modeling Framework. Fornece suporte para o desenvolvimento
de interfaces grficas (UI's). Task Models so descritos por meio da
linguagem CTT. Utilizando as especificaes dos modelos como ponto de
partida, a ferramenta auxilia na distino entre ns que representam
dialog views (windows ou panels) e ns que representam a transio
entre os respectivos dialog views. Alm disto, pode-se encontrar
auxilio na criao de widgets (buttons, textfields, choiceboxes)
relacionando-os aos task models. Uma vez descrita todas as
especificaes e transies entre os componentes grficos, pode-se
gerar, automaticamente, a interface grfica propriamente dita,
utilizando recursos implcitos na ferramenta.
-
Este projeto possue uma caracterstica interessante, pois traz
consigo um conceito que ser utilizado no projeto X-gov, o conceito
de Plataforma, que ser abordado mais adiante. J adiantamos que
constitui uma tcnica moderna de programao, j que a aplicao utiliza
os recursos do Eclipse para criar um ambiente de desenvolvimento
independente. Poderamos ter desenvolvido uma ferramenta anloga
utilizando a plataforma Netbeans.
Cogenive
Facilita o desenvolvimento de ambientes virtuais interativos,
constituindo um framework Ambientes Virtuais. Utiliza a linguagem
CTT como forma de conectar os modelos ou entidades grficas, com
suas respectivas funcionalidades e correlaes.
-
3.Uma Introduo ao Conceito de Programao Modular
No contexto em que estamos trabalhando, importante explorar o
conceito de programao em mdulos, quais os seus benefcios e como
utiliz-lo. Trata-se de uma tcnica de programao moderna, que nos
permite reaproveitar cdigos j desenvolvidos por outras pessoas e
organiz-los de uma maneira estruturada. Diante disto, a pergunta
mais bvia que nos vem a a mente : o que um mdulo? Um mdulo consiste
numa estrutura que possui diversas funcionalidades,
disponibilizadas por um conjunto de bibliotecas. A priori no
entraremos em detalhes no que diz respeito a arquitetura de um
mdulo, por enquanto convm citarmos que sua estrutura detm posse de
arquivos de configurao, meta-data, formulao de estrutura,
organizador de dependncias, bibliotecas, servios, cdigos entre
outros componentes. Um aplicativo que utiliza o conceito de
programao orientada a mdulos constitudo por diversos mdulos,
organizados por uma estrutura central que gerencia a interao entre
suas funcionalidades, conforme ilustrado abaixo.
Os prprios IDE's fazem uso deste conceito. Por exemplo, o
Netbeans IDE pode ser estendido com a instalao de mdulos externos,
os plugins. Desta forma adicionamos mais funcionalidades a nosso
ambiente de desenvolvimento.
4.1.:Introduzindo a Plataforma Netbeans
No ultimo tpico introduzimos o conceito de programao modular,
como uma forma de organizar o cdigo de nossa aplicao, de modo que,
com esta prtica, possamos estruturar as diversas funcionalidades do
sistema em mdulos. A plataforma Netbeans consiste num aplicativo da
rea de trabalho genrica que fornece os servios comuns a todas as
grande aplicaes desta natureza como gerenciamento de janelas,
menus, configuraes e armazenamento, um gerenciador de atualizaes e
acesso a arquivo. Comear utilizando estes componentes permite que
nos concentremos totalmente na lgica comercial do sistema comercial
em desenvolvimento. Tecnicamente, a
-
plataforma Netbeans um amplo framework baseado em Swing que
proporciona o desenvolvimento de aplicaes rich client. O prprio
Netbeans IDE foi baseado na Plataforma Netbeans. J que estamos
contextualizando o conceito de aplicao modular, nos convm
definirmos o que seria um mdulo Netbeans: trata-se de um conjunto
de classes java que fornecem um recurso especfico a um aplicativo.
Pensando desta forma, podemos adicionar vrios mdulos de tal forma
que possamos agregar vrios recursos a nossa aplicao central.
possvel por meio desta tcnica, desenvolvermos um framework de
aplicaes em tempo hbil, sem perder tempo com suas funcionalidades
bsicas, e nos concentrando nas especificaes principais do
framework.
4.2.:Estrutura de uma aplicao Desenvolvida a Partir da
Plataforma Netbeans
Todo aplicativo realizado a partir da plataforma Netebeans detm
posse de um conjunto de mdulos essenciais para sua execuo, sendo
estes: Boodstrap, Module System, Startup, Utilities, Fyle System.
Este conjunto de mdulos denominado Runtime Container.
O mdulo startup onde est contido o mtodo main, sendo portanto,
necessrio para que a aplicao seja inicializada. Para ilustramos as
funcionalidades que a interao destes mdulos nos proporciona, vamos
criar uma aplicao central a partir da Plataforma Netbeans. No
Netbeans IDE crie um novo projeto clicando em New
Files>>Netbeans Module>>Netbeans Platform Application.
Em seguida nomeie o projeto como DemoApplication, clique em finish
para concluir. Em seguida v ao n do projeto, clique com o boto
direito do mouse e selecione Properties. Ao abrir o menu, clique em
libraries.
-
A janela acima mostra todos os Netbeans Modules disponveis,
organizados em clusters. Um cluster um conjunto de mdulos que
possuem alguma relao entre si. O nico que nos interessa neste
momento o platform9. Extenda o n do platform9. Em seguida ative
somente os mdulos contidos no runtime container, relembrando:
Boodstrap, Startup, Module System, Utilities, File System. Clique
em OK para finalizar a seleo dos mdulos. Execute a aplicao clicando
em run. Note na Output Window que nossa aplicao est rodando, apesar
de no possuir muitas funcionalidades.
Vamos agora criar nosso prprio mdulo, implementado uma
funcionalidade bsica: o famoso Hello Wolrd. Extenda o n do projeto.
Clique com o boto direito em Mdules>>Add New. Nomeie o Mdulo
como MyAPI, em seguida clique em Next. Em Code Name Base digite
org.myorg.myapi. Clique em finish para finalizar o processo de
criao do mdulo. Feito isso, j teremos nosso mdulo adicionado a
nossa aplicao.
-
Podemos observar na janela denominada 'Projects' como organizada
o conjunto de arquivos da aplicao. Na pasta Important
Files>>Module Manifest temos um arquivo que fornece as
especificaes do mdulo, como o pacote em que este est alocado, sua
verso, alm de declaraes de dependncia com outros mdulos (ainda no
adicionamos nenhuma).
No mesmo diretrio, Important Files, temos a pasta Project
Meta-Data. Por meio deste arquivo .xml podemos declarar as relaes
de dependncia com outros mdulos. Este processo tambm pode ser
automatizado, conforme veremos no prximo passo. V ao n do projeto e
clique com o boto direito>>Add New>>Module Installer.
Clique em finish. Podemos observar que uma classe java, de nome
installer.java, foi acrescentada ao pacote org.myorg.myapi. Esta
classe possue um mtodo, restored(), que ser acessado assim que a
aplicao for executada. Novamente v nas propriedades do
projeto>>Libraries e note que dois mdulos foram adicionados
como dependencias do nosso mdulo. Abra o arquivo manifest.mf e veja
que consta o acrcimo da classe installer.
Agora vamos verificar que a nova dependncia foi adicionada ao
arquivo Project.xml, automaticamente. Abra-o e verifique a nova
linha de cdigo:
-
Realmente, ao checarmos as propriedades do mdulo podemos constar
estas duas novas dependncias (vide prxima pgina).
Feito isso vamos adicionar nossa funcionalidade bsica. Substitua
a linha de comentrio do mtodo restored, da classe installer, pela
linha de comando:
System.out.Println(Hello World);
-
Execute a aplicao. Podemos verificar na Output Window o
resultado.
Este exemplo, apesar de simples, ilustra alguns conceitos bsicos
no tocante a estrutura de um mdulo, e como este se comporta em
relao a Plataforma Netbeans. claro que, aplicaes de alto nvel
demandam mais detalhamento tcnico em relao as API's disponveis, que
vo muito alm daquelas que formam o runtime conteiner. A figura
abaixo ilustra a relao entre uma aplicao qualquer relacionada ao
runtime conteiner, formando assim o escopo de nosso ambiente criado
a partir da plataforma Netbeans.
4.3.:Module System API
Frisamos, logo no inicio deste captulo, que o mdulo que
inicializa nossa aplicao o Startup, j que este possui o mtodo main.
Um outro mdulo importante, digno de nossa ateno, neste momento,
consiste no Module System API, responsvel pela relao e interao
entre os mdulos, com suas respectivas declaraes de dependncias, uns
para com os outros.
-
Na figura acima podemos notar que A declara dependncia em B.
Como conseqncia o mdulo A pode ter acesso a classes do pacote
com.myapp.api, porm no pode ter acesso a classes do pacote
com.myapp.impl. Essa interao organizada pelo mdulo Module System
API, conforme j declarado. A partir da detemos posse de um recurso
poderosssimo, que nos permite reaproveitarmos recursos provenientes
de diversos mdulos j existentes e interagirmos com nossa prpria
API, implementando funcionalidades em nossa aplicao.
4.3.:Demonstrando a Dinamicidade de Uma Aplicao Realizada a
partir da Plataforma Netbeans
O acesso a pacotes ou bibliotecas somente uma das formas de
interao entre mdulos. H um recurso, tambm bastante poderoso,
denominado Loockup API, que permite que possamos interagir uma
instncia criada em um mdulo. Ou seja, outros mdulos podem ter
acesso ao referido objeto, em seu estado atual. Desta forma,
diferentes interfaces podem ter acesso aquela instncia. Para
ilustrarmos o conceito vamos mostrar um exemplo de aplicao. No
Netbeans IDE, selecione New Project>>Netbeans
Modules>>Module Suite. Nomeie o projeto como SelectionSuite.
Temos agora nosso suite de aplicaes, que consiste em uma aplicao da
Plataforma Netbeans com todos os clusters disponveis internamente j
adicionados. Sendo o Platform9 somente um deles. Portanto, temos,
alm do runtime container, outros mdulos com diversas
funcionalidades agregados a nossa suite. Ao executarmos nossa
aplicao, veremos que o resultado um ambiente, com uma estrutura
similar ao Netbeans IDE. Todo o esquema de organizao de arquivos,
menus, janelas, j foi implementado, poupando-nos algum tempo no
desenvolvimento destas tarefas. Estenda o n do projeto, clique com
o boto direito em mdules>>Add New. Nomeie o mdulo como MyAPI.
Clique em Next. Em Code Name Base digite org.myorg.myapi Faa o
mesmo procedimento para adicionar mais dois mdulos, de nomes
MyEditor e MyView, com seus pacotes padres nomeados myeditor e
myview, respectivamente. A estrutura de nossa aplicao pode ser
visualizada na figura abaixo:
-
Vamos entender a dinmica de nosso exemplo. Temos o mdulo MyAPI,
em que iremos adicionar o cdigo da classe que representar nosso
objeto. O mdulo MyEditor instanciar a classe criada em MyAPI, e a
utilizar por meio de um servio que iremos fornecer, que poder ser
acessado por uma interface grfica. O mdulo MyView nada mais do que
uma interface grfica, no caso uma janela, que acessa o estado do
objeto, simultaneamente com nosso provedor de servios, e o
transmite visualmente, por um dysplay. Ou seja, no final teremos
duas interfaces grficas distintas utilizando a mesma instancia,
como se tivessem conversando entre si. Vamos tentar entender na
prtica como isso funciona. No pacote org.myorg.myapi encontrado no
mdulo org.myorg.myapi, adicione uma classe java, com o nome
APIObject. Este ser nosso objeto! Substitua o cdigo gerado
automaticamente pela linha de comando abaixo:
-
Rearranje o cdigo de acordo com as sugestes do Netbeans. Na
seqncia, v nas propriedades do projeto>>API Versioning. No
campo Public Packages selecione org.myorg.myapi. A partir de agora,
esse pacote tornou-se pblico, de modo que os outros mdulos podem
acess-lo.
Precisamos de uma declarao de dependncia nos mdulos MyEditor e
MyView, para que possamos acessar os recursos do mdulo MyAPI. Nas
propriedade dos respectivos mdulos v em libraries>>Add
Dependency e adicione MyAPI. Vamos agora criar nosso provedor de
servios, que ser a interface que mostra o estado atual de nosso
objeto. Para isso adicione mais duas dependncias ao mdulo MyEditor,
a saber: Utilities API e Windows System API.
Adicione dois JtextField ao nosso Jpanel, de nomes JtextField1 e
JtextField2, respectivamente.
O prximo passo agora criarmos um TopComponent, onde
adicionaremos os componentes de nossa aplicao. Mude a assinatura da
classe para:
Aceite as sugestes do Netbeans. Acrescente a linha de cdigo
abaixo no construtor de MyEditor:
-
A linha de cdigo associeteLookup torna a instncia 'obj' acessvel
pelo mtodo Myeditor.getLookup().
Para que possamos visualizar nosso componente na rea de trabalho
da aplicao vamos adicionar uma ao no menu principal. No n do pacote
org.myorg.myeditor, clique com o boto direito>>Add
New>>Action. No menu, clique em next. Nomeie a classe como
OpenEditorAction e a ao como Open Editor. Feito isto, adicione a
linha de comando abaixo ao mtodo actionPerformed():
Isto significa que cada vez que executamos a ao Open Editor
instanciamos a classe MyEditor, modificando seu estado atual. Ao
executarmos a aplicao podemos encontrar a ao adicionada disponvel
no menu principal:
-
A figura abaixo mostra como modificamos o estado atual do
objeto:
-
Conforme observado na figura acima, acionamos Open Editor 4
vezes, de modo que o atributo 'index', da classe APIObject, est num
estado que fixa seu valor em 4. O prximo passo ser criarmos uma
camada que recebe o objeto que est sendo consumido em MyEditor e
fornecermos seu estado atual por meio de uma interface grfica,
paralela a esta que criamos.
Selecione com o boto direito o n do pacote
org.myorg.myview>>New>>Window Component, que ser nossa
interface grfica. Em Windows Position selecione a opo Navigator.
Nomeie a classe como MyViewer. Agora temos o esqueleto de um
TopComponent, um componente nico denominado MyViwerTopComponent.
Arraste dois Jlabels, Jlabel1 e Jlabel2, respectivamente, para o
corpo do componente.
Clique em Source para ter acesso ao cdigo associado ao
componente. Modifique a assinatura da classe:
Implemente todos os mtodos abstratos. Modifique o cdigo fonte de
modo que elespossua os seguintes mtodos:
-
O mtodo resultChanged uma implementao de nosso LookupListener.
Toda a vez que o objeto APIObject sofre alguma alterao, os dois
Jlabel's tambm sofrero alterao, atualizando o estado de nossa
instncia. A partir de agora, cada vez que executamos a ao Open
Editor, as duas janelas fornecero o estado do objeto, como se
estivessem conversando, de forma que atuam paralelamente, conforme
ilustrado na figura abaixo:
-
Por meio deste exemplo, pudemos observar a estrutura bsica de
uma aplicao realizada a partir da Plataforma Netbeans. Alm disso,
esperamos ter explorado alguns aspectos relacionados ao conceito de
programao modular.
4.4:Contextualizando as FGM's com a Plataforma Netbeans
At agora denotamos quo poderoso pode ser fazermos usos da
Plataforma Netbeans, visto que esta proporciona o reaproveitamento
de recursos, permitindo-nos concentrarmos esforos no que realmente
interessa. Pois bem, aplicando este conceito, vamos focar um pouco
no que vamos desenvolver, a saber, as FGM's. Para isso utilizaremos
uma biblioteca grfica denominada Visual Library, um poderoso
recurso para aplicaes visuais. Antes de prosseguirmos vamos citar
rapidamente dois exemplos, de pequenos projetos desenvolvidos a
partir da Plataforma Netbeans, utilizando a Visual Library,
ilustrando assim a caracterstica principal deste tipo de aplicao,
que consiste na interao Interface Grfica-API.
Thinking-Rock
-
Ferramenta que visa a construo de fluxogramas, com o intuito de
organizar idias.
Poseidon for UML Ferramenta desenvolvida para fornecer suporte
ao desenvolvimento de UML cases.
Ambos os exemplos consistem em ferramentas grficas de
modelagens. Conforme pudemos notar, possvel modelarmos determinadas
situaes graficamente, de modo a proporcionarmos mais
-
usabilidade em nossa ferramenta.