Acho hoje, o Java a melhor linguagem de desenvolvimento.
Já tenho uma aplicação em java mas estou esbarrando no problema do consumo de memória.
Infelizmente Java Swing está consumindo mais memória do que deveria, a diferença de consumo de recursos é muito grande.
E para o tipo de aplicação que desenvolvo, cliente acha que tem que rodar em qualquer coisa e com java não é bem assim.
Mas vamos lá, acho que em uns dois meses consigo material de aprendizdo suficente para inciar a migração.
Já que o seu intuito é baixar o uso de memória, analise bem se vale a pena usar o QT. Em um comparativo que rolou em uma discussão da lista de C++ Brasil do Google, um cara mostrou que com QT a janela dele tinha ~4Mb, e fazendo na mão ficava com menos de 300kb.
Pelo que você relatou tb, vc vai migrar uma big aplicação para C++, e só tem 2 semanas de estudo de C++, ou seja, o risco tá bem alto. Tvz vc o caso de contratar um consultor C++, pois é possível por exemplo usar garbage collector com C++, mas normalmente quem não conhece C++ pensa que isso não existe(não sei se é o seu caso).
Hhehe, não nao, estou apenas iniciando os estudos… creio que vai uns dois meses para começar a fazer alguma coisa concreta.
Estou pensando no QT, pois sem modificação dá pra compilar no linux e no windows sem modificação além da produtividade na questão de design das telas que é bem simples.
Com certeza, porém creio que a parte da linguagem dá pra ir lendo e estudando, meu conhecimento do OO é bem solido então creio que isso será simples, porém vou precisar de coisas mais avançadas como comunicação com Webservices, Comunicação Serial e nesse caso penso em chamar consultores específicos para ajudar a acelerar o processo.
Também sei que o negócio não será simples, pois é uma aplicação séria, ou seja, não dá pra fazer como trabalho de faculdade, então realmente vou ter que estar bem seguro para poder iniciar a migração.
[quote=lavh]Já que o seu intuito é baixar o uso de memória, analise bem se vale a pena usar o QT. Em um comparativo que rolou em uma discussão da lista de C++ Brasil do Google, um cara mostrou que com QT a janela dele tinha ~4Mb, e fazendo na mão ficava com menos de 300kb.
[/quote]
Eu digo que uma aplicação desktop que tiver mais de 1 janela ou 3 controles deve usar algum toolkit.
Ou seja, quase todas.
Os casos de uso em que se necessita codificar tais aplicações na mão são muito poucos e específicos.
E use o Qt; além disso, investigue o Boost. No começo você vai apanhar bastante (aff) mas depois vai ver que é bastante fácil portar algo de Java para C++ / Boost porque os conceitos ficam bem parecidos. Vou dar um exemplo daqui a pouco.
Programar em C++ sem usar a STL, a boost e alguns toolkits é como programar em Java se recusando a usar qualquer coisa fora do pacote “java.lang”. Ou seja, uma idiotice completa!
[quote=entanglement]Eu digo que uma aplicação desktop que tiver mais de 1 janela ou 3 controles deve usar algum toolkit.
Ou seja, quase todas.
Os casos de uso em que se necessita codificar tais aplicações na mão são muito poucos e específicos.
E use o Qt; além disso, investigue o Boost. No começo você vai apanhar bastante (aff) mas depois vai ver que é bastante fácil portar algo de Java para C++ / Boost porque os conceitos ficam bem parecidos. Vou dar um exemplo daqui a pouco.
[/quote]
Vou dar uma pesquisada sobre Boost.
Usar toolkit realmente é o objetivo, tentarei evitar apenas usar itens especificos de uma determinada plataforma e quando eu não tiver saída, partirei para o conceito de plugins, algo como (libserial_linux.so serial_win.dll) desta forma deixar a aplicação o mais robusta possível
[quote=black_fire][quote=entanglement]Eu digo que uma aplicação desktop que tiver mais de 1 janela ou 3 controles deve usar algum toolkit.
Ou seja, quase todas.
Os casos de uso em que se necessita codificar tais aplicações na mão são muito poucos e específicos.
E use o Qt; além disso, investigue o Boost. No começo você vai apanhar bastante (aff) mas depois vai ver que é bastante fácil portar algo de Java para C++ / Boost porque os conceitos ficam bem parecidos. Vou dar um exemplo daqui a pouco.
[/quote]
Vou dar uma pesquisada sobre Boost.
Usar toolkit realmente é o objetivo, tentarei evitar apenas usar itens especificos de uma determinada plataforma e quando eu não tiver saída, partirei para o conceito de plugins, algo como (libserial_linux.so serial_win.dll) desta forma deixar a aplicação o mais robusta possível[/quote]
Plugins? Eu aconselharia apenas segregar e encapsular a funcionalidade dependente de sistema operacional em algumas classes, não precisa complicar seu código mais ainda ao carregar plugins dinamicamente. Não é isso que vai deixar sua aplicação “portável”.
Se olhar os fontes do JDK que estão em C++ vai ver que há uma boa parte comum e há algumas partes que são segregadas e diferentes. Baixe os fontes do JDK em:
[quote=entanglement]Plugins? Eu aconselharia apenas segregar e encapsular a funcionalidade dependente de sistema operacional em algumas classes, não precisa complicar seu código mais ainda ao carregar plugins dinamicamente. Não é isso que vai deixar sua aplicação “portável”.
Se olhar os fontes do JDK que estão em C++ vai ver que há uma boa parte comum e há algumas partes que são segregadas e diferentes. Baixe os fontes do JDK em: http://download.java.net/jdk6/source/[/quote]
Em resumo o que vocês está dizendo é ter realmente duas aplicações, algo mais ou menos assim:
Genérico
Regras de negócios
Acesso a banco
Desenhos de telas
Tudo que puder ser igual, sem adaptações
Aplicação Linux
Adaptações especiais para Linux usando os componentes genéricos
Aplicação Windows
Adaptações especiais para Windos usando os componentes genéricos
Seria mais ou menos essa a idéia?
Tirando a parte genérica ter duas aplicações distintas tirando o melhor de cada Sistema Operacional?
Obs: Tomei a liberdade de transcrever alguns comentários para o blog,
caso alguém queria que seu comentário seja removido, favor informar que será
excluído imediatamente.
Todas as transcrições apontam para os posts originais, a intensão foi apenas
centralizar os comentários enviados.
Abraço e obrigado a todos que estão acompanhando e comentando…
Não tanto pelo fato da migração, mas sim para acompanhar a sua evolução no aprendizado em c++ e quais rumos esta seguindo (sempre surge algo que eu posso pesquisar depois), pois estou em um barco semelhante, estudando c++ a aproximadamente 1 mes, mas no meu caso é pura diversão heheheh.
vc só tem 2 semanas de estudo em C++ e quer migrar uma app… meu de boa… esqueça… C++ não é que nem Java, .Net ou outras linguagens… C++ vc tem o poder de manipular o acesso direto a memoria… e até recursos de hardware… porem se este poder não for usado com cautela… terás muita dor de cabeça… além do mais não existe GC… a terefa do GC é vc que faz… em C++ não existe desenvolvedor junior, pleno ou senior… C++ ou vc é mestre ou não é nada…
Uma pequena dúvida, já que você esta desenvolvendo esse tipo de aplicativo: Qual ferramenta utilizará para relatórios ? Acredito que hoje use ireport/jasperreport. Prentende manter a dupla ou existe uma solução do nível e em c++ ?
black_fire, você já rodou um profiler na sua aplicação para saber pq ela consome tanta memória?
Por que talvez a migração não compense o esforço extra. Ou talvez você esteja é presenciando um consumo devido à um bug, não ao Swing.
Dado a realidade que ele apresentou, eu acreidto que a execução de um profiler e a correção de qualquer bug/memory leak encontrado, não vai fazer com que uma aplicação java/swing consuma uma quantidade de memória aceitável para determinado perfil de máquina.
Ainda não tive a oportunidade de usar um aplicativo swing que, depois de um certo tempo de uso, não estivesse com uma quantidade de memória exagerada para o tamanho e funcionalidade executada no momento.
E a realidade que se encontra em pdv’s por exemplo e complicada em muitos casos.
Mas realmente, fazer em C++ irá poupar bastante recursos. Só tem que tomar MUITO cuidado com as plataformas escolhidas, e também seguir direitinho os padrões, ou a aplicação não será portável.
black_fire, você precisa que ela rode em Linux também, ou só Windows?
Realmente, nem pelo Swing, mas pelo acesso direto a portas seriais e hardware, eu já desaconselharia o Java. A API javax.comm é praticamente abandonada, ainda na época da Sun (o suporte ao Windows, por exemplo, simplesmente sumiu). E a rxtx é boa, mas ainda deixa muito a desejar.
Usar C++ nesse caso é muito mais indicado. Não só vai te dar um controle maior da aplicação, como vai permitir que você rode em sistemas mais humildes.
Outra coisa, conside a possibilidade de seu PDV se comunicar via socket com um sistema de ponto de venda. Aí, somente o seu PDV fica em C++, enquanto o sistema em si continua em Java. A comunicação pode ser via socket, ou mesmo troca de arquivos (não sei como você faz isso hoje), mas não acho que valha a pena migrar as duas pontas do sistema.
Finalmente, não considero o Eclipse uma boa escolha de IDE. Ele é lento, tem pouca integração com o debugger. Se seu sistema for para Windows, sugiro que use o Visual C++. Se for multiplataforma, procure pelo Qt Creator.