Tecnologias utilizadas

Foi decidido, inicialmente, que o software para simular o movimento browniano deveria ser desenvolvido em C++, no ambiente de desenvolvimento Microsoft Visual C++ Express 2005 e utilizando as bibliotecas GTK [9], para o desenvolvimento da interface gráfica, e VTK [10], para a renderização da simulação em três dimensões.

Tanto a linguagem como o ambiente de desenvolvimento e as bibliotecas não eram bem conhecidas; foi necessário estudá-las e desenvolver programas de teste utilizando-as, o que foi feito logo de início, em conjunto com os estudos sobre o movimento browniano.

Outra ferramenta que auxiliou bastante no processo de gerenciamento de dependências e compilação do software foi o CMake [11], cujo objetivo é, dado um conjunto de arquivos de código e um conjunto de dependências, gerar automaticamente um arquivo (ou um conjunto de arquivos) que possa(m) ser utilizado(s) para compilar a aplicação de forma automática.

Dado que C++ é uma linguagem com um bom suporte a orientação a objetos, foi decidido que este paradigma deveria ser utilizado. Para que pudesse ser melhor aplicado, foi necessário utilizar uma biblioteca auxiliar [12] para o GTK - a biblioteca GTKmm -, cujo objetivo é tornar a interface desta última mais orientada a objetos.

Ainda com relação a orientação a objetos, foram aplicados, sempre que possível, padrões de projeto [13], a fim de tornar a aplicação mais flexível e fácil de entender para outros desenvolvedores. Dentre os padrões aplicados, podem ser citados o Abstract Factory, o Singleton e o Observer.

Um ponto bastante difícil era integrar as bibliotecas GTK e VTK na mesma aplicação. Após uma longa busca na Internet, foi encontrada a biblioteca vtkmm [14], cujo objetivo é fornecer uma área de desenho para o VTK dentro de um componente de interface GTK. Mesmo assim, ainda é necessário, até o momento, inserir programaticamente o componente VTK na interface, uma vez que não integração desta biblioteca com o desenvolvedor visual de interfaces Glade, que vem com a biblioteca GTK. Também foi necessário fazer algumas alterações na biblioteca para que ela compilasse tanto em Windows como em Linux e para que utilizasse a ferramenta CMake para compilação, para que fosse possível integrar a construção da biblioteca com a construção do projeto como um todo.

Pouco depois do início do projeto, notou-se a importância da geração de números pseudo-aleatórios. Para facilitar essa geração e garantir uma dispersão boa dos números gerados, utilizou-se uma biblioteca de geração de números aleatórios baseada no algoritmo Mersenne Twister [15].

Quando a aplicação já estava mais complexa, notou-se a necessidade de uma biblioteca de simulação de mecânica e dinâmica clássicas, com detecção e tratamento de colisões, para que as moléculas do simulador colidissem entre si e com o meio de difusão. Implementar uma nova biblioteca para este simulador seria muito trabalhoso, sujeito a erros e não era o objetivo principal deste trabalho; foi introduzida, então, a biblioteca ODE [16], cujo objetivo principal é a simulação da dinâmica newtoniana de corpos rígidos.

Com o objetivo de melhorar a qualidade do código de testes do programa, também foi introduzida, posteriormente, a biblioteca CppUnit [17], cujo objetivo é prover classes e métodos para facilitar a escrita, a execução e o aproveitamento do código de testes.

Luiz Fernando Oliveira Corte Real 2008-11-28