sexta-feira, 1 de agosto de 2008

Software com aparência nativa

Quando um novo software para desktop (não para web) começa a ser criado, é importante definir em quais sistemas operacionais ele deve funcionar. Atualmente grande parte dos softwares desktop comerciais (ou seja, softwares para serem vendidos) são feitos para Windows e, em menor escala, para Mac. Uma coisa que o usuário leigo pode não perceber é a importância do software integrar-se visualmente no sistema operacional.


O Windows XP e Vista, o Mac OS X, o GNOME e o KDE possuem um guia para programadores desenharem as telas do programa de forma a integrar melhor o software no ambiente do sistema operacional. Dois dos comportamentos mais importantes que um software precisa ter para ficar bem integrado são: widgets nativos (artefatos gráficos nativos) e posicionamento "correto" de alguns botões (mas este segundo caso não será tratado neste artigo).

Muitas são as bibliotecas (API) que permitem o desenvolvimento de software multi-plataforma, ou seja, que permitem que um mesmo código-fonte seja "executado" (compilado ou não) normalmente em diversos sistemas operacionals, como Windows, Mac e Linux. Algumas destas bibliotecas são: QT, Real Basic, wxWidgets, GTK+, Evolution, Swing, SWT, Mozilla XUL, e suas ligações com diversas linguagens de programação, como PyQT, PyGTK, etc.

Mas poucas são as bibliotecas que permitem o desenvolvimento multi-plataforma e que ao mesmo tempo mantenham os widgets nativos do sistema operacional. Hoje em dia, um programa feito em GTK+ roda nativo no Linux mas fica esquisito em Windows e Mac. Um programa feito em Swing fica esquisito em qualquer sistema operacional, já que ele emula a aparência e o comportamento dos widgets em todos os sistemas operacionais (embora isto tenha melhorado um pouco no Java 6). Um programa feito em wxWidgets fica com aparência nativa em Windows, mas fica esquisito nos outros sistemas operacionais.

Atualmente muitas pessoas podem pensar que há poucas maneiras de se desenvolver um software multi-plataforma com widgets nativos, e que a principal delas é utilizar o paradigma MVC ou algo parecido, sendo que o View deve ser feito com ferramentas nativas, como Cocoa em Mac, C++, C#, C++ ou Visual Basic em Windows, e C, C++, Python ou qualquer coisa que suporte GTK+ ou QT em Linux, e o Controller e Model devam ser feitos em C ou C++ para ter portabilidade. Esta técnica e outras similares com certeza permitem uma aparência nativa em cada sistema operacional, mas existem outras soluções que exigem menos esforço e também permitem o uso de widgets nativos.

Algumas das bibliotecas que facilitam o desenvolvimento multi-plataforma com widgets nativos são: QT, Evolution, Real Basic e SWT. Isto significa que, a partir de um mesmo código-fonte (com nenhuma ou pouquíssimas modificações), é possível compilar e rodar o mesmo software em diversos sistemas operacionais, sem ter que criar uma versão para Windows, uma versão para Linux, uma versão para Mac, etc.

A maioria destas bibliotecas são comerciais, ou seja, não é possível utilizá-las gratuitamente para desenvolver software comercial. O QT pode ser utilizado gratuitamente desde que seja para desenvolver software sob licença GPL e algumas outras licenças livres, e possui boas ferramentas para desenvolvimento no Windows, como integração com o Visual Studio, e o QT Designer, que é multi-plataforma. O QT suporta desenvolvimento em linguagens C++ e Java, e há bindings para Python e outras linguagens. Já o SWT pode ser utilizado gratuitamente em qualquer tipo de projeto, e até agora identifiquei uma única ferramenta comercial boa para ajudar a desenhar janelas. O SWT roda exclusivamente com a linguagem Java, que por sua vez possui boas IDEs gratuitas como Eclipse e Netbeans.

Já o Real Basic possui uma linguagem própria, que mistura o antigo Basic com orientação a objetos, e que já mexi um pouco e parece viável para pequenos projetos.  O Evolution também possui uma linguagem própria, mas não cheguei a conhecê-la.

Para trabalhar com grandes projetos ou com software a ser mantido durante mais de 2 anos, sugiro ficar entre C++ e Java, por isso tenho certeza de que bons caminhos para desenvolvimento de software comercial com widgets nativos seja utilizando as bibliotecas QT ou SWT. Se seu software tem um requisito especial por desempenho gráfico, como jogos, sugiro ficar com QT e C++. Se o software é software para negócios, sugiro ficar com SWT e Java.

Nenhum comentário:

Postar um comentário

Por favor identifique-se: primeiro nome, instituição, ou o que lhe convier.