Eu podia estar descansando, eu podia estar passeando, mas estou aqui programando e estudando
Bom dia a todos. Estou aqui para apresentar meu projeto de conclusão do curso de Ciência da Computação, o Projeto Graphe. Trata-se de um aplicativo que visa facilitar o estudo de grafos, permitindo a criação visual dos vértices e arestas, além de obter informações relevantes ao estudo dos grafos, como matrizes de adjacência e incidência, dados sobre conexidade e conectividade. Outra característica é a possibilidade de executar algoritmos diversos sobre os grafos.
O aplicativo, hoje (12/10/2012) está na versão 0.8.4a. Para a versão 1.0, falta concluir algumas das análises disponíveis (como as de conexidade), e os algoritmos que estarão disponíveis já nesta versão (como as buscas em largura e profundidade), além é claro de algumas correções e melhorias.
Dúvidas, críticas e sugestões são bem vindas. Não sei se terei tempo de analisar e implantar cada uma delas (devo entregá-lo até o meio de novembro, daqui a um mês, mais ou menos), mas gostaria muito de saber a opinião de vocês.
Os arquivos estão disponíveis aqui: http://www.terraskilll.net23.net/
Observações:
- evitei o uso de quaisquer componentes/bibliotecas externas (como a JGraph). Embora forneçam excelentes recursos, preferi diminuir a dependência do programa, permitindo a ele rodar somente com a jre instalada, além de poder estudar Swing e Java2D, dois assuntos que me interessam;
- algumas das ideias do programa são baseadas em outros programas, dentre eles o JFlap, ImageJ, além de softwares específicos de grafos, como o Gephi, GraphAlg e Graph Editor;
- há codigo derivado e adaptado de terceiros, inclusive de pessoal do GUJ. Onde notei esse uso, coloquei os devidos créditos, mas se estiver faltando alguma coisa, me avisem;
Autocrítica: alguns pontos do programa não me agradaram plenamente, mas ainda não consegui soluções rapidamente aplicáveis para eles. Possivelmente, analisando o código fonte, alguns de vocês podem chegar as mesmas conclusões. Dentre eles, destaco:
- o elevado nº de iterações sobre os vetores de vértices e arestas, principalmente nas rotinas de desenho, seleção e movimentação, que comprometem o desempenho do aplicativo;
- meu conhecimento em Java e OO ainda não é muito sólido, então algumas coisas podem não estar tão otimizadas ou simples quanto poderiam (como o uso de String em vez de StringBuilder). Ficarei grato com comentários a respeito;
- o uso de Threads para alterar uma parte gráfica do sistema (no caso dos algoritmos, que adicionam/modificam elementos do grafo), que podem ser pausadas/reiniciadas. Falta um melhor tratamento contra erros nessa parte;
Estou postando este mesmo tópico no GUJ e no Guia do Hardware. Se alguém tiver contas nesses dois fóruns, sinta-se livre para comentar no que preferir.
Agradeço a atenção. Tenham um bom dia.
Abraços.