Preciso usar uma linguagem nova. É possível usar Java?
31 respostas
C
carlosrosa
Olá, estou vivendo uma situação no mínimo perturbadora. Tenho que optar por uma nova linguagem para o desenvolvimento de um novo produto e não sei pra onde ir, já que hoje são tantas as opções, estou inseguro com a possibilidade de fazer uma opção errada.
O contexto é o seguinte: Meu produto tem que rodar em redes locais com acesso a banco de dados, com buscas e relatórios. Mas existe a possibilidade de precisar ser multiplataforma, ou seja, estão aparecendo clientes que querem usá-lo no Windows e outros no Linux… ( por enquanto ).
A minha pergunta é: Java pode ser a linguagem para resolver essa situação? Ou posso usar outra opção, já que andei lendo que o Java não é a melhor indicação para aplicações desktop.
O java pode não ser a melhor opção em aplicações desktop… mas nos outros quesitos ela se destaca, irá rodar em ambiente windows/linux só tendo a JVM… e também para relatório você poderá usar o ireport que é muito bom… eu aconselho você a usar java…
Rodrigo_Rocha_de_Mor
Você disse a palavra chave quanto à vantagem de JAVA:
Multiplataforma!
Quanto a essa história de Java não ser a melhor opção para Desktop, se comparada a outras tecnologias que possuem maiores facilidades na hora do desenvolvimento, creio que perde apenas na produtividade, mas não na qualidade.
[]'s
sigma
Depende como e a complexibilidade do seu front-end.
Swing não e muito produtivo, mas vc fica tranquilo na questão multi-plataforma.
dedspr
Eu mesmo confesso pra você que fiquei boquiaberto quando fiz uma aplicação que rodava no windows e um cliente pediu se rodava no linux eu fui fazer o teste e rodou normal… sem problema nenhum…
Não vou falar que roda no mac porq nunca testei mas tbm deve rodar normal…
C
carlosrosa
dedspr:
Eu mesmo confesso pra você que fiquei boquiaberto quando fiz uma aplicação que rodava no windows e um cliente pediu se rodava no linux eu fui fazer o teste e rodou normal… sem problema nenhum…
Não vou falar que roda no mac porq nunca testei mas tbm deve rodar normal…
Então, a dificuldade fica por conta da produtividade, é isso?!? Existe algum projeto para que a produtividade também seja um ponto positivo?
E em relação a sua aplicação, dedspr, é uma aplicação desktop ou web?
[]s
paulofafism
Boa tarde
Java para aplicações desktop e muito bom. Ele só não e produtivo no inicio do desenvolvimento quando não se tem nada pronto, codigos entre outras cosas. Depois que você ja tem tudo pronto. Fica muito mas facil desenvolver qualquer aplicação desktop. Atualmente estou desenvolvendo um solução ERP usando Swing.
sigma
Eu fiz um programa Swing usando webstart, e rodou tanto no linux quando no windows normalmente.
Carlos vc tem que ver o escopo do sistema. se e principalmente bat ou interface com cliente.
O NetBeans parece que e a ferramenta que mais ajuda para aplicações Swing, vale dar uma olhada.
sigma
paulofafism concordo com sua afirmação, mas a maioria dos sistema tem seu alto custo de desenvolvimento no inicio (sistema bem feito).
sjoaquim
Não acho que Swing seja improdutivo! Acredito que se você utilizar a ferramenta adequada (por exemplo, o NetBeans, que é capaz de fazer o layout da janela, além de ser uma excelente IDE), se torna tão fácil quando desenvolver no VisualStudio…
fantomas
Eu indicaria Java porque eu tenho certeza absoluta que vai funcionar mesmo dando um pouco de trabalho, mas essa sua situação me faz pensar nas seguintes perguntas:
Vc já pensou na curva de aprendizado? Porque Java não se aprende de uma hora para outra, logo tem que ponderar muito bem essa questão.
Vc acha que seus conhecimentos atuais podem ajudar a diminuir a curva de aprendizado?
Fora a linguagem Java e que possa lhe trazer um certa produtividade em projetos Desktop multiplataforma acho que são a Kylix (tem que pagar), Lazarus e talvez C++.
P.S. Kylix e Lazurus é o Object Pascal
C
carlosrosa
Muito esclarecedor esse nosso bate-papo. Estou concluindo que o caminha é mesmo o deenvolvimento através da linguagem Java, com a aplicação da IDE NetBeans, os relatórios do ireport.
E em relação ao banco de dados? Qual é a maioria?
[ ]s
C
carlosrosa
fantomas:
Eu indicaria Java porque eu tenho certeza absoluta que vai funcionar mesmo dando um pouco de trabalho, mas essa sua situação me faz pensar nas seguintes perguntas:
Vc já pensou na curva de aprendizado? Porque Java não se aprende de uma hora para outra, logo tem que ponderar muito bem essa questão.
Vc acha que seus conhecimentos atuais podem ajudar a diminuir a curva de aprendizado?
Fora a linguagem Java e que possa lhe trazer um certa produtividade em projetos Desktop multiplataforma acho que são a Kylix (tem que pagar), Lazarus e talvez C++.
P.S. Kylix e Lazurus é o Object Pascal
Pois é, sou programador Delphi e preciso criar esse novo produto em uma tecnologia que permita a multiplataforma, se for pra ser o Java precisarei aprender além da sintaxe, também consolidar os conhecimentos de Orientação a Objetos. Mas estou criando a certeza de que vai ser bom pagar esse custo inicial.
Rodrigo_Rocha_de_Mor
Não é apenas em relação ao desenho de um formulário…
Mas em sincronização de componentes com tabelas e outras coisas mais, que como alguns sabem, com algumas ferramentas basta vc ir “ligando” as coisas para que funcione da forma esperada…
Mas sei que a coisa está mudando, temos ótimas funcionalidades para serem usadas em aplicações Desktop, como os Bens Binding (JSR 295)!
Sem contar que a IDE NetBeans 6.x está excelente para projetos Desktop!
Com suporte à todas essas novidades! Inclusive com exemplos de uso!
Quanto ao Mac, que foi citado acima, a resposta é sim! Também possui sua versão da JVM!
[]'s
paulofafism
Bem no inicio do meu desenvolvimento com aplicações Java Desktop levei muita coça pois coisas que fazia facilmente no delphi leva tempo para fazer no Java. Mas hoje esta um mar de rosas hehehehee. Por enquanto…
sjoaquim
Se for possível pra você aprender, com certeza eu recomendo Java!
Banco de dados… bem, antes de mais nada, recomendo fazer sua aplicação também independente do SGBD a ser utilizado, já que o requisito é portabilidade. Se o acesso ao banco não for muito complexo, aprenda como funciona o JDBC e utilize com o seu SGBD favorito (Oracle, MySQL, PostgreSQL etc.). Se for complexo, vale a pena dar uma fuçada no Hibernate. Mas já aviso que o Hibernate é bastante complexo de se aprender, visto que é cheio de configurações, mapeamentos etc.
Rodrigo_Rocha_de_Mor
Agora em questão ao SGBD
Eu sou PostgreSQL 8.x!
Robusto e confiável!
[]'s
paulofafism
Eu uso Netbeans para soluções desktop, mas peloas testes que fiz ate hoje com a solução de binding com Netbeans, o beans binding tem problemas quando faço binding por exemplo com JTable quando uso TableModel externo ou seja que seja desenvolvido. Ele simplesmente não aceita pois ele usa o beans binding usa outra implementação de TableModel. Ai no inicio optei pelo genesis que por sinal e superior ao beans binding na minha opinião, mas infelizmente também tem suas desvantagens. Mas nem tudo e perfeito. E com isso desenvolvi um solução propria de binding para situações que não tinham nesses frameworks Genesis ou Beans binding.
E isso ai
T
thgdias
Essa sua aplicacao tem que rodar obrigatoriamente em ambiente desktop? se puder rodar em ambiente web seu leque de opções é muito maior, com Ruby on Rails, Java, .Net, Php… quanto a produtividade ao desenvolver ambientes desktop em java… usando o netbeans com o matisse, não acho que perde em nada para o .net (em produtividade, apenas para deixar claro! hehehe).
T
thgdias
esqueci de dizer… quanto ao banco de dados, se for ficar no cliente, eu usaria o Oracle XE, se for deixar em ambiente web, hospedado em algum lugar, eu optaria por PostgreSQL, é muito mais barato, a menos que voce resolva aprender junto hibernate… ai o banco passa a nao ser mais um problema…
mister_m
paulofafism:
… Ai no inicio optei pelo genesis que por sinal e superior ao beans binding na minha opinião, mas infelizmente também tem suas desvantagens. Mas nem tudo e perfeito. E com isso desenvolvi um solução propria de binding para situações que não tinham nesses frameworks Genesis ou Beans binding…
Olá Paulo,
Você poderia comentar quais funcionalidades desagradaram você ou não faziam parte do genesis? O genesis é um projeto open-source, então, ao invés de você desenvolver sua solução externa, você poderia contribuir para a sua evolução. Gostaria de saber mais a respeito dessas suas necessidades e como você as atendeu.
C
carlosrosa
sjoaquim:
Se for possível pra você aprender, com certeza eu recomendo Java!
Banco de dados… bem, antes de mais nada, recomendo fazer sua aplicação também independente do SGBD a ser utilizado, já que o requisito é portabilidade. Se o acesso ao banco não for muito complexo, aprenda como funciona o JDBC e utilize com o seu SGBD favorito (Oracle, MySQL, PostgreSQL etc.). Se for complexo, vale a pena dar uma fuçada no Hibernate. Mas já aviso que o Hibernate é bastante complexo de se aprender, visto que é cheio de configurações, mapeamentos etc.
Muito boa a possibilidade de independencia de banco de dados, nesse caso se for usar JDBC os comandos para o banco são dados pela sua aplicação e no caso do Hibernate fica por conta dele? É isso?
Forma como implementei. Onde posso ter mais de uma classe Controller
Razao para ter mais de uma classe Controller
1 - Um classe controller com operações padrões para todos os formularios
2 - O genesis não me permite usar dois classes que usam a anotação @Form
Implementei também binding de acções do teclado
Veja o codigo abaixo
publicclassLoginForm{privateStringusuario;privateStringsenha;publicStringgetUsuario(){returnusuario;}publicvoidsetUsuario(Stringusuario){this.usuario=usuario;}publicStringgetSenha(){returnsenha;}publicvoidsetSenha(Stringsenha){this.senha=senha;}}@Controller//Anotação criada para o meu frameworkpublicclassControllerLogin{@Actionpublicvoidlogin(){System.out.println(usuario);System.out.println(senha);}@Actionpublicvoidlimpar(){setUsuario(null);setSenha(null);}}//Usando binding para ações do teclado@Controller//Anotação criada para o meu frameworkpublicclassControllerLoginKeyEvent{@KeyAction(action=KeyEvent.VK_F5)//Usando dessa forma e executa pelo formulariopublicvoidlogin(){System.out.println(usuario);System.out.println(senha);}@KeyAction(action=KeyEvent.VK_F6)publicvoidlimpar(){setUsuario(null);setSenha(null);}@KeyAction(action=KeyEvent.VK_F2,component="txtCodigoUsuario")//usando dessa forma e para o componente da GUIpublicvoidconsultar(){setUsuario(null);setSenha(null);}}
Nos poderiamos unir nossas ideias. Esse Framework que estou desenvolvendo estou fazendo para meu TCC da pos graduação. Inclusive já estou usando o framework em um projeto particular
podemos conversar por email: [email removido]
O
ozix
Olá Carlos, pra já ir botando a mão na massa, recomendo a leitura das excelentes apostilas de java OO (FJ-11) e java web (FJ-21) da caelum:
C
carlosrosa
ozix:
Olá Carlos, pra já ir botando a mão na massa, recomendo a leitura das excelentes apostilas de java OO (FJ-11) e java web (FJ-21) da caelum: http://blog.caelum.com.br/apostilas/
Obrigado a todos pelas dicas, penso que com isso que discutimos posso sim “colocar a mão na massa” - é isso ai ozix - e começar a desenvolver a minha aplicação com o Java. Valeu.
[ ]s
luistiagos
cara se eu fosse vc usava brainfuck ou whitespace…
isto é o que a em termo de linguagens…
Até onde eu entendo de tudo que você citou, o genesis suporta a bastante tempo. Para o que você quer basta utilizar-se de polimorfismo. Você pode ter seus forms estendendo seus mapeamentos de persistência ou mesmo, se for o caso, ter forms bases para suas GUIs, e fazer especializações conforme necessário. Quando você sobrescreve um método anotado, o genesis entende e funciona adequadamente nestes cenários.
Ops que a falta de uma boa leitura não faz. hehheeeee
Antes de mais nada quero pedir desculpas em relação a isso. Como não estava conseguindo fazer algumas coisas acabei desenvolvendo algo proprio em relação a binding. Até que valei a pena aprendi bastante de como criar um framework de binding. e como eu disse estou fazendo o tema do meu TCC em cima deste projeto.
Esta e a forma como faço o binding com Lista, JComBox, e RadioButtons
ListValues values = new DefaultListValues();
//Adicinando os valores da lista que pode ser de qualquer tipo um mesmo um Bean
//Onde adiciono o valor que será exibido na lista e o respectivo valor dessa lista
values.add("Ativo", 0);
values.add("Inativo", 1);
values.setDefaultValue(0);
Agora em quando a este cenário ate que poderia fazer usando polimorfismo mas neste caso como coloquei como Exemplo.
Eu NÃO gostaria que meu bean de persistência ficasse dessa forma:
cara se eu fosse vc usava brainfuck ou whitespace…
isto é o que a em termo de linguagens… :-P
Bom dia, luistiagos, você já tem algum trabalho desenvolvido nessad linguagens?
Opa, carlos, bão?
[editado - ortografia]
O luistiagos tava sendo irônico… as duas linguagens que ele citou são linguagem não comerciais, obras-primas de entusiastas de computação…
Agora… analise bem a questão das licenças, principalemente no SGBD… estou no meio de um projeto de migração de SGBDs porque a licença não foi observada no início do mesmo…
Abraço.
hmichel
Dúvida cruel, de onde vem as propriedades usuario e senha?
Se eu entendi bem, você pode fazer algo como:
sendo usuario e senha propriedades de SeuBeansPersistente. E para transferir na rede por exemplo, chamar um command ou algo do gênero, use o PropertyUtils.copyProperties da Apache.
Assim você tem os dois estados separados, o de persistência e o da tela em si. Isso funciona bem também na hora de popular a view com dados provenientes de uma consulta por exemplo.
[]'s
paulofafism
sendo usuario e senha propriedades de SeuBeansPersistente. E para transferir na rede por exemplo, chamar um command ou algo do gênero, use o PropertyUtils.copyProperties da Apache.
Assim você tem os dois estados separados, o de persistência e o da tela em si. Isso funciona bem também na hora de popular a view com dados provenientes de uma consulta por exemplo.
Poderia se fazer como desenvolvi no me framework
Existem duas formas
Onde a anotação diria que o bean seria um entidade
//Usando a propria anotação no pacote javax.persistente@EntitypublicclassMeuBeanPesistente{......}
ou da forma como implmentei no meu framework para vincular as propriedade dos beans com os componentes da GUI
//Lista de valores para comboBoxListValuesvalues=newDefaultListValues();values.add("Ativo",0);values.add("Inativo",1);values.setDefaultValue(0);bind=newDefaultBindController(this.toString(),frm,this);KeyActionsFormkey=newKeyActionsForm(this);((DefaultBindController)bind).registerBindings("Key",key);ViewModelview=bind.getViewModel();binding=newDefaultBinding(view);binding.setDataSource(frm.getBeanEntity());binding.binding(frm.getTxtCodigo(),"codigo","text");binding.binding(frm.getTxtNome(),"nome","text");binding.binding(frm.getCBStatus(),"status",values);