É aconselhável usar java para desktop?

29 respostas
A

Olá

Hoje em dia… é aconselhável usar java para desktop? Eu desenvolvo em vb.net mais estou pensando em migrar aos poucos minhas aplicações para java.

Tem esse tópico http://www.guj.com.br/java/63190-porque-nao-usar-java-no-desktop/7 mais é de 2007 e hoje como esta?.. eu queria saber a opinião do pessoal com mais conhecimentos.

Uma dificuldade que estou encontrando é a falta de componentes.

Utilizo o netbeans 7

29 Respostas

ViniGodoy

Há alguns anos atrás eu diria sem hesitação que sim, é aconselhavel. Porém, houve a estagnação do Swing, a perda de suporte do Java no Mac e hoje já não estou tão certo assim. Alguns projetos importantes, como o SwingX, foram descontinuados.
Não houve melhorias significatias no Java 2D nas últimas versões (e eu pensei que seria fortemente impulsionado pelo JavaFX, mas essa alternativa não se verificou).

Uma outra opção, seria usar o próprio JavaFX, mas ele também não apresentou a inserção de componentes de UI que torcíamos tanto.

Em paralelo, o concorrente, o C#, apareceu com um construtor visual limpo, rápido e fácil. O framework é bem menos complicado com o Swing, e o suporte ao LINQ permite criar models para tabelas e listas muito facilmente. E com o projeto mono, tem atingido tantas plataformas quanto o próprio Java. A possibilidade de escrever código unmanaged de maneira simples (bem diferente do JNI e JNA) ainda permite escrever ferramentas mais integradas ao SO, coisa que é comum em desktop.

E, se você precisar de um número realmente grande de plataformas, ou de performance, há excelentes alternativas em C++, como o Qt.

Hoje eu não escolheria rapidamente o Java sem pelo menos cogitar essas outras alternativas.

viniciusalvess

ViniGodoy:
Há alguns anos atrás eu diria sem hesitação que sim, é aconselhavel. Porém, houve a estagnação do Swing, a perda de suporte do Java no Mac e hoje já não estou tão certo assim. Alguns projetos importantes, como o SwingX, foram descontinuados.
Não houve melhorias significatias no Java 2D nas últimas versões (e eu pensei que seria fortemente impulsionado pelo JavaFX, mas essa alternativa não se verificou).

Uma outra opção, seria usar o próprio JavaFX, mas ele também não apresentou a inserção de componentes de UI que torcíamos tanto.

Em paralelo, o concorrente, o C#, apareceu com um construtor visual limpo, rápido e fácil. O framework é bem menos complicado com o Swing, e o suporte ao LINQ permite criar models para tabelas e listas muito facilmente. E com o projeto mono, tem atingido tantas plataformas quanto o próprio Java. A possibilidade de escrever código unmanaged de maneira simples (bem diferente do JNI e JNA) ainda permite escrever ferramentas mais integradas ao SO, coisa que é comum em desktop.

E, se você precisar de um número realmente grande de plataformas, ou de performance, há excelentes alternativas em C++, como o Qt.

Hoje eu não escolheria rapidamente o Java sem pelo menos cogitar essas outras alternativas.

Pegando carona no tópico. Como não tenho conhecimento nenhum em C# talvez a pergunta seja boba , mas gostaria de saber se o código C# é fácilmente descompilados como os bytecodes java ?

A

ViniGodoy…

O C# roda no Linux? Ou só se tiver o mono?

Então você acha melhor eu migrar do vb.net para C# do que para Java?

paulofafism

ViniGodoy:
Há alguns anos atrás eu diria sem hesitação que sim, é aconselhavel. Porém, houve a estagnação do Swing, a perda de suporte do Java no Mac e hoje já não estou tão certo assim. Alguns projetos importantes, como o SwingX, foram descontinuados.
Não houve melhorias significatias no Java 2D nas últimas versões (e eu pensei que seria fortemente impulsionado pelo JavaFX, mas essa alternativa não se verificou).

Uma outra opção, seria usar o próprio JavaFX, mas ele também não apresentou a inserção de componentes de UI que torcíamos tanto.

