Académique Documents
Professionnel Documents
Culture Documents
[Tutorial] Artigo no estilo tutorial passo-a-passo. [Boas Prticas] Um dos objetivos da revista levar para o leitor [Minicurso] Srie de artigos apresentando o desenvolvimento de
no somente as melhores tcnicas, mas tambm as melhores pr- aplicaes e/ou o ensinamento de tecnologias Java.
[Core] Tcnicas Server-side, ferramentas, IDEs, e outros assuntos ticas de desenvolvimento, orientadas ao aumento da qualidade e
que fogem s demais categorias. produtividade. [Engenharia de Softaware] Artigo dentro do contexto de
Engenharia de Software: anlise, design, testes, metodologias
em geral.
Editorial
D
esenvolver aplicaes desktop sempre um desafio para quem est iniciando no
Java. Conhecer as terminologias, saber onde implementar as funcionalidades,
utilizar os elementos visuais para criar uma boa inferface com o usurio, qual
Ano I Edio 08 2011 layout adotar, so algumas das muitas dvidas que enfrentamos neste to importante
momento. Para nossa tranquilidade, muitas destas questes so facilitadas atravs do uso
de uma IDE, e sobre isso que preparamos uma matria para destaque desta edio.
O artigo O IDE NetBeans Parte 3 trata da criao passo a passo de uma pequena
aplicao Swing usando recursos do IDE NetBeans estudados nas etapas anteriores,
Edio alm de mostrar como customizar o cdigo gerado pelo NetBeans. O estudo de caso
Editor complementado com uma apresentao dos gerenciadores de layout, que tornam o esforo
Eduardo Spnola (eduspinola@gmail.com)
consumido no desenho das interfaces grficas bem mais leve.
Produo Durante o desenvolvimento de aplicaes, muitas vezes avanamos na codificao
Jornalista Responsvel Kaline Dolabella - JP24185 acreditando que estamos fazendo as mudanas corretas e que ao final o sistema ir
funcionar corretamente. No entanto, nem sempre isso acontece. E ento, o que voc faz?
Atendimento ao leitor
Tenta resolver os novos problemas ou faz um esforo para se lembrar de tudo o que mudou
A DevMedia possui uma Central de Atendimento on-line, onde voc pode
tirar suas dvidas sobre servios, enviar crticas e sugestes e falar com um de para fazer o sistema voltar a funcionar? Controlando as verses do cdigo no NetBeans
nossos atendentes. Atravs da nossa central tambm possvel alterar dados detalhar uma excelente ferramenta para evitar estas dores de cabea, o Subversion.
cadastrais, consultar o status de assinaturas e conferir a data de envio de suas
No dia a dia frequentemente lidamos com tarefas onde necessrio avaliar, validar e/ou
revistas. Acesse www.devmedia.com.br/central, ou se preferir entre em
contato conosco atravs do telefone 21 3382-5038. obter informaes vindas de uma cadeia de caracteres. Para contemplar esta tarefa, Uso de
Expresses Regulares em Java relata os conceitos de um poderoso mecanismo que pode
Publicidade ser empregado para a manipulao de informaes baseadas em cadeias de caracteres,
publicidade@devmedia.com.br 21 3382-5038
nos fornecendo os passos a serem seguidos para a utilizao de expresses regulares.
Anncios Anunciando nas publicaes e nos sites do Grupo DevMedia, voc Para finalizar esta edio, Conhecendo as mtricas de software demonstra que conhecer
divulga sua marca ou produto para mais de 100 mil desenvolvedores de todo o
Brasil, em mais de 200 cidades. Solicite nossos Media Kits, com detalhes sobre o cdigo fonte um requisito essencial para que seja possvel implementar novas
preos e formatos de anncios. funcionalidades e manter o cdigo com qualidade. Assim, neste artigo veremos como
obter informaes do cdigo para que possamos tomar as melhores decises a respeito
da evoluo e manuteno do mesmo.
Deste modo conclumos a oitava edio da Easy Java.
O Resumo DevMan
controle de verso de software uma das caractersticas
da Gerncia de Configurao (GC). De acordo com o
MPS.BR (Melhoria do Processo do Software Brasileiro), o De que se trata o artigo:
propsito da GC estabelecer e manter a integridade de todos os Este artigo aborda o uso do controle de verso no desenvolvimento de
produtos de trabalho, de um processo ou projeto e disponibiliz- software. Alm da conceituao pertinente a este processo, a utilizao
los a todos os envolvidos. A GC busca minimizar os problemas de uma ferramenta que subsidie esta atividade apresentada. O Sub-
no processo de desenvolvimento de software como, por exemplo, version, integrado ao NetBeans, propicia equipe de desenvolvimento
a falta de rastreabilidade das alteraes dos arquivos fontes, a um ganho em produtividade, pois o desenvolvimento e o controle de
perda (ou recuperao) dos mesmos em caso de excluso local verso ficam acessveis em um nico ambiente.
ou no repositrio, e ainda o controle de alteraes simultneas
nesses arquivos. Para que serve:
A GC define um item de configurao como um artefato a ser Por mais que o controle de verses seja uma necessidade, muitos
gerenciado por ele. Esses artefatos podem ser documentos de desenvolvedores desconhecem este recurso. Este artigo tem como
requisitos, cdigo-fonte ou modelos de anlise e projeto, dentre objetivo demonstrar a simplicidade no uso de uma ferramenta para
outros. O processo para o controle de verso composto por um este fim, integrada a um ambiente de desenvolvimento.
software instalado em uma mquina caracterizada como servidor
e um aplicativo cliente no computador do programador para aces- Em que situao o tema til:
sar os dados deste servidor. O servidor possibilita gerenciar uma Controlar as alteraes de um software no uma tarefa simples,
estrutura de diretrios onde os artefatos estaro armazenados, quer seja por um desenvolvedor independente, quer seja por peque-
mantendo, a partir da sua primeira verso, todas as demais de cada nas equipes, ou, principalmente, quando se trabalha em equipes com
artefato. Este servidor permite que os usurios (programadores) muitos integrantes. Este processo se torna ainda mais complicado
possam fazer uma cpia do repositrio para seu computador atra- quando os mesmos no trabalham no mesmo local (prdio, cidade, pas,
vs de aplicativos clientes. Um aplicativo cliente um software etc.). Saber quem fez, quando fez e por que fez se torna bastante difcil
que tem por objetivo realizar a comunicao com o servidor, quando no se usa uma ferramenta para controle de verso.
sendo ele o responsvel por enviar os comandos para o servidor
e processar as informaes retornadas. Este processo possibilita Controlando as verses do cdigo no NetBeans:
a criao de novos artefatos ou a realizao de alteraes nos Esse artigo apresenta os conceitos relacionados s atividades de con-
existentes, para posterior envio ao repositrio (Figura 1). trole de verso e como um software especfico para este fim se integra
O objetivo principal de um sistema para controle de verso ao IDE NetBeans. Em seguida os comandos oferecidos pelo Subversion
gerenciar diferentes verses de um documento qualquer (no ape- so apresentados de forma integrada ao NetBeans. So eles: Checkout
nas cdigo fonte) durante o seu desenvolvimento, possibilitando (download do projeto), Atualizar (sincronizar os arquivos locais com a
a edio colaborativa e o compartilhamento de dados (SVNBook). verso atual existente no servidor), Submeter (enviar os artefatos lo-
Deste modo possvel armazenar, em um repositrio, qualquer cais atualizados para o servidor), Comparar (verificar a diferena entre
tipo de arquivo. Para esta atividade existem diversas ferramentas verses de um artefato), Exibir Alteraes (histrico de revises de um
que atendem a esta demanda, entre elas: artefato), Resolver Conflitos (quando dois usurios alteram o mesmo
Gratuitas: SVN (Subversion), CVS (Concurrent Version System), artefato) e Reverter Modificaes (desfazer algo feito localmente ou
Mercurial e GIT (Global Information Tracker); que j esteja no repositrio). O artigo trabalha o conceito de cada co-
Comerciais: SourceSafe da Microsoft, ClearCase da IBM, entre mando, trazendo sempre uma aplicao prtica para cada um deles.
outros. Esta aplicao demonstra os benefcios da integrao do Subversion
com o NetBeans, destacando os cuidados a serem tomados e as boas
De acordo com Andr Felipe Dias (ver Referncias), os sistemas prticas de utilizao.
mais conhecidos e utilizados na maioria dos projetos de software
livre so: CVS, utilizado durante muitos anos, porm, devido a disponvel na Internet: o SourceForge. Alm do SourceForge
algumas limitaes tem sido substitudo por outras ferramentas; (http://sourceforge.net/), existem diversas outras possibilidades
e o Subversion, conhecido por SVN, tem sido o mais utilizado para registro e configurao de servidores para o controle de
atualmente, pois atende de forma plena os comandos e recursos verso. Mais informaes sobre isso podem ser encontradas na
oferecidos pelo CVS, seu antecessor, cobrindo inclusive as antigas seo Links.
limitaes deste.
Para que um sistema de controle de verso possa efetivamente
atender a seu objetivo, ele precisa resolver dois dos principais
problemas no compartilhamento de informao: como o sistema
ir permitir que os usurios compartilhem informaes, e como
prevenir e gerenciar os conflitos dessas alteraes?
Figura 4. Criando um novo projeto Para demonstrar a utilizao desses comandos vamos criar um
projeto no NetBeans. Em nosso exemplo o nome dado a ele foi:
Projeto01. A etapa seguinte enviar este projeto para o servidor,
o que realizado atravs do comando Submeter. Aps a execuo
deste comando, toda a equipe poder obter o projeto e iniciar o
desenvolvimento.
Para executar o comando Submeter, clique com o boto direito
do mouse sobre o nome do projeto e selecione a opo Subversion
> Submeter. Em seguida apresentada uma janela semelhante
Figura 7. Nela, visualizam-se todos os artefatos a serem subme-
tidos, que so os arquivos criados pelo NetBeans para o projeto,
bem como a ao a ser realizada no processo de submisso.
Figura 5. URL do repositrio
Comandos do Subversion
A interao do cliente com o servidor, para subsidiar o controle
de verso, realizada atravs do envio de comandos por parte do
cliente para o servidor. No exemplo apresentado, sero emprega-
dos os comandos mais utilizados no dia-a-dia, que so:
Checkout: comando que faz o download da cpia de trabalho
a partir do repositrio (o termo Cpia de Trabalho refere-se a
uma cpia de todo o projeto, que fica armazenada na mquina
local do programador);
Atualizar: este comando realiza a atualizao da cpia de tra-
balho, trazendo a verso atual existente no servidor;
Submeter: confirma as alteraes ou criao de artefatos, da
cpia de trabalho, para o servidor, registrando a submisso como
a reviso atual; Figura 7. Janela de Commit no NetBeans
Checkout
Este comando responsvel pelo download da verso mais atu-
Figura 8. Configurando a URL
alizada do projeto existente no repositrio do servidor, para um
diretrio no computador local, obtendo-se assim a cpia para Aps configurar a URL para Checkout, deve-se informar o
trabalho. Este diretrio local informado no momento do Checkout. diretrio do computador local onde ser criada a cpia do reposi-
Neste processo, o cliente Subversion gera alguns arquivos, os trio, o que pode ser visto na Figura 9. Ao finalizar essa operao,
quais no esto ligados ao projeto, porm, so necessrios para a todos os arquivos e pastas que forem adicionados neste diretrio
interao do cliente com o servidor. Estes arquivos, que possuem estaro disponveis para serem publicados no repositrio aps
extenso svn, so ocultos ao usurio e cada diretrio da estrutura qualquer alterao.
possui um deles. A estes arquivos atribuda uma caracterstica Como j discutido, pode-se notar na Figura 9 a possibilidade
que informar ao cliente SVN que o diretrio faz parte do controle de informar a partir de qual diretrio do repositrio deseja-se
de verso gerenciado por ele (o cliente). Estes arquivos so tam- fazer o download dos artefatos, bem como a verso do projeto
bm utilizados pelo cliente durante as interaes com o servidor. que est no repositrio. Caso no seja informado nada nestes
Nesta cpia local o programador pode realizar suas incluses e campos, o Checkout ser feito a partir do diretrio raiz do repo-
alteraes nos artefatos e diretrios, e quando houver a condio sitrio, sendo realizado o download de todos os artefatos. Com
de estabilidade dessa cpia, faz-se a publicao da mesma atra- a execuo deste comando, o programador ter em sua cpia
vs de outro comando, chamado Submeter. A estabilidade de um local a verso mais recente do projeto.
artefato atingida quando ele tenha passado por todos os testes
de validao e esteja apto a ser posto em produo, sem riscos de
erros para o usurio ou para outros pontos da aplicao.
O programador no precisa a cada interao com o servidor
realizar o download completo do projeto. O Checkout pode ser
realizado de forma parcial. Esta situao ocorre quando determi-
nado usurio necessita somente de partes do repositrio. Deste
modo, possvel informar no momento do Checkout a partir de
qual diretrio deseja-se fazer o download.
Outra caracterstica interessante do comando Checkout a pos-
sibilidade de se informar a verso desejada para download. Isto
pode ser til quando for necessrio trabalhar com uma verso
especfica do repositrio. Um exemplo desta situao ocorre
quando equipes necessitam trabalhar com verses diferentes de
um software.
Figura 9. Configurando o diretrio no computador local
Na prtica
Para realizar o Checkout deve-se saber de onde os arquivos que Atualizar
compem o projeto sero obtidos. Sendo assim, necessrio in- Este comando tem a responsabilidade de manter a cpia de tra-
formar o endereo de um servidor Subversion no NetBeans. Este balho atualizada, buscando por atualizaes no repositrio. Em
endereo o do repositrio para o projeto criado anteriormente. resumo, o comando Atualizar vai comparar a verso que est na
A configurao realizada atravs do menu Equipe > Subversion cpia de trabalho com a ltima verso do repositrio. Caso a cpia
> Checkout. Como pode ser visto na Figura 8, deve-se informar o de trabalho esteja desatualizada, ele far o download das altera-
link do repositrio (Figura 5) juntamente com o usurio e a senha es da ltima reviso. Durante a execuo do comando Atualizar,
referentes conta criada no SourceForge.net. algumas aes, listadas na sequncia, sero realizadas:
Na prtica
Para executar o comando Submeter, localize o diretrio ou arte-
fato a ser submetido e, clicando com o boto direito do mouse,
selecione a opo Subversion > Submeter. Feito isso, apresentada
uma janela semelhante Figura 11. Nesta janela visualiza-se
todos os artefatos a serem submetidos, bem como a ao a ser
realizada neste processo de submisso. No momento em que o(s)
Figura 10. Sada do comando "Atualizar" na console artefato(s) (so) enviado(s) para o servidor, pode-se informar um
texto descrevendo o motivo da alterao realizada, para posterior bloco de cdigo, um ponto especfico de implementao. Para
acompanhamento. realizar esta atividade preciso identificar os pontos que neces-
sitam da reverso e ento clicar nas pequenas flechas que esto
apontando para a direita. Estas flechas do significado semntico
de que o cdigo no servidor ser enviado para a verso local do
artefato (observe a Figura 12).
Exibir Alteraes
Durante o ciclo de vida do desenvolvimento de um software,
muitas alteraes so submetidas ao repositrio. Deste modo,
comum a ocorrncia de situaes em que seja necessrio rastrear
alteraes realizadas nos artefatos por alguma necessidade espe-
cfica, como por exemplo, a correo de erros.
O comando Exibir Alteraes um recurso de pesquisa que
permite visualizar todas as verses de um artefato desde a sua
Figura 11. Janela de Commit no NetBeans
primeira submisso ao repositrio. Este comando retorna as se-
guintes informaes sobre cada verso do artefato:
Comparar Nmero: Identificador sequencial de cada reviso/verso;
Este comando tem a finalidade de comparar as verses dos Usurio: Autor da reviso;
artefatos gerenciados pelo Subversion, verificando as diferenas Data/Hora: Data e hora da submisso que gerou a reviso;
entre elas. Estas diferenas podem ser entre verses do projeto Mensagem: Texto informado no momento da submisso do
existentes no servidor, ou ainda entre a verso do projeto da cpia artefato;
de trabalho com a existente no repositrio. Para o Subversion, as Arquivos/Pastas: Lista de arquivos e diretrios que sofreram
alteraes a serem verificadas e controladas em um artefato a alteraes ou foram adicionados.
linha de cdigo (ou de texto). Isso quer dizer que uma simples
alterao de caractere far com que a linha inteira seja marcada - Este comando pode ser usado em todo o repositrio, em um determinado diretrio
como diferente entre as verses. ou ainda para um artefato especfico.
Na prtica Na prtica
Este comando pode ser executado ao clicar com o boto direito Para visualizar o histrico de alteraes de um arquivo, diretrio
do mouse em qualquer arquivo localizado na paleta de projetos ou projeto, basta selecionar o item desejado e em seguida clicar
do NetBeans e escolher o item de menu Subversion > Comparar. A com o boto direito sobre o mesmo, escolhendo a opo de menu
Figura 12 exibe o resultado de uma comparao aps algumas Subversion > Pesquisar no Histrico. Feito isso ser exibida uma
alteraes realizadas no arquivo NovoArquivo.java. janela com as opes de filtro, de acordo com a Figura 13.
Reverter Modificaes
O comando Reverter Modificaes tem por finalidade desfazer as
Figura 14. Janela Exibir Alteraes alteraes de artefatos na cpia de trabalho. Com este recurso
possvel reverter toda a cpia de trabalho ou apenas parte dela.
Resolver Conflitos A reverso das modificaes pode ser feita a partir de qualquer
comum a existncia de conflitos de verses quando se traba- verso existente no repositrio.
lha com uma equipe grande, pois nesta condio a quantidade Este procedimento til quando se deseja desfazer alteraes sub-
de submisses aumenta. Quando isso acontece, pode ocorrer a metidas ou no para o repositrio. Desfazer alteraes j atualizadas
situao de um usurio ter em seu repositrio uma verso que pode ser uma atividade necessria quando, por exemplo, uma imple-
j tenha sido submetida antes que ele consiga finalizar suas alte- mentao submetida possua um erro que no tenha sido verificado
raes. Assim, quando o desenvolvedor submeter seu cdigo, o pela equipe de testes. Neste caso, reverte-se o projeto, ou o artefato
Subversion verificar que a verso no repositrio mais recente e em questo, para uma verso que no apresente este erro.
solicitar a este usurio que execute o comando Atualizar, para s
ento submeter sua verso. Na execuo desta atualizao, con- Na prtica
flitos podero ser detectados, pois o trabalho local foi realizado Para executar a reverso de modificaes, clique com o boto
em uma verso desatualizada. direito do mouse no diretrio ou arquivo e selecione a opo Sub-
De acordo com o SVNBook, quando ocorre um conflito em um version > Reverter Modificaes. Feito isso, a janela da Figura 16 ser
artefato so gerados outros trs artefatos a partir dele: apresentada com as seguintes opes:
filename.mine: arquivo que contm as alteraes locais implemen- Reverter alteraes locais: esta opo permite reverter artefatos,
tadas no artefato com conflito, antes do comando Atualizar; sincronizados com o repositrio, que sofreram alteraes locais e que
filename.OLDREV: arquivo que possui o contedo da verso na se deseja reverter para a verso a qual estavam anteriormente;
qual o arquivo local estava baseado, antes da atualizao; Reverter modificaes de submisso nica: opo na qual
filename.NEWREV: arquivo que contm a ltima reviso postada ocorrer substituio de um ou mais artefatos na mquina local
no repositrio. com base em determinada reviso do repositrio. Para concluir a
reverso preciso executar a submisso posteriormente, para que
Na prtica esta verso revisada se torne a atual no repositrio;
Os conflitos que porventura ocorrerem so apresentados pela Reverter modificaes de submisses anteriores: esta opo
ferramenta, como exibido na Figura 15. Assim, o programador semelhante anterior, porm possvel escolher a verso ini-
precisa optar se esta resoluo de conflitos ser em sua cpia cial e final para reverso, especificando assim que modificaes
local ou na cpia do repositrio. No entanto, esta limitao no realizadas em revises deste intervalo sero revertidas, ou seja,
traz para o desenvolvedor muita praticidade e facilidade, pois se o canceladas.
E Resumo DevMan
xpresso Regular ou Regular Expression, bem como a
abreviao RegEx, um mecanismo poderoso utilizado
para manipulao de informaes baseadas em cadeias de De que se trata o artigo:
caracteres, permitindo identificar, de maneira precisa e flexvel, Este artigo apresenta os conceitos de um poderoso mecanismo que
dados de interesse por meio de anlises de padres. A pesquisa pode ser utilizado para a manipulao de informaes baseadas em
ou anlise de padres objetiva criar recursos com a finalidade de cadeias de caracteres, nos fornecendo os passos a serem seguidos para a
facilitar a localizao e recuperao de informaes. utilizao de expresses regulares na tecnologia Java, tornando possvel
As consultas de dados que fazem uso de expresses regulares so a implementao de aplicaes Java que necessitem executar operaes
descritas em uma linguagem formal, podendo ser interpretadas como validao, substituio e extrao de dados de forma rpida, efi-
a partir de um sistema processador de expresses, ou seja, uma ciente e segura.
aplicao desenvolvida para realizar a validao, compilao e
execuo. Este processador responsvel pela examinao do Para que serve:
texto original, identificando partes que combinam com a especi- Este artigo foi criado com o objetivo de introduzir os desenvolvedores
ficao dada pela expresso regular. tecnologia de expresses regulares, possibilitando incorporar recursos
As principais finalidades quando se utiliza expresses regulares de pesquisas complexas de cadeias de caracteres em aplicaes Java de
incluem a necessidade de realizar pesquisas a partir da identifica- maneira fcil e produtiva. Apesar de ser um artigo introdutrio, aborda-se
o de padres, assim como a validao e substituio de cadeias os principais assuntos sobre a implementao de aplicativos que fazem
de caracteres por meio da anlise de padres. uso de expresses regulares.
A definio e uso de expresses regulares em sistemas computa-
cionais torna possvel o acesso rpido e direto a dados desejados, Em que situao o tema til:
agilizando os processos de busca e extrao de informaes. Este artigo ser til para desenvolvedores que desejam aprender como
Conforme o refinamento e detalhamento dos padres desejados implementar aplicaes Java que, por meio do uso de expresses regu-
durante a fase de construo, as expresses regulares facilitam, lares, possam trabalhar de modo mais eficiente, contribuindo para a exe-
de forma mais precisa e rpida, a obteno de resultados em con- cuo correta e rpida de pesquisas complexas, onde se torna necessrio
sultas, criando mecanismos mais eficientes e consistentes para a a utilizao de anlise de padres.
realizao de pesquisas complexas e demoradas.
Em resumo, uma expresso regular um mtodo formal, ou Uso de Expresses Regulares em Java:
seja, uma tcnica da computao baseada na matemtica para A tecnologia Java nos fornece mecanismos para o desenvolvimento de
descrever propriedades de um sistema, desenvolvido com a fina- aplicaes que fazem uso de expresses regulares, permitindo a criao
lidade de se especificar um padro de texto. So utilizadas para de aplicativos que validem informaes de entrada, manipulando cadeias
definir um padro abrangente de maneira especfica. Definindo-se de caracteres, facilitando a execuo de tarefas onde h a necessidade de
um padro de pesquisa, possvel obter uma lista de resultados realizar pesquisas complexas de maneira eficiente.
capazes de atender tal expresso. Entre outras operaes, as ex- As expresses regulares tornam possvel a definio de instrues
presses regulares servem, principalmente, para buscar e validar abrangentes de maneira simplificada e especfica, ou seja, diversos padres
padres de textos. podem ser montados a partir de uma nica cadeia de caracteres.
Alguns exemplos de informaes que podem ser validadas O desenvolvimento e utilizao de expresses regulares podem ser feitos
so campos como data, hora, endereos eletrnicos, telefone, em diversas linguagens e tecnologias de programao, como JavaScript,
CPF, RG, CEP entre outros dados. Porm, pode-se ir mais alm ASP, PHP, C# e Java. Neste artigo, sero abordados os principais conceitos
com expresses regulares, sendo possvel trabalhar com busca para o uso de expresses regulares em Java, possibilitando que muitas ta-
e identificao de ocorrncias como padres em sequncia de refas sejam simplificadas graas a essa maneira especial de criar pesquisas
DNA, dados genticos e at extrao de padres em banco de complexas atravs de padres.
dados biolgicos.
Neste artigo, voc ir aprender, entre outras coisas, os conceitos dos os principais conceitos para o uso de expresses regulares
de expresses regulares, regras de definio, identificao, vali- em Java, possibilitando que muitas tarefas sejam simplificadas
dao e substituio de caracteres de dados, assim como aplicar graas a essa maneira especial de criar pesquisas complexas
todo o conhecimento adquirido por meio de exemplos prticos que atravs de padres.
demonstram o poder desta tecnologia de pesquisas complexas. A tecnologia Java possui, em seu pacote java.util.regex, as trs
principais classes para a criao e execuo de algoritmos que
Introduo a Expresses Regulares necessitem de expresses regulares. Abaixo, segue uma pequena
A tecnologia de expresses regulares busca descrever conjuntos descrio dessas classes que sero abordadas com mais detalhes
de cadeiras de caracteres, de maneira precisa, exercendo o papel no decorrer deste artigo:
de um mtodo utilizado para se especificar um padro de infor- j ava.util.regex.Pattern: A classe Pattern responsvel pela represen-
mao. Com o uso desse padro, textos podem ser pesquisados, tao do padro a ser compilado e utilizado nas pesquisas. Para
validados e dados extrados, agilizando e facilitando o processo a sua utilizao, deve-se obter uma referncia de Pattern por meio
de manipulao de cadeias de caracteres. do mtodo esttico compile(String padrao).
Em resumo, expresses regulares so composies de smbolos e
Pattern pattern = Pattern.compile(teste);
metacaracteres que, unidos entre si e com caracteres literais, criam
sequncias ou expresses de dados. Possuindo-se um texto, essa j ava.util.regex.Matcher: A classe Matcher responsvel pelas opera-
expresso regular utilizada para identificar e validar trechos de es de pesquisa e anlise de cadeias de caracteres de entrada,
informaes, retornando sucesso caso a expresso seja atendida possibilitando a execuo de buscas, retorno de resultados, ex-
em todas as suas condies e regras. trao de ndices de informaes e dados agrupados. Para a sua
Esta pesquisa e validao pelos padres de dados permite que utilizao, deve-se obter uma referncia de Matcher por meio do
uma mesma expresso regular seja criada para validar diferentes mtodo matcher(String texto) de uma referncia de Pattern.
situaes encontradas em trechos de textos, evitando que aplica-
es desenvolvidas em Java testem cadeias de caracteres inmeras Matcher matcher = pattern.matcher(Executando um teste de RegEx);
vezes por meio de estruturas condicionais, como se... ento... se- java.util.regex.PatternSyntaxException: A classe PatternSyntaxException
no..., e repetitiva, como enquanto... faa. Ou seja, a construo permite o controle e tratamento de excees lanadas durante o
de expresses regulares pode ser combinada possibilitando que uso de expresses regulares. Atravs da verificao desse tipo de
expresses complexas sejam construdas, da mesma maneira que exceo, possvel ter um controle maior sobre os erros gerados
expresses aritmticas e de lgica. a partir de consultas quando a sintaxe do padro informada
As expresses regulares permitem definir instrues abrangen- aplicao invlida.
tes de maneira simplificada e especfica. Partindo da definio de
uma expresso regular possvel obter uma lista de resultados Possuindo uma referncia para a classe Matcher, conforme
finita ou infinita a partir de seu confrontamento com um texto demonstrado nos pargrafos anteriores, possvel realizar as
ou outra fonte de dados textual. operaes de pesquisa, validade e extrao de informaes
Essas expresses, entre outras vantagens, so teis para busca, utilizando-se a expresso regular compilada em uma instncia
validao ou substituio de informaes como: de Pattern. O mtodo find(), da classe Matcher, responsvel pela
1. Data e hora; verificao da existncia de padres na cadeia de caracteres
2. Nmeros IP e endereos MAC; informada, j os mtodos start() e end() indicam, respectivamen-
3. Endereos de e-mail; te, as posies de incio e trmino quando uma parte do texto
4. Endereos de Internet; informado apresenta o padro pesquisado e, por fim mas no
5. Validao de documentos ou elementos XML; menos importante, o mtodo group(), responsvel pela extrao
6. Documentos pessoais como RG, CPF e Carto de Crdito. do trecho da cadeia de caractere que atende expresso regular
validada.
Em termos de software, expresses regulares so comumente
utilizadas por editores de textos e em linguagens de programao, Principais mtodos das classes Pattern e Matcher
tornando possvel a execuo de diversas tarefas como pesquisa, Esta seo define e detalha os principais mtodos para a elabo-
validao, substituio e extrao de informaes sejam simplifi- rao e uso de expresses regulares durante o desenvolvimento
cadas utilizando-se definies de sequncias e padres de anlise de aplicaes Java.
de dados, facilitando e agilizando diversas operaes. Na Tabela 1 esto descritos os principais mtodos da classe
Pattern, porm existem outros que podem ser consultados nos
Expresses Regulares em Java documentos da especificao do Java SE por meio dos links ane-
O desenvolvimento e utilizao de expresses regulares podem xados a este artigo.
ser feitos em diversas linguagens e tecnologias de programao, A Tabela 2 apresenta, de forma resumida, os mtodos mais
como JavaScript, ASP, PHP, C# e Java. Nesta seo, sero aborda- utilizados por uma instncia de Matcher.
Pattern pattern() Retorna a instncia de Pattern possuindo o padro interpretado pela instncia de Matcher.
Retorna o ndice de incio da ocorrncia do padro na cadeia de caracteres de entrada. O aplicativo Java desenvolvido na Listagem 1 faz
int start()
uso do mtodo start() para recuperar o ndice de incio do texto quando o padro da expresso regular localizado.
Retorna o ndice de incio da ocorrncia do padro na cadeia de caracteres de entrada a partir do ndice do grupo desejado, conforme
int start(int group) valor passado como parmetro para o mtodo start(). O conceito de grupos de caracteres ser apresentado, de forma detalhada, na seo
Controle de grupos de informao em expresses regulares.
Retorna o ndice de trmino da ocorrncia do padro na cadeia de caracteres de entrada. O aplicativo Java desenvolvido na Listagem 1 faz
int end()
uso do mtodo end() para recuperar o ndice de trmino do texto quando o padro da expresso regular localizado.
Retorna o ndice de trmino da ocorrncia do padro na cadeia de caracteres de entrada a partir do ndice do grupo desejado, conforme
int end(int group)
valor passado como parmetro para o mtodo end().
String group() Retorna uma subsequncia da cadeia de caracteres de entrada a partir de uma ocorrncia do padro definido pela expresso regular.
Retorna uma subsequncia da cadeia de caracteres de entrada por meio de uma ocorrncia do padro definido pela expresso regular a
String group(int group)
partir do ndice do grupo desejado, conforme valor passado como parmetro para o mtodo group().
int groupCount() Retorna o nmero de grupos definidos no padro de pesquisa de uma instncia de Matcher conforme a estrutura de uma expresso regular.
boolean matches() Verifica ocorrncias de padres na cadeia de caracteres de entrada, retornando verdadeiro (true) ou falso (false).
Verifica a existncia de uma ocorrncia na cadeia de caracteres de entrada, retornando verdadeiro (true) ou falso (false). O mtodo find()
boolean find()
utilizado quando se deseja garantir que o texto analisado possui o padro da expresso regular.
Tabela 2. Principais mtodos da classe Matcher
Implementao de Expresses Regulares em Java Listagem 1. Exemplo1.java: Implementao de seu primeiro exemplo de expres-
Aps uma breve apresentao dos principais conceitos e informa- ses regulares.
es sobre expresses regulares, possvel aprofundar os conheci-
package principal;
mentos em programao de padres de anlise a partir da utilizao
de diversos recursos que fazem parte desta tecnologia. import java.util.regex.Matcher;
A fim de servir de exemplo, a Listagem 1 apresenta o uso das import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
classes e mtodos descritos anteriormente, permitindo a voc,
leitor, a implementao de seu primeiro aplicativo Java que faz public class Exemplo1 {
uso de expresses regulares. public static void main(String[] args) {
try {
A implementao realizada na Listagem 1 permite o entendimento
Pattern pattern = Pattern.compile(teste);
de uma das tarefas mais bsicas porm mais utilizadas pelo uso de ex- Matcher matcher = pattern.matcher(Este um teste de RegEx);
presses regulares: pesquisa e extrao de informaes. O aplicativo
desenvolvido objetiva a localizao do padro de informao teste while (matcher.find()) {
System.out.println(( + matcher.start() + , + matcher.end()
em uma cadeia de caracteres maior: Este um teste de RegEx. Para + ) + matcher.group());
verificar a existncia de ocorrncias do padro da expresso regular, }
este exemplo faz uso do mtodo find(), da instncia da classe Matcher, } catch (PatternSyntaxException ex) {
ex.printStackTrace();
percorrendo o texto de entrada em busca de trechos que atendam
}
ao formato da pesquisa. Quando este padro detectado, obtm-se }
os ndices de incio e trmino da localizao do texto, bem como se }
extrai esse trecho da cadeia de caracteres.
E s t e u m t e s t e d e R e g E x
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
A Listagem 5 apresenta uma aplicao empregando este indicando quantas vezes esse elemento deve ser repetido. Existem
metacaractere. diversas formas de se utilizar quantificadores, conforme apresen-
O exemplo demonstrado na Listagem 5 emprega o caractere tado na seo Tipos de Quantificadores.
especial + para definir que o caractere b deve aparecer uma O aplicativo desenvolvido na Listagem 6 exemplifica o uso dos
ou mais vezes, logo aps o caractere a. metacaracteres { e }.
Quando este aplicativo executado, o resultado apresentado Conforme apresentado no exemplo, os caracteres especiais { e
no console ser: } so empregados para definir que o caractere b deve aparecer
exatamente trs vezes aps o caractere a. Esse metacaractere
Matcher1 invalidada possibilita a existncia de ocorrncias, em nmero exato, de um
Matcher2 validada: ab
Matcher3 validada: abb determinado caractere ou cadeia de caracteres, definindo o limi-
Matcher4 validada: abbb te da ocorrncia de caracteres em padres de anlise durante a
elaborao da expresso regular.
Metacaracteres { e } Quando a Listagem 6 executada, o resultado exibido no con-
Os metacaracteres { e } so comumente empregados para sole ser:
possibilitar a criao de contadores de repetio de dados, tam- Matcher1 invalidada
bm chamados de quantificadores. Um elemento ou conjunto Matcher2 validada: abbb
Matcher3 invalidada
de elementos qualquer pode ser sucedido de um quantificador,
Listagem 4. Exemplo4.java: Uso do metacaractere * para determinar a existncia Listagem 5. Exemplo5.java: Uso do metacaractere + para determinar existncia
de um determinado caractere, em zero ou mais vezes. de um determinado caractere, em uma ou mais vezes.
if (matcher1.matches()) { if (matcher1.matches()) {
System.out.println(Matcher1 validada: + matcher1.group()); System.out.println(Matcher1 validada: + matcher1.group());
} else { } else {
System.out.println(Matcher1 invalidada); System.out.println(Matcher1 invalidada);
} }
if (matcher2.matches()) { if (matcher2.matches()) {
System.out.println(Matcher2 validada: + matcher2.group()); System.out.println(Matcher2 validada: + matcher2.group());
} else { } else {
System.out.println(Matcher2 invalidada); System.out.println(Matcher2 invalidada);
} }
if (matcher3.matches()) { if (matcher3.matches()) {
System.out.println(Matcher3 validada: + matcher3.group()); System.out.println(Matcher3 validada: + matcher3.group());
} else { } else {
System.out.println(Matcher3 invalidada); System.out.println(Matcher3 invalidada);
} }
if (matcher4.matches()) { if (matcher4.matches()) {
System.out.println(Matcher4 validada: + matcher4.group()); System.out.println(Matcher4 validada: + matcher4.group());
} else { } else {
System.out.println(Matcher4 invalidada); System.out.println(Matcher4 invalidada);
} }
} catch (PatternSyntaxException ex) { } catch (PatternSyntaxException ex) {
ex.printStackTrace(); ex.printStackTrace();
} }
} }
} }
regulares que restringem ou excluem a ocorrncia de determinado pois a tecnologia Java torna opcional sua existncia. Para exem-
caractere ou grupo de caracteres. A Listagem 9 apresenta um exem- plificar, a seguinte expresso regular faz uso dos metacaracteres
plo de negao de listas, onde os caracteres r, g e f devero ser de posicionamento para delimitao de incio e trmino de sua
ignorados na validao da cadeia de caracteres de entrada. estrutura. Atente-se ao fato de que ambas as expresses so vlidas
O resultado da execuo do aplicativo Java apresentado na e desenvolvidas para o mesmo propsito.
Listagem 9 ser:
^[^rgf ]ato$
Matcher1 invalidada [^rgf ]ato
Matcher2 invalidada
Matcher3 invalidada Metacaractere .
Matcher4 validada: tato O metacaractere . (ponto) utilizado para validar um caractere
qualquer. Esse mecanismo ou propriedade da expresso regular til
Listagem 9. Exemplo9.java: Uso do metacaractere ^ para negao de listas de quando se torna necessrio permitir qualquer caractere numa certa
valores. posio. O ponto o metacaractere que significa qualquer caracte-
re, pois ele pode representar uma letra, um nmero, um smbolo,
package principal;
um TAB, etc. A Listagem 10 apresenta um exemplo de utilizao
import java.util.regex.Matcher; do caractere especial . para permitir a ocorrncia de um caractere
import java.util.regex.Pattern;
indefinido em determinado trecho da expresso regular.
import java.util.regex.PatternSyntaxException;
Tabela 7. Descrio prtica das funcionalidades de classes de caracteres sultado aps a execuo do cdigo da Listagem 12 ser:
Listagem 14. Exemplo14.java: Desenvolvimento de expresses regulares com O exemplo demonstrado na Listagem 14 faz uso de uma
classes de caracteres com interseco. classe de caracteres com interseco.
package principal;
O resultado da execuo da Listagem 14 ser:
caracteres entre os smbolos ( e ). Delimitando-se caracteres, Executando-se o aplicativo, para cada grupo localizado, seu frag-
metacaracteres ou at classes de caracteres com parnteses, mento respectivo ser extrado e exibido no console. Assim, aps a
formam-se grupos de informao em padres de anlise. execuo da aplicao, a sada resultante, exibida no console, ser:
Para cada grupo localizado em uma expresso regular, h
Matcher1 validada: #12345ABC_
um ndice identificando-o, tornando possvel a recuperao Grupo 1: #12345ABC_
fragmentada de trechos de cadeias de caracteres validadas. O Grupo 2: 12345ABC
Grupo 3: 12345
aplicativo desenvolvido na Listagem 17 exemplifica a criao de
Grupo 4: ABC
uma expresso regular que faz uso de grupos de informao. Seu
objetivo extrair trechos de informaes por meio dos ndices dos Concluso
agrupamentos delimitados na expresso regular. Durante o desenvolvimento de sistemas e aplicaes, para fins
acadmicos ou comerciais, h diversas situaes onde se torna
Listagem 17. Exemplo17.java: Desenvolvimento de expresses regulares com til, e muitas vezes necessrio, a validao e extrao de infor-
grupos de informao.
maes, baseando-se em um formato determinado previamente.
package principal; A partir de uma cadeia de caracteres de entrada, torna-se preciso
import java.util.regex.Matcher; um mecanismo eficiente e seguro para fornecer diversos dados
import java.util.regex.Pattern; sobre a estrutura e valor da informao validada, possibilitando
import java.util.regex.PatternSyntaxException;
public class Exemplo17 { utilizar padres de pesquisa para a realizao de um confronta-
public static void main(String[] args) { mento de dados.
try { A tecnologia Java capaz de ser utilizada para criar aplicativos
Pattern pattern = Pattern.compile(#((\\d{5})(\\w{3}))_);
que fazem uso desses padres de pesquisa, denominados como
Matcher matcher1 = pattern.matcher(#12345ABC_);
if (matcher1.matches()) { expresses regulares ou regular expressions, para facilitar o desen-
System.out.println(Matcher1 validada: + matcher1.group()); volvimento de processos de pesquisas complexas e mais refinadas.
for (int i = 0; i <= matcher1.groupCount(); i++) { Por meio de expresses regulares possvel especificar padres
System.out.println(Grupo + (i + 1) + :
+ matcher1.group(i)); compostos de smbolos e metacaracteres que, em conjunto com
} demais informaes literais, criam sequncias ou expresses de
} else { dados.
System.out.println(Matcher1 invalidada);
Alm dos conceitos e do embasamento terico, o artigo apre-
}
} catch (PatternSyntaxException ex) { sentou, de forma didtica, alguns exemplos de aplicaes que
ex.printStackTrace(); fazem uso de classes relacionadas ao desenvolvimento com ex-
} presses regulares, demonstrando que no necessrio possuir
}
}
conhecimentos muito avanados de programao Java, visto que,
a partir do contedo apresentado, torna-se possvel a utilizao
de padres de anlise, para a resoluo de diversos problemas
O aplicativo da Listagem 17 recebe a cadeia de caracteres e situaes localizados durante o processo de desenvolvimento
#12345ABC_ como informao de entrada e, por meio da ex- de software.
presso regular #((\\d{5})(\\w{3}))_, os grupos so definidos, O que foi abordado neste artigo apenas uma breve amostra
separando os trechos de dados por parnteses. Com a cadeia de de como a tecnologia de expresses regulares pode auxiliar no
entrada validada, torna-se possvel obter fragmentos do trecho desenvolvimento de aplicaes Java, incorporando caractersticas
apenas informando-se o ndice do grupo desejado. A Tabela 9 de validao e extrao de dados no desenvolvendo de software.
exemplifica a diviso grfica dos grupos de informao, baseando- H muito ainda a ser explorado sobre essa tecnologia, criando a
se no formato da expresso regular. possibilidade de novos artigos e trabalhos relacionados.
Carlos Arajo
A Resumo DevMan
utilizao de um Ambiente Integrado de Desenvolvimen-
to (IDE) pressupe investimento de tempo no projeto vi-
sual do aplicativo e na edio do cdigo. O projeto visual De que se trata o artigo:
consiste em posicionar e redimensionar componentes tais como Trata da criao passo a passo de uma pequena aplicao GUI usando
botes, caixas de texto e painis em um form. Por outro lado, a recursos do IDE estudados anteriormente, alm de mostrar como customi-
edio de cdigo corresponde a programar respostas a eventos zar o cdigo gerado pelo NetBeans. O estudo de caso complementado
tais como clique de botes ou pressionamento de uma tecla. com uma breve apresentao dos gerenciadores de layout.
Essas so tarefas corriqueiras que podem ser realizadas usando
um IDE. Tais tarefas sero apresentadas na prtica nesta ltima Para que serve:
parte da matria, aps termos explorado com algum detalhamento Atende aos desenvolvedores que desejam adotar um layout de utilizao
vrios recursos oferecidos pelo NetBeans. mais fcil, com o objetivo de criar aplicaes com interface grfica que
O conhecimento dos recursos, tais como complementao de c- seja realmente multiplataforma. Alm disso, apresenta os recursos para
digo, gerncia de conexo a diversos bancos de dados e integrao customizao do cdigo gerado pelo IDE.
de vrias ferramentas em um nico IDE, que foram analisados nas
duas primeiras partes da matria, so fundamentais para desen- Em que situao o tema til:
volver aplicaes com mais eficincia e maior produtividade. A implementao de sistemas multiplataforma em Java necessita prin-
A criao de um pequeno aplicativo com interface grfica en- cipalmente do conhecimento e utilizao de gerenciadores de layout.
cerra esta srie de artigos, possibilitando ao leitor a aplicao do Usar esses gerenciadores nas aplicaes GUI no tarefa muito simples,
conhecimento exposto nas duas primeiras partes do minicurso. mas o Group Layout, distribudo com o Java 6 e chamado de Free Design
Nesta parte, principalmente, sero explorados o GUI Builder e o no NetBeans, nos leva a um trabalho mais fcil. Esse o tema principal
uso do Group Layout, alm do Editor de Cdigo e da customizao deste artigo, mas tambm proveitoso a quem deseja personalizar o
do cdigo gerado pelo NetBeans. Com esta prtica pretende-se dar cdigo do NetBeans.
o suporte necessrio para que o programador possa usar o IDE
com desenvoltura em seus futuros projetos. O IDE NetBeans Parte 3:
Neste artigo finalizamos o minicurso sobre NetBeans mostrando a criao
Layouts de uma aplicao Swing simples e funcional, onde so aplicados recursos
Em Java, layouts so abstraes que definem o comportamento e do GUI Builder. dado destaque utilizao do layout padro do NetBe-
a maneira como os componentes ficam dispostos em uma interface ans o Free Design que, como poder ser comprovado, torna o esforo
do usurio. Gerenciadores de layout organizam o redimensiona- despendido no desenho das interfaces grficas bem mais leve. Alm disso,
mento e o posicionamento dos widgets dentro de um continer, h uma breve introduo implementao dos manipuladores de eventos,
permitindo que as interfaces grficas se adaptem s diversas e so apresentadas as maneiras que a ferramenta disponibiliza para que o
resolues de vdeo, aparncia e comportamento desses compo- desenvolvedor possa personalizar o cdigo fonte gerado pelo ambiente.
nentes. Observe na Figura 1 uma GUI que no utiliza gerenciador Os recursos disponveis para essa personalizao derrubam o mito de que
de layout. So mostradas imagens de uma janela, antes e depois o cdigo gerado pelo NetBeans fechado e no pode ser modificado.
de um redimensionamento. Note que os botes no so reposi-
cionados aps o redimensionamento da janela. Os gerenciadores O NetBeans agiliza o desenvolvimento de aplicaes GUI,
de layout a tcnica criada pelos projetistas do Java para garantir permitindo que os layouts sejam visualizados e configurados
a portabilidade das aplicaes em diferentes plataformas. sem a necessidade de escrever cdigo. O IDE suporta vrios ge-
renciadores de layout de Java. Entretanto, no oferece suporte a
OverlayLayout e SpringLayout. A seguir sero descritos brevemente
os layouts suportados pelo ambiente:
Desenho livre (Free Design) Esta a denominao que o
NetBeans utiliza para se referir ao gerenciador de layout Group
Figura 1. Interface grfica antes e depois do redimensionamento Layout, lanado junto com o Java SE 6. Com sua utilizao pode-se
Figura 6. Exemplo de GridBagLayout Ao final, na janela Projetos haver um projeto denominado Calcu-
ladora, como pode ser visto na Figura 9. Note que o nome do mesmo
est em negrito, indicando que ele o principal. Projeto principal
o ponto de entrada (mdulo principal) de uma aplicao; ele que
contm a classe main. Muitas opes de menu atuam por padro
Figura 7. Exemplo de FlowLayout
sobre o projeto principal como, por exemplo, Executar > Construir
projeto principal ou Executar > Executar projeto principal. No entanto,
ter um projeto principal no obrigatrio. Por exemplo, vejamos
o que acontece se voc selecionar Executar > Definir como projeto
principal > Nenhum. A partir da, se houver um arquivo aberto no
Editor de Cdigo, as opes de menu Construir projeto principal e
Figura 8. Exemplo de GridLayout Executar projeto principal mudam para Construir projeto (nome do
projeto) e Executar projeto (nome do projeto). Se no houver arquivo
Null Layout Consiste no desenho da interface sem utilizar aberto no Editor estas opes estaro desabilitadas.
layout. Em cada widget devem ser definidas as suas coordenadas
e suas dimenses.
No NetBeans muito simples selecionar um layout. Para definir
um layout para um continer simplesmente clique com o boto
direito sobre ele. Em seguida escolha Definir layout e ento escolha
a opo desejada. Clicar com o boto direito sobre o continer no
Inspetor tambm permite definir um gerenciador de layout. Uma
aplicao no precisa estar atrelada a um nico gerenciador de
layout. Em cada continer tal como um JFrame ou JPanel no
software aplicativo possvel definir um gerenciador diferente.
Figura 9. Janela Projetos destacando o projeto recm-criado
Criando uma aplicao GUI
Com o objetivo de aplicar alguns dos conhecimentos sobre o Segunda etapa: Criar e editar a interface
NetBeans expostos at aqui, nesta seo ser criada uma pequena Para criar a interface grfica necessrio um continer, onde
interface grfica. Mais do que simplesmente construir a interface, sero colocados os componentes. Como vimos anteriormente, a
ser mostrado como codificar o comportamento de alguns com- Swing oferece vrias opes de continer. Dentre elas, optamos
ponentes, tais como botes, caixas de texto e botes de rdio. por usar o componente JFrame. Ele ser criado em um pacote dentro
A interface consiste de uma calculadora de quatro operaes, do n Pacotes de cdigo-fonte, seguindo estes passos:
onde duas caixas de texto (JTextField) sero usadas para entrada 1. Na janela Projetos, clique com o boto direito no n Pacotes de
dos valores a serem calculados, quatro botes de rdio (JRadio- cdigo-fonte e escolha Novo > Formulrio JFrame;
Button) permitem a escolha da operao desejada (adio, sub- 2. Digite CalculadoraUI em Nome da classe e ui em Pacote;
trao, multiplicao e diviso), um boto (JButton) faz o clculo 3. Clique em Finalizar.
e o resultado mostrado em uma terceira caixa de texto. Alm
destes, dois botes completam a interface: um que faz a limpeza Nesse momento o NetBeans cria um form e uma classe denomi-
das caixas de texto e outro que provoca a sada do programa. nada CalculadoraUI. No GUI Builder aberto o form recm-criado,
3. Agora vamos redimensionar o JPanel para que ele possa aco- Figura 12. Posicionamento do JPanel em relao ao JButton
modar os outros componentes. Deste modo, clique na ala de
redimensionamento da margem direita do painel e o arraste at que identifique o grupo de componentes. Para definir o ttulo
que a linha guia da margem direita aparea na borda do JFrame, selecione o JPanel, v para a janela Propriedades e clique no boto
conforme mostra a Figura 11. Solte nesse ponto a ala de redi- elipse (...) da propriedade border;
mensionamento; 7. Na caixa de dilogo que aberta, selecione Borda de ttulo na
4. Selecione um JButton da Paleta e posicione-o prximo ao canto lista e digite Calculadora na propriedade Ttulo;
inferior direito do JFrame. Assegure-se de posicionar o boto 8. Clique em OK para salvar;
quando as linhas guias, semelhantes quelas da Figura 10, apa- 9. Neste exemplo, um JLabel ser utilizado para identificar caixas
recerem; de texto, principalmente. Ento, clique em um JLabel na Paleta e
5. Clique na ala de redimensionamento da margem inferior do posicione-o no canto superior esquerdo do JPanel, quando surgirem
JPanel e arraste-a para baixo at que apaream trs linhas guia as duas linhas guia, semelhante ao que exibido na Figura 13;
entre ele e o boto, como podemos ver na Figura 12. Voc tem 10. Neste ponto ser adicionada uma caixa de texto ao lado di-
essas trs opes de espaamento entre os componentes. Optamos reito do rtulo anterior. Selecione ento um JTextField na Paleta.
por deixar o espaamento em trs linhas, portanto solte a ala de Movimente o cursor direita do rtulo recm-adicionado at que
redimensionamento nesse ponto; aparea a linha que indica que os dois componentes esto alinha-
6. De uma maneira geral o JPanel rene componentes que per- dos pela base, e as duas linhas que definem a margem entre eles,
tencem a um mesmo grupo, tal como no exemplo que est sendo de acordo com o que pode ser visto na Figura 14. Clique nesse
criado. Nesta situao aconselhvel atribuir um ttulo ao painel, ponto para posicionar o componente;
20. A fim de oferecer uniformidade, aconselhvel definir que os jRadioButton4 Diviso rbDivisao
botes em um continer tenham o mesmo tamanho. Para obter jButton1 Sair btnSair
isso, selecione os dois botes adicionados no painel pressionando jButton2 Calcular btnCalcular
ao mesmo tempo a tecla CTRL. Ento clique com o boto direito jButton3 Limpar btnLimpar
em um deles, escolha a opo Mesmo tamanho e marque Mesma
largura. Dessa forma os dois botes tero o mesmo tamanho da- Tabela 1. Textos e nomes de variveis
quele que tiver o texto maior;
21. Para finalizar esta etapa, selecione o jRadioButton1 e marque provvel que, ao modificar o texto dos rtulos, as caixas de tex-
a caixa de verificao da propriedade selected. Isso define a to tenham ficado com tamanhos diferentes. Isto acontece devido
operao padro da Calculadora, pois esta a opo que estar aos rtulos terem diferentes tamanhos e os JTextField precisarem
selecionada sempre que o programa executar. se posicionar relativamente aos rtulos conforme ficou definido
durante o desenho da interface. A fim de resolver esse problema,
Ao adicionar um componente no form o NetBeans atribui a ele vamos alinhar os rtulos direita. Para fazer o alinhamento,
um nome de varivel e, quando o caso, um texto (text). Para um mantenha a tecla CTRL pressionada e selecione os trs rtulos.
JButton, por exemplo, text identifica visualmente o objeto. Em um Em seguida clique no boto Alinhar direita na coluna na barra de
JTextField, o texto representa o contedo digitado pelo usurio. ferramentas, como mostra a Figura 19.
Essas propriedades devem ser modificadas para representar in-
formaes mais significativas, tanto para o usurio quanto para o
desenvolvedor. Contudo, antes de editar o texto e alterar o nome da
varivel de cada componente necessrio agrupar os JRadioButtons
de forma que apenas um esteja marcado de cada vez. Para conse-
guir essa funcionalidade preciso adicionar os quatro botes a um
ButtonGroup. Isto obtido obedecendo os passos a seguir:
1. Selecione um ButtonGroup na Paleta e o coloque em qualquer
lugar no form. Ele no visvel na interface, apenas em Inspetor,
sob o n Outros componentes;
2. Selecione o primeiro JRadioButton na interface;
3. Na janela Propriedades localize buttonGroup, clique na caixa
combinada direita e selecione buttonGroup1;
4. Repita os passos 2 e 3 para os demais JRadioButtons.
Aps finalizar esse procedimento, ir aparecer uma linha Figura 19. Alinhamento de componentes direita
indicando que os botes de rdio esto interligados formando
um grupo. Clique no boto Visualizar desenho na barra de ferramentas do
Agora sero modificados o texto e o nome da varivel dos com- GUI Builder para ver uma prvia da interface (Figura 20).
ponentes. Para fazer essas alteraes, clique com o boto direito
do mouse sobre o componente na interface e selecione cada uma Terceira etapa: Adicionar funcionalidade
das opes: Editar texto ou Alterar nome da varivel. Guie-se pela Agora que a interface est pronta, vamos programar as funes
Tabela 1 para fazer as alteraes. de cada um dos botes: Sair, Limpar e Calcular.
Por fim, pressione F6 para executar o programa. Se aparecer um escolhendo a opo Personalizar cdigo. Feito isso uma janela como
dilogo alertando que no existe classe main definida para o pro- a da Figura 22 ser mostrada.
jeto, simplesmente escolha ui.CalculadoraUI na lista e confirme. A rea principal da janela mostra o cdigo gerado intercalado
com o cdigo personalizado pelo desenvolvedor. As linhas em
Tratamento de eventos cinza so geradas, mas podem ser modificadas escolhendo a op-
Uma interface grfica, por si s, no faz nada. Suas funcionali- o criao personalizada na caixa combinada (ComboBox) ao lado
dades vm da sua capacidade de lidar com eventos. E os eventos esquerdo de cada linha. O espao entre as linhas geradas podem
decorrem principalmente da interao do usurio com a aplicao, ser preenchidas com o cdigo do programador.
tais como o pressionamento de uma tecla, um movimento de
mouse ou clique de um boto. Quando esses eventos acontecem Listagem 5. Chamada ao mtodo que registra o listener.
eles devem ser tratados, de modo que o programa responda
btnSair.addActionListener(new java.awt.event.ActionListener() {
encaminhando o fluxo de execuo para mtodos denominados public void actionPerformed(java.awt.event.ActionEvent evt) {
tratadores de eventos. btnSairActionPerformed(evt);
Para permitir que um usurio interaja com uma aplicao GUI, }
});
atravs de um componente, necessrio o desenvolvedor executar
os seguintes passos: Listagem 6. Classe GUI implementando ActionListener.
1. Criar uma classe de tratamento de eventos, que chamada de
public class MinhaGUI extends JFrame implements ActionListener {
listener; JButton botao = new JButton(Sair);
2. Instanciar um objeto dessa classe;
//...
3. Registar esse objeto nos componentes que sero fontes de eventos.
MinhaGUI() {
//...
Uma classe de tratamento de eventos normalmente implementa botao.addActionListener(this);
}
uma interface ouvinte. Em Swing h vrias interfaces dessas, uma
para cada tipo de evento. Por exemplo: quando pressionamos um public void actionPerformed(ActionEvent e) {
boto gerado um ActionListener; se um JFrame for fechado um System.exit(0);
}
WindowListener gerado; e um MouseListener quem escuta o }
clique de um mouse.
Um ActionListener provavelmente o manipulador de evento que
ocorre mais comumente nas interfaces grfica, e tambm o mais Alm disso, observe que possvel alterar os modificadores de
fcil de implementar. Esse o listener que foi usado no exemplo da acesso da varivel correspondente ao objeto selecionado.
Calculadora e que ser usado nesta explanao. A segunda abordagem para customizar o cdigo gerado
O NetBeans adota a soluo de criar uma classe annima para atravs da janela Propriedades. Selecione o componente desejado
tratamento de eventos e a instanciar na chamada ao mtodo que e escolha a aba Cdigo na janela Propriedades. Com isso, uma lista
registra o listener no componente. Classe annima uma classe de propriedades como a da Figura 23 ser mostrada.
definida dentro de um mtodo - para a qual apenas um objeto ser Para modificar uma propriedade, clique no boto elipse () ao
instanciado - e cujo nome omitido na sua criao. lado de cada uma. Uma janela de edio ser aberta para inserir
Observe na Listagem 5 que o mtodo addActionListener() que o cdigo desejado, como mostra a Figura 24. Tanto nesta janela
registra o ouvinte em btnSair - recebe como parmetro um objeto quanto no Personalizador do cdigo existe suporte a complementao
ActionListener. Este objeto instanciado quando new java.awt. de cdigo da mesma forma que no Editor do IDE.
event.ActionListener() executado. A classe ActionListener uma As opes que o NetBeans prov para personalizar e controlar o
classe annima e implementa o mtodo actionPerformed(). Por sua cdigo gerado vo desde a alterao de modificadores at a inclu-
vez este mtodo invoca btnSairActionPerformed(evt), que imple- so de trechos de cdigo. Algumas dessas opes so:
mentado no corpo da classe GUI e mostrado na Listagem 1. N ome da varivel. Nome da varivel para um componente;
Existem outras maneiras de escrever um ActionListener. Uma Modificadores de variveis. Modificadores de acesso padro do
delas consiste em definir que a classe GUI implemente a interface Java (default, public, protected e private), bem como static, final,
ActionListener. Dessa maneira, a prpria GUI deve implementar volatile e transient. A varivel de um componente definida por
o mtodo actionPerformed(). Observe esta soluo no fragmento padro como private, mas nessa opo possvel alterar isso;
de cdigo mostrado na Listagem 6. U sar varivel local. Define que a referncia ao componente
Swing local a initComponents() e no criado como um membro
Personalizando o cdigo gerado pelo IDE da classe;
H duas maneiras para personalizar o cdigo gerado pelo Net- Criao de cdigo personalizado. A traduo correta desta opo
Beans. A primeira usando o Personalizador do cdigo. Este recurso deve ser "cdigo de criao personalizado". Nesta opo possvel
alcanado clicando com o boto direito sobre um componente e inserir um trecho de cdigo para instanciar o componente;
Figura 22. Personalizador do cdigo Figura 25. Cdigo de initComponents() intercalado com trechos do desenvolvedor
M Resumo DevMan
tricas de software tm sido apontadas como um
dos principais mecanismos para tornar o desenvol-
vimento e manuteno de softwares uma disciplina De que se trata o artigo:
mais previsvel e controlvel [Car 03]. Medir uma prtica Conhecer o cdigo um requisito essencial para que seja possvel de-
bsica em qualquer tipo de engenharia e na Engenharia de senvolver novas funcionalidades e mant-las com qualidade. Assim, neste
Software no diferente. Neste contexto, vrias mtricas tm artigo veremos como obter informaes do cdigo para que possamos
sido propostas para se medir atributos como tamanho, com- tomar as melhores decises sobre a evoluo do mesmo.
plexidade, coeso e acoplamento dos mais variados artefatos
de software. Para que serve:
As mtricas esto relacionadas tanto com o produto, como com Mtricas de software servem para termos parmetros de referncia sobre
processos de desenvolvimento e manuteno do software. A como est o cdigo de nossas aplicaes, saber como est o desempenho
partir delas, conseguem-se dados quantitativos que oferecem de cada membro da equipe do projeto, a complexidade de cada mtodo,
uma boa informao sobre o andamento do projeto. Com essas classe, entre outras informaes.
informaes, possvel fazer a estimativa de custos, prazos de
entrega e at mesmo ter noo sobre a qualidade do sistema Em que situao o tema til:
[Car 03]. Este tema til para desenvolvedores, analistas e gerentes de projetos
Nos dias de hoje, o desenvolvimento de grandes sistemas que se preocupam com a qualidade do mesmo e que precisam de dados
uma atividade que vem se tornando cada vez mais comum e que para poder tomar decises a respeito do software em desenvolvimento.
consome muito tempo e esforo. Sabendo-se que cada etapa do
desenvolvimento de um sistema requer planejamento e esforo, Conhecendo as mtricas de software:
preciso fornecer informaes para que os desenvolvedores Neste artigo abordamos o conceito de mtricas de software, destacando
possam tomar decises sobre o andamento das atividades. a sua importncia para que o desenvolvedor saiba como obter informaes
Desta forma, as mtricas de software tornam-se necessrias sobre seu cdigo. Alm disso, conhecemos trs mtricas: de tamanho, de
para identificar informaes sobre o processo e auxiliar nas complexidade e de coeso.
decises tomadas.
Listagem 1. Cdigo comentado. Um exemplo deste problema pode ser visto nas Listagens 1 e 2,
onde o mesmo cdigo apresentado, s que escrito de formas
import java.io.*;
diferentes.
public class Estrutura A partir das Listagens 1 e 2, pode-se notar uma pequena dife-
implements Serializable {
rena na quantidade de linhas, mas que, considerando que esse
private String nome, trecho de cdigo faz parte de um sistema com centenas de clas-
endereco; ses, essa diferena, se repercutida nos demais arquivos, pode se
//Construtor da classe Estrutura
tornar significativa. Nestas imagens, tambm possvel observar
public Estrutura() { diferenas no estilo de programao, como por exemplo, quanto
quebra de linha. Como voc pode notar, muitos so os fatores
}
//Mtodo main que podem influenciar no resultado de uma mtrica.
public static void main(String args[]) { A seguir, na Tabela 1, sero apresentadas algumas mtricas de
//Verifica a quantidade de argumentos passados cdigo fonte [Car 03].
if (args.length == 3)
System.out.println(Testando argumentos);
else Mtricas estudadas neste artigo
System.out.println(ERRO);
Para este artigo foram estudadas algumas mtricas de cdigo
}
} fonte (tamanho, complexidade e coeso), sendo apresentadas a
partir de agora.
Listagem 2. Cdigo no comentado.
package modelodedadostm;
import java.awt.Color; int red = (int)(c2.getRed() * ratio + c1.getRed() * (1 - ratio));
import java.awt.event.*; int green = (int)(c2.getGreen() * ratio + c1.getGreen() * (1 - ratio));
import java.util.*; int blue = (int)(c2.getBlue() * ratio + c1.getBlue() * (1 - ratio));
import javax.swing.event.*; return new Color(red, green, blue);
import java.io.*; }
public class TmColorScheme implements Serializable{ public Color getSequentialColor(float itemValue, float minValue, float maxValue,
//declaraes omitidas... float zeroValue){
if (itemValue < zeroValue) {
public TmColorScheme(VisualAttributes va) { return getSequentialColor(itemValue, minValue, zeroValue, initialColor, zeroColor);
this.va = va; } else {
addChangeListener(va); return getSequentialColor(itemValue, zeroValue, maxValue, zeroColor, finalColor);
initialColor = Color.white; }
zeroColor = Color.black; }
finalColor = Color.red; public Color getCategoricColor(int value){
if (value >=0 && value < TOTAL_COLORS) {
TOTAL_COLORS = Standard.length; return Standard[value];
} }
public Color getSequentialColor(float itemValue, float minValue, float maxValue){ else {
if (zero) { return Color.white;
float zeroValue; }
if (va.getZeroValue() == null) { }
zeroValue = (minValue + maxValue)/ 2; public void setFinalColor(java.awt.Color newFinalColor) {
finalColor = newFinalColor;
} else { fireStateChanged(new ChangeEvent(this));
zeroValue = va.getZeroValue().floatValue(); }
} public java.awt.Color getFinalColor() {
return getSequentialColor(itemValue, minValue, maxValue, zeroValue); return finalColor;
} else { }
return getSequentialColor(itemValue, minValue, maxValue, initialColor, finalColor); public synchronized void removeChangeListener(ChangeListener l) {
} if (changeListeners != null && changeListeners.contains(l)) {
} Vector v = (Vector) changeListeners.clone();
private Color getSequentialColor(float itemValue, float minValue, float maxValue, v.removeElement(l);
Color iColor, changeListeners = v;
Color fColor){ }
Color c1 = iColor; }
Color c2 = fColor; }
float ratio = (itemValue - minValue)/(maxValue - minValue);
de entidades de programa no relacionadas entre si e que no muitas opes de ferramentas e plugins para os IDEs mais utiliza-
deveriam estar juntas. Simplificando a definio, uma classe dos por ns desenvolvedores. Deste modo, no deixe de aprimorar
que implementa comportamentos (mtodos) que deveriam seu cdigo. Voc, e todas as pessoas envolvidas no projeto tm a
estar em outra classe possuem baixa coeso. Por sua vez, uma ganhar com isso.
classe bem projetada deve possui alto grau de coeso e baixo
grau de acoplamento. Esta uma das principais boas prticas Eduardo Oliveira Spnola
de programao! eduspinola@gmail.com
Colaborador das revistas Engenharia de Software Magazine, Java
Concluso Magazine e SQL Magazine. bacharel em Cincias da Computao
pela Universidade Salvador (UNIFACS) onde atualmente cursa o mes-
Para programar com qualidade preciso conhecer bem o nosso
trado em Sistemas e Computao na linha de Engenharia de Software,
cdigo. Mas como fazer isso se no sabemos tirar suas medidas?
sendo membro do GESA (Grupo de Engenharia de Software e Aplicaes).
Como medir algo que fisicamente no existe? Para isso existem as
mtricas de software, e este foi o assunto abordado neste artigo.
[Car 03] Carneiro, Glauco de Figueiredo. Usando Medio de
Aqui vale ressaltar que analisamos apenas algumas mtricas,
Cdigo Fonte para Refactoring.
mas muitas outras esto disponveis para simplificar ainda mais
Dissertao de Mestrado. Universidade Salvador. Salvador. Abril, 2003.
as nossas decises. Para facilitar este trabalho, tambm existem