É possível usar o Lazarus em alternativa ao Delphi para desenvolver aplicações comerciais?

Autor: Evaldo Avelar Marques <evaldoavelar at
yahoo.com.br>

Introdução

IDE (integrated Development Environment) de desenvolvimento são
ferramentas fundamentais para o desenvolvimento de sistemas, pois
agilizam e facilitam o trabalho do programador. No entanto, há um
problema no uso de ferramentas proprietárias, como o Delphi para o
desenvolvimento de aplicações comerciais: o alto custo das licenças de
uso, o que leva muitas vezes os desenvolvedores e as empresas ao uso da
pirataria. Dessa necessidade surgem como alternativas os softwares de
licença livre.

O Lazarus é um ambiente de desenvolvimento integrado que tem
como objetivo ser compatível com a sintaxe Delphi, alem de suportar
diversas arquiteturas e sistemas operacionais diferentes. Porém, é comum
existir a dúvida se o software livre, nesse caso o Lazarus, é capaz de
substituir inteiramente o proprietário, Delphi, na tarefa de construir
um sistema.

Como modo de avaliação, foi proposta a ideia de construir um mesmo
aplicativo no Delphi e no Lazarus que atendesse aos requisitos básicos
de uma aplicação comercial. Desta forma seria possível medir as
dificuldades e ao mesmo tempo avaliar o ambiente no Lazarus. Para este
fim foi proposto o desenvolvimento do SUF, software de utilização
financeira, que tem como objetivo ser uma ferramenta de apoio ao
departamento financeiro de uma Fundação.

A escolha do SUF foi pelo fato de que seus requisitos continham
características que interessavam a este experimento como ser
multi-usuários, fazer acesso a banco de dados, ter cadastrado e pesquisa
nos dados, possuir relatórios gerenciais e ser aplicação estável e
confiável para uso no dia-a-dia.

Ambientes de desenvolvimento

Para este experimento foi utilizado o Code Gear Rad Studio Delphi
2007
. O Delphi 2007, apresentado na Figura 1, possui uma IDE
semelhante ao Visual Studio da Microsoft, com o código e formulários
centralizados e as barras de ferramentas nas laterais. A IDE permite a
criação de diferentes áreas de trabalho facilitando para o desenvolvedor
configurar o layout das ferramentas de acordo com o que está sendo
feito. A IDE também permite instalar plugins de terceiros para adicionar
novas funcionalidades.

Os componentes que acompanham a ferramenta permitem criar desde
aplicações simples até aplicações mais robustas, sendo que se for
necessidade o desenvolvedor pode criar seus próprios componentes e
instalar componentes de terceiros.

Para a depuração de aplicativos, o Delphi possui ferramentas de
visualização de pilhas de chamadas de funções, visualizador de conteúdo
de variáveis, variáveis locais, o assembler que está sendo executado no
processador, break points dentre outros. O Delphi possui ainda tecla de
atalho para a maioria de suas funcionalidades.

Linux: É possível usar o Lazarus em alternativa ao Delphi para 
desenvolver aplicações comerciais?

Fonte: Autoria própria

O Lazarus, apresentado na Figura 2, possui o visual muito semelhante ao
Delphi 7, apresentado na Figura 3, umas das versões mais usadas do
Delphi, com as barras de ferramentas e editor de código flutuantes. O
editor de código fonte do Lazarus possui mais recursos do que os
oferecidos pelo Delphi, como o formatador de código nativo e uma
ferramenta para comentar e descomentar blocos de códigos.

O Lazarus traz os componentes que são mais básicos para o
desenvolvimento de aplicações já pré-instalados e outros como o editor
de relatórios, no seu diretório padrão de componentes que podem ser
instalados a posterior. Assim como no Delphi, o Lazarus permite que o
desenvolvedor crie seus próprios componentes ou instale componentes de
terceiros.


Figura 2 – Lazarus

Fonte: Autoria própria