Em paralelo, o concorrente, o C#, apareceu com um construtor visual limpo, rápido e fácil. O framework é bem menos complicado com o Swing, e o suporte ao LINQ permite criar models para tabelas e listas muito facilmente. E com o projeto mono, tem atingido tantas plataformas quanto o próprio Java. A possibilidade de escrever código unmanaged de maneira simples (bem diferente do JNI e JNA) ainda permite escrever ferramentas mais integradas ao SO, coisa que é comum em desktop.

E, se você precisar de um número realmente grande de plataformas, ou de performance, há excelentes alternativas em C++, como o Qt.

Hoje eu não escolheria rapidamente o Java sem pelo menos cogitar essas outras alternativas.

Concordo plenamente com o Vini. O C# me parece hoje uma solução viável para desenvolver aplicações desktop. Eu atualmente também desenvolvo aplicações desktop utilizando C#, a facilidade de desenvolvimento, integração com o S.O são excelente, entretanto se você pensa em atingir o S.O LInux te aconselho sim, estudar Java. Você deve analisar diversas opções antes de começar a desenvolver algum aplicativo.

V

alexpassos:
ViniGodoy…

O C# roda no Linux? Ou só se tiver o mono?

Então você acha melhor eu migrar do vb.net para C# do que para Java?

Pra mim desktop é Ruindows ou mac. Mas se você precisa roda Linux, sim, esse seria o caso onde aconselharia usar Java.

ViniGodoy

Fora do Windows só com o Mono. Mas o Mono já suporte Linux e Mac.

No caso do C++ e do Qt, você pode rodar sua aplicação em locais que até Deus duvida.

ViniGodoy

É sim. Ele gera um código em IL, que é tão fácil de descompilar quanto um .class.

viniciusalvess

vlw Vini por responder !

A

ViniGodoy:
Fora do Windows só com o Mono. Mas o Mono já suporte Linux e Mac.

No caso do C++ e do Qt, você pode rodar sua aplicação em locais que até Deus duvida.

Pode falar um pouco sobre o que é esse Qt?

ViniGodoy

É uma excelente biblioteca para C++. É mantida pela Nokia e por um grupo de empresas.

A

Então pra ver se entendi direito mesmo…

Se eu for rodar meu sistema no windows o melhor é C#;

Se eu for rodar no linux o melhor ainda é o java;

E se eu quiser que meu sistema rode nos dois então é java;

Vini, eu não tenho conhecimento nenhum do C++, na verdade não tenho lembrança de ter nem visto um código fonte em C++.

Em qual programa desenvolvo com ele? O Visual Studio atende isso?

ibotirama

Agora existem alguns espectos que devem ser resaltados, todo aquela rapidês do VS é para aplicações rodadas dentro do padrão Microsoft, ou seja no Windows e com SQL Server, pois se não me engano você não tem suporte nativo do Linq para outro banco que não seja SQL Server, e o WinForms com todos aqueles componentes legais de terceiros só funciona no Windows se rodar o Mono terá que ser com GTK# ou outro que não seja WinForms.

Ou seja se não for rodar no Windows, tem os poréns e essas outras Toolboxes você também pode usar com Java :wink:

A

É possível fazer um programa desktop para transmissão de dados usando o C++ com socket e o servidor (serversocket) ser em java?
Ambos conseguem dialogar?

habeas_corpse

C++ com Qt, é o bicho da goiaba, o Qt na minha opnião é o melhor framework UI para desktop altualmente, e ele evolui muito rápido depois da aquisição pela nokia
Dê uma olhada em qt.nokia.com

A

Alguém conhece um forum bom como esse para se pesquisar sobre C++

ViniGodoy

andredf:
É possível fazer um programa desktop para transmissão de dados usando o C++ com socket e o servidor (serversocket) ser em java?
Ambos conseguem dialogar?

Sim, é possível. Só cuidado com tipos unsigned no seu protocolo pois o java não os possui.
t

ViniGodoy

Existe uma lista de discussão famosa chamada cppbrasil. O próprio site do Qt e da boost tem muita coisa também.

