Você está na página 1de 9

_java científico

Java e APIs
Científicas
APIs para processamento de dados
científicos em Java (que também podem
ser usadas em aplicações no dia a dia!)

Rafael Santos | rafael.santos@inpe.br


é doutor em Inteligência Artificial pelo Instituto Tecnológico de Kyushu, Japão. É tecnologista do Instituto Nacional de Pesquisas
Espaciais, atuando em pesquisa e desenvolvimento de aplicações e técnicas de inteligência artificial aplicada, mineração de dados
e processamento de imagens. É autor do livro “Introdução à Programação Orientada a Objetos usando Java” e de várias palestras e
tutoriais sobre Java e desenvolvimento de aplicações científicas.

E m 2001, George Johnson, autor de vários livros


sobre ciência em geral, escreveu um artigo para
o jornal The New York Times com o título “In Silica
de aplicações de diversas finalidades, inclusive cien-
tíficas. Pela própria natureza dos avanços científicos
e tecnológicos, áreas de aplicações que eram antes
Fertilization; All Science Is Computer Science”. No ar- domínio de cientistas e pesquisadores agora são
tigo o autor defende a ideia de que a pesquisa em
de uso comum – um dos exemplos mais típicos são
diferentes áreas é cada vez mais dependente de
técnicas e algoritmos de inteligência artificial, que
computação, através do uso de algoritmos inovado-
ainda continuam a ser pesquisadas e desenvolvidas
res, capacidade de processamento rápido de grandes
em universidades e institutos de pesquisa, mas que
quantidades de dados, uso de técnicas de descoberta
podem ser utilizadas diretamente em aplicações va-
do conhecimento e visualização etc. (técnicas que
riadas como detecção de vírus e SPAM, sistemas de
vêm sido cada vez mais desenvolvidas à medida em
apoio à decisão, controle, representação e manipu-
que demandas científicas aparecem e avanços tec-
nológicas permitem), e que portanto toda ciência é lação do conhecimento etc.
ciência da computação. Dez anos depois esta frase Este artigo apresenta algumas APIs da lingua-
é cada vez mais verdadeira, vivenciamos avanços gem Java que têm certa vertente científica ou tecno-
fantásticos em ciência e tecnologia, tudo com o su- lógica, mas que podem ser usadas diretamente nos
porte imprescindível de ciência da computação, em mais diversos tipos de aplicações, enriquecendo as
particular com a possibilidade de desenvolvimento possibilidades do desenvolvedor. Além das APIs, o
de sistemas que coletam, representam, processam e artigo apresenta uma bibliografia relativamente ex-
apresentam informações complexas dos mais diver- tensiva de livros que apresentam conceitos tecnoló-
sos tipos. gico e/ou científicos com fundamentos ou exemplos
A linguagem Java já se estabeleceu como uma apresentados em Java. Somente APIs e bibliotecas de
alternativa madura e flexível para o desenvolvimen- uso não-restrito (isto é, que podem ser usadas em
to de sistemas de vários tipos. Nos quase 20 anos projetos científicos ou comerciais sem aquisição de
desde sua criação, a linguagem foi enriquecida com licenças) foram consideradas, não por questões de
extensões, APIs e documentação na forma de tuto- ideologia, mas por questões de espaço e para facilitar
riais, livros etc., possibilitando o desenvolvimento o uso para testes e estudos.

37 \
Java tem vários usos: um é o desenvolvimento de aplicações científi-
cas de forma simples, portátil e eficiente. Este artigo apresenta uma
lista de APIs, bibliotecas e frameworks para aplicações científicas
em diversas áreas, assim como uma bibliografia comentada.