As ferramentas de depuração de aplicativo seguem a mesma linha do
Delphi, porém ainda precisam ser aprimoradas, como é o caso do
visualizador de conteúdo de variáveis que não "enxerga" o valor de uma
variável que está em outra unidade e o visualizador de assembler, que
não mostra muita informação.

As teclas de atalhos das funcionalidades do Lazarus também são
semelhantes as do Delphi. Atualmente o Lazarus está na versão 0.9.28.2
beta e para este experimento foi usado a versão win32 para Microsoft
Windows XP.

Desenvolvimento

A ideia para o desenvolvimento surgiu da necessidade de uma fundação
cuja principal atividade é a pesquisa e presta serviços de controle de
projetos a qual fica responsável também o gerenciamento de suas receitas
e despesas, necessitando de um sistema que atenda a essa demanda.

A missão do SUF é ser uma ferramenta de software que satisfaça as
necessidades da fundação, tanto para lançamentos financeiros como para
realizar consultas proporcionando aos usuários agilidade em suas
atividades.

A modelagem do SUF foi criada seguindo o documento de requisitos e o de
caso de uso do Praxis e em seguida as tabelas com os respectivos
relacionamentos no banco de dados. Os casos de uso do sistema podem ser
vistos na figura 4.

Linux: É possível usar o Lazarus em alternativa ao Delphi para 
desenvolver aplicações comerciais?
Figura 4
– Diagrama de Caso de Uso do Sistema SUF

Fonte: Autoria própria

Para o gerenciamento do banco de dados, foi usado o Firebird, visando
algumas das suas vantagens como: exige pouco processamento, pode ser
instalado em computadores mais antigos, evitando assim que se faça novos
investimentos, gerencia bem banco de dados pequenos, é multi-plataforma
e gratuito, mais comumente usado por programadores Delphi.

Na etapa seguinte foi desenvolvido o protótipo do SUF no Delphi. O
desenvolvimento inicializou com a criação de uma tela padrão de cadastro
da qual seriam herdadas as funcionalidades para construção das demais
telas de cadastro reaproveitando o código. Ao final da criação das telas
foram desenvolvidos os relatórios do sistema para a apresentação dos
dados de forma mais agradável e organizada ao usuário.

Em seguida, o protótipo do SUF foi migrado para a plataforma do Lazarus,
seguindo o mesmo processo de criação no Delphi. Após a instalação dos
componentes, foram desenvolvidas, assim como no Delphi, as telas de
cadastro reaproveitando o código já escrito no protótipo do Delphi. Para
esta tarefa foi utilizada a ferramenta de migração de formulários
disponível no Lazarus.

Durante o desenvolvimento do protótipo no Lazarus foi feito o
levantamento das dificuldades encontradas na implementação para a
comparação posterior.

A plataforma de hardware usada para o desenvolvimento do SUF, tanto no
Delphi como no Lazarus, foi um notebook Amazon PC com processador Turion
64×2 1.6GHz, 250 GB de disco rígido e 4 GB de memória RAM.

Ambiente Delphi

Após a criação do banco de dados foi preparado o ambiente para o
desenvolvimento primeiramente no Delphi com a instalação dos componentes
de acesso a dados e gerenciador de relatórios.

Para o acesso a dados foi instalado o componente ZEOS Library visando
manter compatibilidade no momento da exportação do código-fonte para o
Lazarus, já que a ZEOS Library também possui uma versão para o Lazarus. O
gerenciador de relatórios usado no Delphi foi o Quick Report devido a
sua semelhança de interface com o Lazarus Report.

Antes de iniciar a codificação dos formulários foi desenvolvido primeiro
a interface padrão de usuário do SUF. Inicialmente foi planejada uma
tela na qual o usuário pudesse visualizar os registros, navegar por eles
e aplicar filtros e outra tela onde os registros fossem cadastrados e
alterados.

Seguindo essa linha foram criados dois formulários padrões. No
formulário para as operações de visualização/recuperação dos registros
foi colocado um grid para exibir todos os registros e uma barra de
ferramentas para a manipulação dos mesmos, além de um filtro. No
formulário de cadastrado e edição, foi inseridos um contêiner onde
poderão ser colocados os campos nos formulários filhos e uma barra de
ferramenta com opções para cancelar e salvar o registro que está sendo
criado/alterado.