ViniGodoy

ibotirama:
Agora existem alguns espectos que devem ser resaltados, todo aquela rapidês do VS é para aplicações rodadas dentro do padrão Microsoft, ou seja no Windows e com SQL Server, pois se não me engano você não tem suporte nativo do Linq para outro banco que não seja SQL Server, e o WinForms com todos aqueles componentes legais de terceiros só funciona no Windows se rodar o Mono terá que ser com GTK# ou outro que não seja WinForms.

Ou seja se não for rodar no Windows, tem os poréns e essas outras Toolboxes você também pode usar com Java ;-)

O Linq funciona em qualquer collection, xml ou banco.
Agora, geralmente fazemos acesso usando um ORM, como o NHibernate ou o Entity framework, não com o Linq direto.

Quanto a Ui, lembro de ter visto que o mono estava trabalhando sobre suporte do Winforms em outros SOs.

A

ViniGodoy:
andredf:
É possível fazer um programa desktop para transmissão de dados usando o C++ com socket e o servidor (serversocket) ser em java?
Ambos conseguem dialogar?

Sim, é possível. Só cuidado com tipos unsigned no seu protocolo pois o java não os possui.
t

A discussão está boa.

Problema a ser resolvido: implementar um programa desktop para, de forma bastante resumida, ler um arquivo texto, validar este arquivo conforme regras estabelecidas e, estando correto, transmiti-lo a um servidor.

O ideal é que este programa desktop rode pelo menos em windows e linux e que hája um alto nível de proteção do código fonte (para que não se permita ao usuário, a partir do conhecimento do código fonte, burlar as regras estabelecidas e transmitir um arquivo inválido).

Do lado do servidor, este fará algumas pequenas validações adicionais e deve ser implementado com threads para permitir que mais de um usuário do programa desktop consiga transmitir arquivos simultaneamente.

O esqueleto do programa desktop já existe em java, porém, devido à facilidade em obter o código fonte a partir do .class, surgiu a necessidade de se pesquisar um pouco mais sobre alguma outra alternativa.

Com c++, linguagem super atraente, a dificuldade é encontrar material didático ensinando a utilizar corretamente sockets.

Sugestões?

ViniGodoy

Possibilidade 1: Boost ASIO + Boost threads (sem interface gráfica)
http://www.boost.org/doc/libs/1_47_0/doc/html/boost_asio/tutorial.html
http://www.boost.org/doc/libs/1_47_0/doc/html/thread.html#thread.overview

Possibilidade 2: QT:
http://www.qtforum.org/article/9/qt-network-tutorial.html

paulofafism

ViniGodoy:
Possibilidade 1: Boost ASIO + Boost threads (sem interface gráfica)
http://www.boost.org/doc/libs/1_47_0/doc/html/boost_asio/tutorial.html
http://www.boost.org/doc/libs/1_47_0/doc/html/thread.html#thread.overview

Possibilidade 2: QT:
http://www.qtforum.org/article/9/qt-network-tutorial.html

Eu tive a oportunidade de trabalhar com QT, para desenvolver aplicações para Symbian OS, posso dizer que é uma excelente ferramenta, tanto para dispositivos móveis quanto para desktop.

hatsurei

Eu tenho interesse em começar a desenvolver para Desktop (principalmente para Windows e posteriormente para Linux). Pelo que entendi o melhor seria usar o C#, porem já estou estudando Java. Agora nao sei mais qual seguir… Só uma pergunta é necessario conhecer C para iniciar C++ ou se pode inciar direto em C++?

ViniGodoy

O C# e o Java são bastante parecidos em sua estrutura geral. É bem fácil migrar de um para outro.
Basta uma leitura rápida sobre o que o C# tem de diferente (como a parte de properties e delegates) e você praticamente abre o Visual e sai programando.

Você pode começar direto pelo C++, sem estudar C. É até bom, pois você não pega os vícios de programadores C. Dê uma olhada nesse Roadmap:
http://pontov.com.br/site/cpp/46-conceitos-basicos/88-roadmap-c

