sábado, 5 de julho de 2014

Swing! A primeira impressão não é a que fica.

Como é bom mudar de opinião e ver as coisas sobre outra perspectiva. Nunca conseguiria ser como as pessoas que morrem com uma opinião fixa sobre alguma coisa, muitas vezes sem ao mesmo ter tido alguma experiência com o motivo da opinião.  Já havia escrito sobre isso no Facebook, mas com o sucesso do projeto no qual estou trabalhando decidi falar sobre isso aqui no blog também.

Algum tempo atrás eu redescobri o Swing! Não é o que você está pensando é o Java Swing. Antigamente, não gostava do seu modelo, achava demasiado complicado! Para mim a melhor plataforma para criação de interfaces com o usuário era a disponibilizada pelo Delphi. O modelo do Swing não podia se comparar as facilidades disponibilizadas por ele .

Contudo, o próprio Delphi me forçou a buscar novas linguagens a medida que meu conhecimento sobre programação orientada a objetos avançava, pois, depois de muito anos trabalhando com ele e apesar da facilidade fantástica de criar interfaces com o usuário, as limitações imposta pelo seu modelo de programação começaram a pesar. Um dos maiores problemas que encontrei foi a ausência de um garbage collector. Em um projeto realmente OO, objetos são compartilhados o tempo todo e se torna extremamente difícil fazer o gerenciamento de memória. É possível fazer isso implementando a contagem por referência, como explicado aqui pelo João Morais, contudo por que ter esse trabalho se existem linguagens como C# e Java que tornam isso transparente? Como já falei aqui, não existe melhor linguagem de programação e como Delphi não estava atendendo as minhas necessidades, decidi apreender Java a alguns anos, principalmente por que queria uma linguagem que pudesse usar tanto para programação Desktop quando para programação Web.

A cerca de 7 meses iniciei um novo projeto em java e comecei com uma interface Web, porém o modelo não era o mais adequado e fui obrigado a ir para o Desktop. Imediatamente me lembrei do Swing e da péssima primeira impressão que tive com ele. Mas como não como não havia tempo para buscar novas alternativas, comecei a usá-lo e descobri o óbvio: Swing é totalmente baseado em objetos e padrões de projeto e isso facilita um monte (aliás, ele é uma ótima ferramenta para o ensino de padrões pois implementa quase todos).

Um exemplo é o sistema de eventos que utiliza o padrão Observer. No Delphi isso feita de maneira procedural aonde uma função é chamada quando um evento é disparado. Esse modelo é extremamente simples de ser usado, contudo cria um acoplamento entre o objeto que dispara evento e os diversos objetos que necessitam receber uma notificação do evento e todo o programador OO sabe os problemas de um acoplamento alto.

A primeira impressão que eu tive sobre o Swing estava errada. O problema é que eu não era um programador orientados a objetos na época, então para mim o seu modelo era um horror se comparado com o modelo procedural do Delphi. Como no exemplo, eu não conhecia os problemas criados pelo acoplamento no sistema de eventos. Eu só fui descobrir os problemas com o tempo, o que me levou a apreender e compreender o que era a programação orientada a objetos.

Hoje entendo por que o Swing não deslanchou no desktop! Ele é uma interface construída para programadores OO, o que a grande maioria não é! Isso é uma pena, pois o seu modelo é fantástico. Claro que a falta de uma interface gráfica boa também foi um fator. Hoje estou utilizando o WindowBuilder que já vem integrado ao Eclipse Kepler, que é um bom quebra galho e evita muito trabalho, mas não se compara a IDE do Delphi. Contudo, apesar disso, hoje considero Swing e Java muito superior ao Delphi para criação de programas grandes e complexos para o ambiente desktop, pois embora o modelo do Delphi permita uma incrível velocidade para construção da interface, ele não é tão flexível quando o Swing.

Nenhum comentário:

Postar um comentário