Com a interface já criada, deu-se início a escrita do código onde foi
inserido rotinas genéricas para salvar, recuperar, criar e alterar os
registros do banco de dados além de rotinas para tratamento de erros.
Essas rotinas tem a finalidade de poupar tempo na construção dos
formulários filhos, sendo que na maioria das vezes não será preciso
escrever nenhum código, bastando apenas "montar" a interface e associar a
fonte de dados.

O formulário principal foi desenvolvido levando em conta que este
deveria gerenciar os demais formulários, criando, exibindo e desalocando
da memória. Com isso foi colocado um menu contendo a referencia para
cada formulário criado.

Com o formulário principal e os formulários padrões de manipulação de
registro criados, deu se inicio a criação dos demais formulários de
cadastrado de acordo com os casos de uso. O primeiro a ser desenvolvido
foi o de cadastro de clientes para o qual foi criado um novo formulário
herdado do formulário de visualização e um outro herdado do formulário
de cadastrado/edição.

Na tela de visualização foi preciso apenas associar a fonte de dados ao a
grid. No formulário de cadastrado/edição foi colocados os controles
para cada campo já ligando-os a fonte de dados. Após esta etapa o
formulário já estava funcional e foi adicionado ao menu na tela
principal.

Os demais formulários: cadastro de projetos, fornecedores, departamento,
rubrica, bancos, usuários, contas a pagar e contas a receber, seguiram o
mesmo processo. Somente o formulário de cadastrado de "valores
impostos" é que não herdou dos formulários padrões devido a sua
interface ser diferente.

Ao término da criação dos formulários, foram cadastrados alguns
registros no banco de dados para que houvesse dados para possibilitar o
desenvolvimento dos relatórios. Foi construído dois relatórios para o
sistema, com a interface padronizada, com um cabeçalho e descrição de
cada campo. Depois de finalizado o desenvolvimento do SUF no Delphi,
deu-se início a preparação do ambiente no Lazarus e ao desenvolvimento
do SUF neste ambiente.

Linux: É possível usar o Lazarus em alternativa ao Delphi para 
desenvolver aplicações comerciais?
Figura
5 – Tela Principal do SUF no Delphi
Linux: É possível usar o Lazarus em alternativa ao Delphi para 
desenvolver aplicações comerciais?
Figura
6 – Tela Principal do SUF no Lazarus

Figura 7 – Relatório
do SUF no Delphi

Figura 8 – Relatório
do SUF no Lazarus

Figura 9 – Tela de
cadastro do SUF no Delphi

Figura 10 – Tela de
cadastro do SUF no Lazarus

Fonte: Autoria própria

Implementação no Lazarus e limitações encontradas

O objetivo maior desse experimento é fazer o levantamento das limitações
da IDE do Lazarus e o impacto de uma migração de projetos para que seja
possível analisar a possibilidade de seu real uso em desenvolvimentos
de aplicações comercias.

O primeiro passo foi preparar o ambiente do Lazarus para o
desenvolvimento como no Delphi instalando a ZEOS Library. Tentou se
instalar a versão disponibilizada no site sourceforge.net, porém está versão
apresentou uma serie de problemas e não conseguia conectar se ao banco
de dados.

Foi preciso pedir ajuda em uma lista de discussão especializada em
Lazarus. Um membro da lista sugeriu uma versão que ainda está em fase de
desenvolvimento mas que acabou funcionando. Após a instalação da ZEOS
Library deu se inicio a instalação do Lazarus Report para a criação dos
relatórios, este não apresentou nenhum problema.

Preparado o ambiente, iniciou-se a criação do projeto para a aplicação e
ao criar um novo projeto no Lazarus apareceu um bug que não permite que
se faça uma compilação sem antes salvar o projeto, fato que não causou
problemas para o desenvolvimento, mas que foi custoso encontrar o
motivo. Com a criação do projeto deu se início a criação dos formulários
seguindo as mesmas etapas que no Delphi iniciando-se pelos formulários
padrões.