O artigo é dividido em tópicos que podem ter al- para realizar uma função computacional. Tradicio-
guma superposição entre si. Pela natureza do tema nalmente redes neurais têm sido usadas em apren-
que aborda, o artigo é incompleto: não é possível dizado computacional: muitos modelos fazem com
enumerar todas as APIs e referências bibliográficas que as redes aprendam conceitos sobre dados apre-
existentes relacionadas com Java e aplicações cien- sentados (classificação, agrupamento, regressão etc)
tíficas, e certo viés do autor faz com que algumas em uma fase de treinamento, para que possam apli-
áreas sejam melhor representadas do que outras; no car estes conceitos a dados ainda não processados.
entanto onde possível serão apresentados links para Redes neurais são bastante utilizadas em problemas
sites com mais informações. de classificação, como, por exemplo, identificação de
padrões em imagens digitais, previsão de valores em
Inteligência Artificial séries temporais, detecção de intrusão em sistemas
Inteligência artificial, ou IA, é uma das áreas computacionais, identificação de agrupamentos em
mais pesquisadas de ciência da computação, e uma dados complexos etc.
das que mais apresentou contribuições reais para a Muitos modelos de redes neurais existem, e vá-
ciência, possibilitando avanços em diversas áreas do rias APIs permitem o uso de redes neurais em apli-
conhecimento. Apesar de ser tema de pesquisa há cações em Java. Destas uma merece destaque: Encog
mais de 60 anos, ainda existem muitos problemas (http://www.heatonresearch.com/encog), que provê
em aberto em IA. vários modelos de redes neurais e outros algorit-
Pesquisa em IA é dividida em várias áreas, com mos que podem ser usados para aprendizado com-
várias abordagens e filosofias, às vezes complemen- putacional. Encog permite que redes neurais sejam
tares e às vezes conflitantes, e muitas vezes com for- embutidas em aplicações em Java, possibilitando a
te interseção com outras áreas de pesquisa em com- construção de redes neurais elemento por elemen-
putação e matemática (processamento de imagens, to, de forma bastante flexível, mas permitindo total
bioinformática, bancos de dados, controle, lógica, controle sobre os algoritmos usados e seus parâme-
pesquisa operacional etc.). Não é de se admirar que tros. Uma vantagem muito grande de Engoc é que a
não existe uma única metodologia que seja aplicável API (que pode ser usada sob a Licença Apache 2.0)
às várias áreas de IA, portanto não podemos consi- é bem documentada, com livros sobre os conceitos
derar factível a existência de uma API para IA – o que teóricos e práticos (veja a lista de livros neste artigo).
existe são APIs específicas para resolver problemas Outra API interessante é Neuroph (http://neu-
específicos ou que proveem famílias de algoritmos roph.sourceforge.net/), também com implementa-
relacionados. Algumas destas serão descritas nesta ções de vários modelos de redes neurais, com uma
seção. vantagem: é possível modelar e executar as redes
neurais através de uma interface gráfica, que tem um
Redes Neurais forte apelo educativo: Neuroph Studio, baseada na
Redes neurais são um dos paradigmas mais co- plataforma Netbeans.
nhecidos e usados de IA, portanto um dos mais im- Outra API que provê diversos modelos de redes
plementados. Redes neurais são basicamente circui- neurais é a JOONE (Java Object Oriented Neural En-
tos simulados, inspirados em neurônios biológicos, gine, http://sourceforge.net/projects/joone/), que
que conectam várias unidades de processamento foi uma das primeiras APIs que implementam redes

/ 38
neurais de forma detalhada, mas que têm tido muito Não podemos considerar mineração de dados
pouca atividade recentemente. como algoritmos, mas sim como metodologias. Ta-
refas de mineração de dados usam vários algoritmos
Sistemas Especialistas de pré-processamento, filtragem, classificação, visu-
Sistemas especialistas foram um dos primeiros alização e avaliação de resultados. Técnicas de mi-
sucessos de IA: sistemas capazes de emular o conhe- neração de dados têm sido usadas com sucesso em
cimento de um especialista humano (descontando aplicações como detecção de fraudes, segmentação
capacidades de percepção, por exemplo – sistemas de bases de clientes, identificação e caracterização
especialistas só conseguem raciocinar usando as re- de padrões biológicos/biomédicos etc., geralmente
gras contidas neles). Sistemas especialistas são ba- usando algoritmos baseados em redes neurais, sis-
seados em regras que são avaliadas com dados exis- temas especialistas e variantes, e, em muitos casos,
tentes para chegar a conclusões. Apesar do sucesso combinações destes algoritmos.
inicial, algumas limitações de sistemas especialistas Duas APIs bem conhecidas para mineração de
não puderam ser resolvidas de maneira satisfatória, e dados em Java são Weka e RapidMiner. Weka (Wai-
hoje são desenvolvidos para dar suporte à tomada de kato Environment for Knowledge Analysis, http://
decisão em domínios específicos. Para isto os siste- www.cs.waikato.ac.nz/ml/weka/) é a mais conhecida
mas especialistas são desenvolvidos (isto é, suas re- e usada para prototipação e testes de algoritmos de
gras escritas) usando ambientes específicos, capazes mineração de dados, pois provê uma interface gráfica
de avaliar as regras e dados apresentados a elas. Sis- que permite a usuários executar vários algoritmos em
temas especialistas ainda são usados para várias ta- conjuntos de dados relativamente pequenos. Weka
refas que envolvem diagnósticos, como avaliação de também provê uma API que permite a inclusão de ro-
pedidos de empréstimo, pré-diagnóstico de pacientes tinas de classificação (implementados como métodos
em hospitais, sistemas de apoio à decisão etc. estatísticos, redes neurais, árvores de decisão etc.),
Um dos ambientes mais conhecidos para criação agrupamento, busca de associações, e muitos outros
e aplicação de sistemas especialistas é o JESS, the em aplicativos em Java. RapidMiner (http://rapid-i.
Rule Engine for the Java Platform (http://www.jes- com/) também é uma aplicação completa com inter-
srules.com/jess/), que permite a criação de sistemas faces gráficas, mais abrangente do que Weka, e que
especialistas. As regras escritas em JESS não têm se- também pode ser usada em aplicações em Java. Exis-
melhança com código em Java, sendo mais próximas tem versões comerciais e gratuitas (comunitárias) de
da linguagem Lisp e CLIPS (“C Language Integrated RapidMiner.
Production System”, mas que nada têm a ver com a Outra API que pode ser usada para desenvolvi-
linguagem C!). JESS merece destaque nesta seção, mento de aplicações de mineração de dados é Mahout
pois pode manipular diretamente objetos em Java, (http://mahout.apache.org/), que implementa algo-
permitindo a integração de componentes em Java em ritmos de aprendizado por máquina que podem ser
código em JESS e vice-versa. executados na plataforma Hadoop. Vários algoritmos
básicos de classificação e agrupamento já estão im-
Mineração de Dados plementados em versões recentes. A API também é
Avanços em técnicas de aprendizado computa- relativamente bem documentada, inclusive com li-
cional aplicadas a grandes bases de dados deram ori- vros tratando especificamente da API.
gem ao termo Mineração de dados, também conhe-
cido como Data Mining. Aplicações de mineração de Agentes de Software
dados usam algoritmos para extrair conhecimentos Agentes de software são um conceito genérico
de bases de dados de diversas naturezas, com várias em inteligência artificial, podendo ser considera-
categorias de algoritmo para criar modelos ou regras dos, em sua forma mais genérica, como programas
de classificação a partir dos dados, encontrar agrupa- de computador que executam tarefas em nome de ou
mentos naturais e co-ocorrências de dados, visualizar sob as ordens de outra entidade (outro usuário, ou
dados, entre outras funções. Várias técnicas de IA po- mesmo outro programa). Agentes de software podem
dem ser aplicadas à mineração de dados. ser ativos ou reativos, podem exibir diversos graus

39 \
de autonomia, podem ser considerados inteligentes de novos problemas deve ser feita por novas classes
(tendo capacidade de aprender e executar raciocínios que serão referenciadas no código para resolvê-las.
simples) e podem ser combinados com outros em Outro framework para algoritmos evolutivos bem
sistemas multi-agentes, que podem cooperar e/ou conhecido é o Watchmaker Framework (http://wa-
competir entre si para executar determinada tarefa. tchmaker.uncommons.org/), que permite que o pro-
Agentes de software têm sido usados em aplicações gramador defina uma classe que representa a solução
distribuídas, inclusive sistemas de monitoramento de que deve ser evoluída, classes que implementem ope-
recursos e de inteligência artificial distribuída. radores de evolução, fábricas de candidatos e opera-
A API em Java mais conhecida para implementa- dores de avaliação de adequação e com estas execute
ção de agentes de software é JADE – Java Agent De- o motor de evolução. A documentação apresenta vá-
velopment Framework (http://jade.tilab.com/). JADE rios exemplos práticos, e os exemplos prontos para
provê uma arquitetura distribuída de agentes, que execução no site são muito interessantes.
podem residir em outras máquinas, sendo executados Ainda outros frameworks e APIs dignos de nota
por uma máquina virtual Java; provendo também ca- são ECJ 21 (A Java-based Evolutionary Computation
pacidades de comunicação entre uma aplicação prin- Research System, http://cs.gmu.edu/~eclab/projects/
cipal e agentes distribuídos em outros computadores. ecj/), que implementa vários algoritmos de otimiza-
JADE também provê ferramentas para descoberta e ção com documentação detalhada; JGAP (Java Ge-
monitoramento da execução de agentes remotos e netic Algorithms Package, http://jgap.sourceforge.
depuração destes. JADE é bem documentada, com tu- net/) com tutoriais detalhados para iniciantes e JMe-
toriais em diversos níveis disponibilizados no site do tal (Metaheuristic Algorithms in Java, http://jmetal.
framework e com um livro sobre a API. sourceforge.net/), com vários algoritmos implemen-
tados e problemas clássicos de otimização para ava-
Computação Evolutiva liação.
Computação evolutiva (ou evolucionária) é um
dos ramos de inteligência artificial que procura so- Processamento de Imagens
luções para problemas complexos através da imple- Processamento de imagens digitais também é
mentação simplificada de alguns mecanismos bioló- uma das áreas de pesquisa historicamente mais ativas
gicos, como criação de uma população de soluções, em computação, com muitos dos conceitos desenvol-
e avaliação, seleção e combinação das soluções mais vidos durante sua pesquisa resultando em ferramen-
eficientes – algoritmos genéticos são exemplos típi- tas que são usadas diretamente por consumidores,
cos desta abordagem. Alguns algoritmos de compu- muitas vezes embutidas em aparelhos eletrônicos
tação evolutiva tentam também usar o comporta- e software de uso geral – o melhor exemplo é o de
mento coletivo de organismos para procurar soluções smartphones com câmeras que permitem o proces-
ótimas para problemas complexos, alguns exemplos samento das imagens para melhoria visual e criação
clássicos sendo otimização por colônia de formigas, de efeitos. Mesmo assim ainda existem desafios a ser
enxame de abelhas e sistemas imunes artificiais. Al- vencidos, dois dos maiores sendo o processamento
goritmos de computação evolutiva têm sido usados de imagens de forma cada vez mais eficiente (uma
com sucesso em várias áreas de otimização, permi- vez que sensores que capturam imagens são cada vez
tindo o desenvolvimento de classificadores e agru- mais ubíquos e estão tendo cada vez mais resolução)
padores mais poderosos e flexíveis, sendo também e a recuperação de informações de alto nível de ima-
usados em problemas de corte e empacotamento, re- gens (visão computacional e compreensão de ima-
dução de custos em operações industriais complexas, gens). A aplicabilidade de técnicas de processamento
roteamento de redes etc. de imagens em áreas com grande demanda como as-
Várias APIs e frameworks podem ser usados para tronomia e medicina também indica que ainda exis-
o desenvolvimento de algoritmos evolutivos. Alguns tem muitos tópicos de pesquisa a ser abordados.
dos projetos (selecionados baseado na atividade Java provê classes e métodos básicos para pro-
dos desenvolvedores e abrangência) são MOEA Fra- cessamento de imagens na própria linguagem: é
mework (http://www.moeaframework.org/), especia- possível manipular arquivos contendo imagens nos
lizado em algoritmos evolutivos multiobjetivo, e am- formatos mais populares, ler os pixels de uma ima-
plamente documentado no código-fonte e com um gem, modificar estes pixels por manipulação direta
tutorial extensivo. Este framework vem com vários ou por algoritmos básicos e visualizar estes pixels em
algoritmos e problemas pré-codificados de forma que componentes gráficos. Como é possível manipular os
o código Java para resolver um destes problemas é valores dos pixels em memória, a implementação de
extremamente enxuto; em contrapartida a definição algoritmos de processamento de imagens em baixo

/ 40
nível (pixels e regiões) é relativamente simples. para o mapeamento da API procedural de OpenGL
A API JAI (Java Advanced Imaging, http:// (inclusive se beneficiando da aceleração de renderi-
www.oracle.com/technetwork/java/javase/tech/ zação em placas de vídeo com esta capacidade) para
jai-142803.html) provê extensões poderosas para Java. A API Java3D sofre dos mesmos problemas da
processamento de imagens, com alguns operadores API JAI, tendo sido transformada em projeto comu-
implementados de forma nativa para melhor perfor- nitário, mas com alguns desenvolvimentos recentes.
mance. Esta API provê classes para representação e Ambas as APIs podem ser consideradas de baixo nível,
processamento de imagens de grandes dimensões (de sendo usadas por outras APIs de nível mais alto para
forma ladrilhada, ou seja, somente regiões da imagem visualização científica e jogos, como, por exemplo,
são manipuladas a cada momento), representação de LWJGL (Lightweight Java Game Library, http://www.
imagens de ponto flutuante, e vários operadores de lwjgl.org/); JMonkeyEngine (http://jmonkeyengine.
baixo nível que não estão presentes na linguagem pa- org/); Ardor3D (http://www.ardor3d.com/) e JReality
drão (como, por exemplo, operadores de morfologia (http://www3.math.tu-berlin.de/jreality/).
matemática). A API também possibilita a programa- Muitas aplicações científicas relacionadas com
dores experientes a criação de novos operadores que computação gráfica servem para a visualização de
podem se beneficiar do modelo de processamento de algum tipo específico de dados, geralmente com pos-
imagens ladrilhadas. Infelizmente a API não tem sido sibilidade de inclusão de suas rotinas e técnicas em
mais desenvolvida, embora tenha sido transformada aplicações em Java. Algumas APIs com esta finalida-
em um projeto comunitário, mesmo assim suas van- de são JFreeChart (http://www.jfree.org/jfreechart/),
tagens continuam atuais. que permite a criação de gráficos em 2D relacionados
ImageJ (Image Processing and Analysis in Java, a valores numéricos de diferentes formas e estilos, e
http://rsb.info.nih.gov/ij/) é uma aplicação com in- que é amplamente documentada; Jzy3d (http://www.
terface gráfica que permite a análise de vários tipos jzy3d.org/) que permite a plotagem de gráficos em
de imagens digitais, com várias opções de formatos 2D e 3D, usando JOGL como base, e que tem várias
de leitura e gravação, vários operadores e funções in-classes para criação de gráficos de alta qualidade. Al-
termediárias e a possibilidade de estender a aplicaçãogumas destas APIs usam outras APIs que permitem
com plug-ins e macros. Centenas de plug-ins estão a criação de documentos gráficos em formatos ve-
disponíveis no site da aplicação, muitos incluem o toriais como PDF e SVG (que permitem a criação de
código-fonte documentado. Também é possível usar gráficos de melhor qualidade para inclusão em docu-
as bibliotecas de ImageJ em aplicações em Java. mentos), como, por exemplo, o toolkit Batik (http://
xmlgraphics.apache.org/batik/) para criação de gráfi-
Computação Gráfica e Visualização cos em SVG e a biblioteca iText (http://www.itextpdf.
Computação gráfica pode ser descrita, resumida- com/), para manipulação de arquivos em PDF.
mente, como a ciência e tecnologia de representar ob-
jetos matematicamente e transformar esta represen- Processamento de Informações
tação em imagens e vídeos para visualização. Muitos Geográficas
conceitos de computação gráfica em duas dimensões Muitas informações comerciais e científicas
(2D) já são parte constante de várias linguagens mo- têm um componente espacial ou geográfico. Alguns
dernas, e Java não é uma exceção: é possível repre- exemplos são sistemas de dados sobre a Terra, siste-
sentar, processar e renderizar elementos gráficos mas meteorológicos e relacionados a sensoriamento
simples como polígonos, linhas, imagens e texto em remoto, pontos coletados no espaço e no tempo por
forma gráfica em Java; assim como modificar vários sensores móveis etc. A representação e processamen-
aspectos da representação gráfica destes elementos. to das informações geográficas ou espaciais pode ser
Técnicas de computação gráfica são muito usadas no útil para visualização, correlação, descoberta de co-
desenvolvimento de jogos e mídia (em particular fil- nhecimento em geral e outras aplicações. A área da
mes), mas também em visualização científica. ciência que desenvolve e usa computação para repre-
Algumas APIs foram criadas para permitir tam- sentar e resolver problemas associados com geogra-
bém a representação, manipulação e interação com fia e geociências em geral é chamada geoinformática.
gráficos em três dimensões em Java, notadamente, Como em outros ramos da ciência, o que era antes
as APIs Java3D (versões em https://java3d.java.net/ pesquisa ou desenvolvimento específico hoje tem
e http://jogamp.org/deployment/java3d/) e JOGL aplicações em sistemas de uso comum ou comercial:
(http://jogamp.org/). O foco de Java3D é em detalhar várias aplicações podem se beneficiar da incorpora-
objetos em alto nível, mapeados em classes, organi- ção de dados geográficos, tanto para processamento
zados em um grafo de cenas; enquanto JOGL serve quanto para visualização destes dados.

41 \
De forma geral, sistemas de informações geográ-
/para saber mais
ficas (GIS, geographic information systems) são sis-
temas que permitem representação, processamento Alguns artigos sobre APIs específicas já foram publicados
e visualização de dados com coordenadas geográficas no passado:
associadas. Estes sistemas permitem a representação > Mineração de dados em Java: Weka (MundoJ 24)
de informações como pontos no espaço, linhas e po-
lilinhas e regiões, todas com dados geográficos e não- > Jogos 3D em Java na Prática (MundoJ 24)
-geográficos associados. Um GIS popular e atual. im- > Construindo Agentes Inteligentes com o JADE e Eclipse
plementado em Java é o uDig (User-Friendly Desktop (MundoJ 37)
Internet GIS, http://udig.refractions.net/), que é
integrado ao ambiente Eclipse e pode ser estendido > Entendendo Programação com Restrições Através da
com plug-ins. Outro GIS desenvolvido em Java, mas Resolução de Sudokus (MundoJ 48)
ainda com poucas funções, é o OpenJUMP (http:// > Introdução à Representação e Análise de Grafos com a
www.openjump.org/). API JUNG e Visualização Gráfica de Grafos com a API Jung
O GIS uDig usa internamente a API Geotools
(MundoJ 49 e 50, respectivamente); Receitas com GeoTools
(The Open Source Java GIS Toolkit, http://geotools.
–> Desenhando Mapas a partir de Shapefiles (MundoJ 54)
org/) que é de longe a biblioteca mais poderosa e ver-
sátil para processamento de informações geográficas. > Recomendando Filmes com Apache Mahout e Hadoop
Geotools permite o desenvolvimento de aplicações (MundoJ 58). Outros sobre outras APIs mencionadas neste
simples baseadas em dados geográficos, desde a lei- artigo virão no futuro!
tura de dados em diversos formatos até a visualização
interativa com aplicações com interfaces gráficas ou
renderização dos dados. A biblioteca, por ser podero-
diferentes) e sistemas de equações lineares; análise
sa, é relativamente complexa, e somente nas últimas
simbólica simples (para resolução de equações algé-
versões a documentação com exemplos está ficando
bricas, integrais e derivadas), entre outras.
mais ampla e estável. Geotools é usada como base
A API exp4j (http://www.objecthunter.net/ex-
para GeoServer (http://geoserver.org/display/GEOS/
Welcome), que permite a disponibilização e interação p4j/) é simples e autocontida, e serve somente para
com dados geoespaciais. a avaliação de expressões reais: dada uma expressão
algébrica como uma String e valores para as variáveis
Matemática e Processamento Numérico nesta expressão, métodos das classes na API calcu-
Java provê funções matemáticas básicas nas lam os valores reais resultantes da expressão.
classes Math e StrictMath (que diferem em relação Algumas APIs são especializadas na represen-
à implementação, portabilidade e precisão – Math é tação, processamento e visualização de grafos, es-
mais eficiente, mas não retorna os mesmos exatos re- truturas compostas de arestas e vértices que co-
sultados de implementações em outras linguagens). nectam estas arestas, com várias variações. Estas
Para muitas outras aplicações de física, matemática e APIs em geral servem como base para o desenvolvi-
engenharia em geral são necessárias implementações mento de aplicações mais complexas que represen-
de outras funções e métodos mais complexos. Por al- tam dados como grafos. Entre estas APIs podemos
guma razão, das categorias consideradas para este citar: JUNG (Java Universal Network/Graph Fra-
artigo, esta é a que mais apresenta APIs e projetos mework http://jung.sourceforge.net/), que repre-
inacabados ou defasados. senta grafos de forma paramétrica (arestas e vér-
A biblioteca Apache Commons Math (http:// tices são instâncias de classes) e que provê vários
commons.apache.org/proper/commons-math/index.
algoritmos para análise e visualização de grafos;
html) contém classes para resolver vários problemas
Grph (http://grph.inria.fr/), que têm como caracterís-
genéricos de matemática e estatística, como solução
tica principal a eficiência computacional de sua im-
de equações simples, sistemas de equações lineares,
equações diferenciais ordinárias, minimização de plementação; JGraphT (http://jgrapht.org/) que foca
funções, testes estatísticos, processamento de ma- na representação de grafos e na implementação de
trizes etc. Outra biblioteca, JScience (http://jscien- vários algoritmos para seu processamento, e que usa
ce.org/) tem um escopo mais abrangente, contendo JGraph (http://www.jgraph.com/) para visualização,
tipos específicos para representação de constantes que é provavelmente a API mais completa e versátil
e variáveis relacionadas com medidas; matrizes pa- para representação de dados como grafos, usada na
rametrizadas (que podem ser de tipos numéricos interface gráfica de muitos outros projetos.

/ 42
Bioinformática perficialmente, com poucos detalhes em orientação a
Nos últimos anos, a ciência da bioinformática objetos, mas com seções sobre modelagem, simula-
cresceu por conta da revolução genômica: dados co- ções e métodos numéricos. O segundo livro, Java for
letados pelo sequenciamento de organismos criaram Engineers and Scientists (2nd Edition), por Stephen J.
uma demanda para sua análise em várias escalas de Chapman (Prentice-Hall, 2003), cobre mais aspectos
complexidade e comparação com sequências de ou- da linguagem e de orientação a objetos, mas, apesar
tros organismos, entre muitas outras atividades de do título, com ênfase menor para aplicações cientí-
pesquisa. Muitos dos algoritmos relacionados com ficas. O terceiro livro, JavaTech, an Introduction to
bioinformática envolvem o acesso a bases de dados Scientific and Technical Computing with Java, por
remotas com dados em diversos formatos padrão, Clark S. Lindsey, Johnny S. Tolliver e Thomas Lind-
comparações e visualização em 2D e 3D, e descoberta blad (Cambridge University Press, 2005) também tem
de conhecimento nas bases de dados estruturadas de um foco maior nos conceitos da linguagem (com mui-
diversas formas. Parte do sucesso de vários projetos to mais detalhes do que os outros), mas também sem
recentes de sequenciamento genético (genoma hu- muita ênfase em aplicações técnicas e científicas. O
mano, cana-de-açúcar e outros organismos de im- último livro nesta categoria, Technical Java: Applica-
portância comercial), é devido aos avanços em técni- tions for Science and Engineering, por Grant Palmer
cas de bioinformática. (Prentice-Hall, 2003), também apresenta a linguagem
BioJava (http://biojava.org/) é uma das APIs mais de forma abrangente, comparando-a com linguagens
completas para processamento de dados de bioin- tradicionalmente usadas para fins científicos, como
formática, amplamente documentada (incluindo do- Fortran e C. O livro apresenta alguma ênfase, nos ca-
cumentação da API e um livro de receitas on-line) e pítulos finais, em Java para cálculos matemáticos, em
contendo métodos para processamento de arquivos particular com classes para resolver equações dife-
nos diversos formatos, análise de sequências biológi- renciais ordinárias.
cas, e visualização se integrada ao Jmol (http://jmol. Java After Hours: 10 Projects You’ll Never do at
sourceforge.net/), um visualizador para estruturas Work, por Steven Holzner (Sams Publishing, 2005) e
químicas em 3D, que é independente de outras APIs. Wicked Cool Java: Code Bits, Open-Source Libraries,
and Project Ideas, por Brian D. Eubanks (No Starch
Livros sobre APIs Científicas e Press, 2005) apresentam pequenos projetos que usam
Java e que são considerados pelos autores como sen-
Programação de Aplicações Científicas do diferentes do que se vê em livros de programação
Esta seção apresenta uma lista comentada de
e em cursos básicos (portanto exigem algum conheci-
livros relacionados com os tópicos deste artigo (so-
mento da linguagem). Em particular o segundo livro
mente livros, tutoriais e outros documentos podem
apresenta várias técnicas e APIs em temas diversos
ser encontrados nos sites das respectivas APIs e fra-
como inteligência artificial, web semântica, manipu-
meworks). Também por causa da natureza dos tópi-
lação de sons e MIDI etc., mas de forma abreviada e
cos cobertos no artigo, considero a lista incompleta: superficial, servindo como ponteiro para as respecti-
possivelmente existem bons livros sobre tópicos es- vas APIs.
pecíficos que desconheço ou não tive a oportunidade
de ao menos folhear. Todos os livros apresentados
são em inglês, e podem ser adquiridos em livrarias
Inteligência Artificial
AI Algorithms, Data Structures, and Idioms in
virtuais como Amazon.com. Alguns dos livros descri-
Prolog, Lisp, and Java (6th Edition), por George F. Lu-
tos estão um pouco defasados, mas muitos apresen-
ger e William A Stubblefield (Addison-Wesley, 2008)
tam conceitos e implementações usando a linguagem
apresenta conceitos de inteligência artificial nas três
sem APIs externas, portanto, seu código pode ser fa-
linguagens, com exemplos em algoritmos de busca,
cilmente adaptado para novas características da lin-
sistemas especialistas, aprendizado por máquina,
guagem Java.
algoritmos genéticos e computação evolutiva e pro-
cessamento de linguagem natural. Um ponto de des-
Livros introdutórios (com aspectos de taque deste livro é a extensiva (e relativamente re-
ciência e engenharia) cente) lista de software para os tópicos cobertos pelo
Vários livros tentam mostrar aspectos de progra- livro.
mação em Java e orientação a objetos para cientis- Data Mining: Practical Machine Learning Tools
tas e engenheiros: Essential Java for Scientists and and Techniques (3rd Edition), por Ian H. Witten, Eibe
Engineers, por Brian Hahn e Katherine Malan (But- Frank e Mark A. Hall (Morgan Kaufmann, 2011) é o
terworth-Heinemann, 2003). Este livro cobre Java su- livro que descreve alguns dos conceitos por trás do

43 \
software e API Weka, muito usado para prototipação ticos podem se beneficiar mais de livros sobre o tema
e exploração de algoritmos de mineração de dados. em outras linguagens ou estudar documentação de
Outro livro sobre mineração de dados, Java Data Mi- APIs existentes.
ning: Strategy, Standard and Practice: A Practical Jess in Action: Java Rule-Based Systems, por Er-
Guide for architecture, design, and implementation, nest Friedman-Hill (Manning Publications, 2003)
por Mark F. Hornick, Erik Marcadé e Sunil Venkaya- mostra como criar sistemas especialistas usando a
la (Morgan Kaufmann, 2006), apresenta muitos con- linguagem e interpretador Jess, que tem sintaxe pa-
ceitos interessantes para quem precisa desenvolver recida com Lisp, mas permite a execução de código
um projeto de mineração de dados, cobrindo tópicos em Java, para, por exemplo, criar interfaces gráficas e
como estratégias e processos de mineração de dados realizar processamento numérico.
e padrões da indústria, e com uma segunda parte co- Dois livros sobre desenvolvimento de agentes
brindo implementações usando a API JDM (JSR-247), usando Java são Developing Multi-Agent Systems
que infelizmente aparentemente está desativada, with JADE, por Fabio Luigi Bellifemine, Giovanni
sem implementações que possam ser usadas. Caire e Dominic Greenwood (Wiley, 2007) e Cons-
O livro Mahout in Action, por Sean Owen, Robin tructing Intelligent Agents Using Java: Professional
Anil, Ted Dunning e Ellen Friedman (Manning Pu- Developer’s Guide (2nd Edition), por Joseph P. Bigus
blications, 2011) trata da API Mahout, apresentando e Jennifer Bigus (Wiley, 2001). Destes, recomendo o
exemplos e detalhes técnicos. O livro está de certa primeiro, por tratar de uma API bem mais completa e
forma defasado, por causa dos recentes avanços na em desenvolvimento ativo.
API ainda não documentados em novas edições do
livro. Processamento de Imagens,
Dois livros imprescindíveis para quem quer usar
modelos de redes neurais ou aprendizado por má- Computação Gráfica e Visualização
quina para aplicações práticas são Introduction to Existem vários livros sobre processamento de
Neural Networks for Java (2nd Edition), por Jeff He- imagens digitais em Java: Digital Image Processing:
aton (Heaton Research, 2008) e Programming Neural An Algorithmic Introduction using Java, por Wi-
Networks with Encog3 in Java (2nd Edition), também lhelm Burger e Mark J. Burge (Springer, 2008) é um
por Jeff Heaton (Heaton Research, 2011). O primei- dos melhores livros sobre processamento de imagens
ro livro cobre aspectos teóricos de redes neurais, em Java, com a vantagem de usar como base as APIs
mas sem se prender muito à matemática por trás de ImageJ. Digital Image Processing: A Practical
dos conceitos, mostrando também alguns exemplos Introduction Using Java, por Nick Efford (Addison-
de implementação dos diversos modelos de redes. O -Wesley, 2000), apesar de defasado, apresenta os
segundo livro cobre aspectos práticos de como imple- conceitos básicos de processamento de imagens de
mentar redes neurais usando Encog, um framework forma clara e adequada. Outro livro que está defasa-
para desenvolvimento de redes neurais que pode ser do, mas ainda é uma excelente referência é Building
usado também em C#. O segundo livro é recomen- Imaging Applications with Java Technology: Using
dado para quem já conhece um pouco de teoria de AWT Imaging, Java 2D, and Java Advanced Imaging
redes neurais e quer usá-las em suas aplicações sem (JAI), por Lawrence H. Rodrigues (Addison-Wesley,
precisar desenvolvê-las a partir do zero. Estes livros 2001), que cobre praticamente todas as tecnologias
podem também ser comprados diretamente do autor baseadas em Java para processamento de imagens.
pelo site http://www.heatonresearch.com/, que tam- Três livros sobre conceitos de computação grá-
bém contém muitas outras informações relevantes. fica são Computer Graphics for Java Programmers,
Outro livro que apresenta conceitos de redes neurais por Leen Ammeraal e Kang Zhang (Wiley, 2007) apre-
com implementações em Java é Java Implementation senta os conceitos básicos de computação gráfica em
of Neural Networks, por Mukarram A. Tahir (Book- 2D e 3D, mas sem usar APIs externas (como Java3D
Surge Publishing, 2007), com um bom balanço entre ou JOGL, por exemplo). Introduction to Computer
teoria e implementação, sendo útil para programa- Graphics: Using Java 2D and 3D, por Frank Klawonn
dores que querem explorar o funcionamento interno (Springer, 2008) aborda diretamente as APIs Java2D e
das redes neurais. Java3D com muitos exemplos, sendo uma excelente
Applied Evolutionary Algorithms in Java, por Ro- introdução ao Java3D. Foundations of 3D Graphics
bert Ghanea-Hercock (Springer, 2003) apresenta al- Programming: Using JOGL and Java3D (2nd Edi-
guns conceitos de algoritmos genéticos e evolutivos tion), por Jim X. Chen e Chunyang Chen (Author)
com pouca ênfase na teoria, e com código que acom- apresentam conceitos práticos de JOGL (com ênfase
panha os conceitos, mas com exemplos superficiais. maior em OpenGL) e Java3D.
Leitores que desejam implementar algoritmos gené- Java Media APIs: Cross-Platform Imaging, Me-

/ 44
dia and Visualization, por Alejandro Terrazas, John goritmos genéticos. O livro não mostra soluções para
Ostuni e Michael Barlow (Sams Publishing, 2002) cada problema em ambas as linguagens, mas como
apresenta as APIs relacionadas com processamento simplifica o desenvolvimento fica fácil para um pro-
de imagens (inclusive usando Java Advanced Imaging), gramador adaptar o código em C++ para Java. Outro
processamento de multimídia com o Java Media Fra- livro com a mesma abordagem é Mathematical Tools
mework e visualização com Java3D. Apesar das APIs in Signal Processing with C++ and Java Simulations,
e frameworks cobertos estarem bastante defasados o por Willi-Hans Steeb (World Scientific Publishing,
livro ainda contém informações úteis. 2005), que apresenta vários conceitos e algoritmos
relacionados com processamento de sinais, com forte
Processamento de Informações ênfase em transformadas (Fourier, transformada dis-
Geográficas creta de cosseno, wavelets etc.). Os códigos são mos-
Apesar do título, o livro Java Programming for trados alternadamente em Java e C++, mas programa-
Spatial Sciences, por Jo Wood (CRC Press, 2002) não dores experientes podem facilmente transformar os
cobre detalhes sobre sistemas de informações geo- códigos de uma linguagem para outra.
gráficas, nem APIs de processamento de informações
espaciais ou geográficas em Java, mas pode ser de uti- Outros Tópicos
lidade para programadores iniciantes por sua cober- Building Parallel Programs: SMPs, Clusters &
tura de conceitos básicos de Java. Java, por Alan Kaminsky (Cengage Learning, 2009) é
Existe um livro sobre a API Geotools disponível um livro extenso que cobre várias modalidades de pa-
para compra no site Amazon.com: GeoTools, editado ralelismo (computadores com processadores multico-
por Philippe Valentin Giffard (Tort, 2012), mas com re, clusters, sistemas híbridos), com exemplos claros e
somente 72 páginas, e o próprio editor menciona que didáticos. O que faz este livro particularmente inte-
o conteúdo do livro veio de artigos disponíveis na Wi- ressante são os exemplos de uso da API Parallel Java,
kipedia e em outras fontes públicas. desenvolvida pelo autor usando somente Java (sem
necessidade de bibliotecas externas), e disponibili-
Matemática e Processamento Numérico zada sob a licença GNU/GPL. Outro livro sobre pro-
Java Methods for Financial Engineering: Appli- gramação distribuída, Concurrent and Distributed
cations in Finance and Investment, por Philip Barker Computing in Java, por Vijay K. Garg (Wiley-IEEE,
(Springer, 2010) apresenta métodos numéricos e téc- 2004), cobre detalhes mais técnicos de programação
nicas de aproximação para uso em aplicações finan- concorrente, mas é menos didático e está um pouco
ceiras e de investimentos. O autor apresenta alguns defasado.
pacotes de classes desenvolvidos por ele em contexto Java for Bioinformatics and Biomedical Applica-
para várias aplicações financeiras. tions, por Harshawardhan Bal e Johnny Hujol (Sprin-
Interdisciplinary Computing in Java Program- ger, 2007) apresenta a linguagem de forma superfi-
ming, por Sun-Chong Wang (Springer, 2003) apre- cial, mostrando como criar interfaces para sistemas
senta, em cada capítulo, um conceito de computa- existentes na Web que processam dados de bioin-
ção científica (redes neurais, algoritmos genéticos, formática. Pela sua organização, pode ser um pou-
autômatos celulares, dinâmica molecular etc.) com co confuso para cientistas da computação (pois não
código em Java que implementa um dos algoritmos apresenta uma introdução à bioinformática) e para
relacionados a estes conceitos. O código é bastante biólogos e geneticistas (a linguagem é apresentada
defasado, mas pode ser corrigido por um bom pro- como uma ferramenta de interfaceamento com sis-
gramador. O livro Java Number Cruncher: The Java temas existentes, e código relativamente complexo é
Programmer’s Guide to Numerical Computing, por mostrado desde o início do livro).
Ronald Mak (Prentice-Hall, 2002) apresenta alguns
conceitos matemáticos e sua implementação em puro Considerações Finais
Java, incluindo integração de funções, operações em O universo das APIs para processamento científi-
matrizes e soluções de sistemas lineares. co em Java está em constante evolução – não somen-
Problems & Solutions In Scientific Computing te algumas APIs são aprimoradas ao longo do tempo,
With C++ And Java Simulations, por Willi-Hans como outras novas surgem e algumas desaparecem.
Steeb, Yorick Hardy, Alexandre Hardy e Ruedi Stoop Este artigo apresentou algumas APIs que podem ser
(World Scientific Publishing, 2004), mostra receitas usadas para o desenvolvimento de aplicações cientí-
de como fazer processamento numérico em C++ e ficas e que têm demonstrado capacidade de se man-
Java, incluindo métodos para resolução de equações ter graças ao esforço da equipe que as desenvolve e da
diferenciais e algumas receitas com redes neurais e al- comunidade que as usa.

45 \

Você também pode gostar