hatsurei

O C# e o Java são bastante parecidos em sua estrutura geral. É bem fácil migrar de um para outro.
Basta uma leitura rápida sobre o que o C# tem de diferente (como a parte de properties e delegates) e você praticamente abre o Visual e sai programando.

Você pode começar direto pelo C++, sem estudar C. É até bom, pois você não pega os vícios de programadores C. Dê uma olhada nesse Roadmap:
http://pontov.com.br/site/cpp/46-conceitos-basicos/88-roadmap-c

Vou continuar com Java e nas horas vagas pelo o C# para verificar as diferenças.
Muito obrigado.

A

ViniGodoy:
Possibilidade 1: Boost ASIO + Boost threads (sem interface gráfica)
http://www.boost.org/doc/libs/1_47_0/doc/html/boost_asio/tutorial.html
http://www.boost.org/doc/libs/1_47_0/doc/html/thread.html#thread.overview

Possibilidade 2: QT:
http://www.qtforum.org/article/9/qt-network-tutorial.html

Eu baixei (mais de 1Gb) e instalei o Qt, mas ainda não tive tempo de executar.

Desculpas antecipadas pela ignorância, mas tanto o boost como o Qt são ambientes completos de desenvolvimento?
Ou ainda dependemos de algum compilador c++?

São gratuitos?

ViniGodoy

Os dois são bibliotecas para o C++. Portanto, dependem sim de um compilador C++.

O QT possui um editor de código, chamado QT Creator, mas não tem compilador próprio.
Ele dá suporte visual a construção de interface gráfica. E usa de compilador o GNU (MinGW no caso do Windows, o mesmo do Code::Blocks).
Há plugins do QT para o Visual Studio também.

A boost é uma biblioteca criada e mantida pelo próprio comitê que normatiza e desenvolve o C++. Não é à toa que várias partes dela acabam se incorporando ao padrão (como no caso da próxima versão do C++, o C++11, que incorporou a biblioteca de threads, smart pointers, números aleatórios e refinou a parte de lambda).

A

ViniGodoy:
Os dois são bibliotecas para o C++. Portanto, dependem sim de um compilador C++.

O QT possui um editor de código, chamado QT Creator, mas não tem compilador próprio.
Ele dá suporte visual a construção de interface gráfica. E usa de compilador o GNU (MinGW no caso do Windows, o mesmo do Code::Blocks).
Há plugins do QT para o Visual Studio também.

A boost é uma biblioteca criada e mantida pelo próprio comitê que normatiza e desenvolve o C++. Não é à toa que várias partes dela acabam se incorporando ao padrão (como no caso da próxima versão do C++, o C++11, que incorporou a biblioteca de threads, smart pointers, números aleatórios e refinou a parte de lambda).

Valeu pelas dicas. Vou acessar o site do Qt para entender melhor.

Voltando ao java (hipótese ainda não descartada), utilizando um software para ofuscar o código, como por exemplo o Proguard, ainda assim fica relativamente frágil a segurança do código-fonte?

mateus.cordeiro

Muito boa essas informações! Estou verificando minhas pespectivas!

Parabens a todos!

ViniGodoy

Dificulta, mas não impede.

  1. Classes da API do Java e de API de terceiros não serão ofuscadas (APIs de terceiros até podem, se vc se der ao trabalho de compila-las também);
  2. Classes que serão acessadas via reflection ou scripts não podem ser ofuscadas;
  3. O código ainda poderá ser lido de maneira estruturada (com funções, classes, etc).

Mas claro, aí só alguém que esteja ativamente trabalhando para reverter o código será capaz de faze-lo.
Um investimento que só valerá a pena caso seu software valha muito dinheiro, e que o valor dele esteja numa tecnologia única.

Dificilmente um cliente irá contratar um programador para reverter um código ofuscado só para piratear o software para si.

No caso do C++, tentar reverter um assembly é uma tarefa mais difícil do que reprogramar a aplicação inteira.

Criado 30 de outubro de 2011
Ultima resposta 5 de nov. de 2011
Respostas 29
Participantes 10