Na criação do formulário de cadastro/edição e do formulário do
visualização que fazem uso dos componentes de acesso a dados foram
encontrado mais algumas dificuldades. Houve problemas para associar o
Datasource a um Dataset que estava situado em um DataModulo. O
componente Query que faz consultas ao banco de dados, na versão para o
Lazarus, não possui mascara para edição de campos o que obrigou a
instalação de um componente DBMaskedit para conseguir colocar mascara
nos campos de edição.

O componente DBGrid do Lazarus é mais avançado do que o Delphi tanto em
aparência quanto em funcionalidades, apesar de não possuir alguns
eventos como o "DefaultDrawDataCell". Mas a grande vantagem é que o
desenvolvedor não precisa escrever código para pintar as zebras nas
linhas do DBGrid, pois o componente já possui esta funcionalidade.

Herança visual é muito importante para reduzir o número de telas em uma
aplicação e para reaproveitar o código. Nesse ponto uma limitação do
Lazarus está em não adicionar a palavra-chave "inherited"
automaticamente aos métodos herdados o que provoca erro nas rotinas que
acabam não executando o código do pai.

No desenvolvimento do formulário principal, houve dificuldades para
manipular o componente MainMenu, responsável por criar o menu de
navegação na tela, devido a sua forma de "trabalhar" ser diferente a do
Delphi. Também houve dificuldades para se "visualizar" um componente do
tipo "Panel", que faz o papel de contêiner, ocorrendo que é muito fácil
confundi-lo com o próprio formulário.

Foram encontradas algumas limitações quanto ao uso de imagens no
projeto: como a da IDE não suportar ícones de tamanho 24×24, obrigando a
se fazer um redimensionamento dos ícones que foram usados no Delphi.
Também não é possível visualizar as imagens contidas uma ImageList ao
fazer um relacionamento de um objeto com um ícone. E ao alterar um ícone
em actionlist, o objeto que está vinculado a esta ActionList não
atualiza o ícone sozinho, é preciso fazê-lo manualmente.

Na codificação do formulário foi usado o mesmo código que do Delphi e
foi encontrada a falta da função LockWindowUpdate que faz referência a
API do Windows, fato que é justificado pelo Lazarus ser
multi-plataforma. Também não foi possível fazer com que a aplicação se
comportasse como MDI, onde os formulários são aberto dentro de outros
formulários. Outro problema é que quando não se faz mais uso de
procedures que são declaradas automaticamente pela IDE, como é o caso de
um clique de botão, a IDE não remove o código da procedure como ocorre
no Delphi e é necessário remover manualmente.

As ferramentas de depuração de código não conseguiram ser tão eficientes
quanto as do Delphi, como é o caso do dialogo de visualização de
variáveis que não consegue visualizar o conteúdo de uma variável que
está em outro módulo, obrigando o programador a usar recursos antigos
como dar um showmessage na variável para ver seu conteúdo. O compilador
também gasta um pouco mais de tempo para gerar os binários da aplicação.

Quando o aplicativo está em execução e por alguma razão gera alguma
exceção, é exibida uma mensagem genérica na tela, sem muita informação
da origem do erro, isto pode ser um grande problema para o programador
encontrar o que está gerando o erro.

O executável gerado possui um tamanho 23 vezes maior do que o criado no
Delphi que estava com 2,67MB e no Lazarus com 45 MB. Mais tarde
descobriu-se que uma configuração na IDE que reduziu o tamanho para
3,02MB. Ao usar esta configuração as opções de depuração não funcionaram
mais.

A interface do editor de relatório dificultou um pouco para encontrar o
componente label, e em alguns momentos a IDE fechou abruptamente
perdendo todo o trabalho que foi feito e que não havia sido salvo.
Também não foi encontrada uma "régua" para auxiliar no posicionamento
dos componentes na tela. Por outro lado, foram feitos testes com o
aplicativo em execução onde foram gerados relatórios de 100 páginas e
não houve nenhum problema.

Apesar de dar suporte ao código escrito no Delphi, o Lazarus não permite
portar componentes feitos para Delphi, o que pode dificultar a migração
de aplicações que usam componentes mais específicos, ou proprietários
como impressoras fiscais, controle de portas seriais dentre outros.

Conclusões

O Lazarus possui um ambiente de trabalho semelhante ao Delphi,
como teclas de atalho iguais e alguns recursos em sua IDE mais avançados
do que os do próprio Delphi. Tem a capacidade de compilar o mesmo
projeto para diferentes plataformas, dando uma vantagem competitiva para
as aplicações.

O Lazarus consegue ainda compilar quase todo código escrito em Delphi. A
maioria das classes, unidades e propriedades tem o mesmo nome e
funcionalidades, ainda não é possível ter uma compatibilidade de 100%,
mas é possível converter muito código entre eles. Com exceções de
algumas classes que ainda não foram implementadas em sua estrutura.

Não é possível portar para o Lazarus componentes feitos para o Delphi
devido a forma como os componentes são organizados, sendo assim alguns
componentes como os que controlam impressoras fiscais, balanças e outros
periféricos poderiam não existir no Lazarus, ficando o desenvolvedor
dependente dos fabricantes realizar a portabilidade.

Desenvolver no Lazarus em sua versão atual exige um pouco de esforço no
sentido de que o usuário precisa algumas vezes procurar ajuda para
resolver problemas de bug da ferramenta, o que pode ser um agravante
para novos programadores que podem confundir os bugs e achar que são
defeitos em seu código fazendo com o Lazarus perca em credibilidade.

A conclusão final é que seu uso para o desenvolvimento de aplicações
comerciais de maior porte, apesar de possível, não é aconselhável. O
Lazarus não está completo, existem pontos que ainda precisam ser
melhorados pela comunidade, como bugs na IDE, que às vezes causam seu
fechamento repentino e principalmente melhorar o depurador de código,
que às vezes obriga o programador a usar artifícios arcaicos para ver um
simples conteúdo de uma variável.

Por outro lado, conclui-se que o futuro da ferramenta é promissor, a sua
grande vantagem está em ser de código aberto e receber contribuições de
toda comunidade. A portabilidade para outras plataformas é um
diferencial tremendo para a maioria das empresas que ficam sem uma
solução para a portabilidade de aplicativos escritos em object-pascal.

É preciso que novas pessoas se juntem ao projeto, programadores,
documentadores e beta-testers para que a ferramenta possa ficar pronta e
está apta a trabalhar com grandes aplicações.

Experimentos futuros

Seguem algumas opções no que diz respeito ao uso do Lazarus para simular
o Delphi. Abaixo estão algumas dessas possibilidades:

Aplicação multitarefa:

Uma aplicação multitarefa é aquela em que executa códigos em paralelo.
Muito útil para processamento em massa, onde se faz melhor uso dos
processadores e permite que o usuário trabalhe livremente enquanto o
sistema continua executando uma tarefa. A ideia principal é escrever uma
aplicação utilizando o Lazarus e analisar o seu comportamento ao
trabalhar com threads, podendo ir também ao sentindo da computação
distribuída.

Portabilidade:

Este trabalho abre a possibilidade de se fazer a portabilidade do
sistema SUF desenvolvido no Lazarus ser portado para outros sistemas
operacionais, como o Linux,
e observar o comportamento da aplicação nesses sistemas. Levando em
consideração a chamadas de sistemas, comunicação com o banco de dados,
performance da aplicação.

Analise do projeto:

O Lazarus existe desde 1999 e ainda não está concluído, realizar um
levantamento do projeto e apontar para a comunidade onde é preciso focar
mais e propor campanhas para atrair mais pessoas e empresas para o
projeto.


http://www.vivaolinux.com.br/artigo/E-possivel-usar-o-Lazarus-em-alternativa-ao-Delphi-para-desenvolver-aplicacoes-comerciais

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s