Softwares. Java ou C++?

29 respostas
G

Olá todos e todas.

Seguinte, eu procurei no fórum a respeito de Java vs C++, mas não me convenceu então vou fazer a pergunta mais diretamente:
Qual das duas linguagens é melhor para se fazer softwares bons? Java ou C++?
Quero pensar que seja Java, mas eu não sei nenhum software famoso que foi feito nele, e em C++ tem o Photoshop, Illustrator, Firefox, e até a Mac OS x. Mesmo com evidências fortes a favor do C++ ainda tenho dúvidas.

Grato, e perdão se não for o lugar certo pro post :smiley:

29 Respostas

R

Bem, cada linguagem tem uma abordagem mais apropriada a cada tipo de sistema. Por exemplo, se você tiver que fazer um sistema Web no padrão MVC, não acha que utilizar JSP, Servlet ou JSF é muito mais apropriado do que tentar fazer em C++?
E da mesma forma existem situações onde é mais apropriado fazer um sistema em C++. Tudo depende da situação.

D

Falando só em desktop: Receita federal, Netbeans, Eclipse (mesmo que seja SWT)…

G

Andei procurando na Net sobre interfaces gráficas de C++, e achei um tal de QT que parece que é para todas as pataformas, mas a coisa é muito complicada. Pra instala o Qt SDK, iria demorar mais de 3h, não sei porque. Baixei a IDE Qt Creator, tentei seguir um tutorial mas dava só erro, que deve ser por não ter o SDK.
Essas dificuldades e complicações que me tiram o ânimo e me fazem desejar ser o Java hoje em dia melhor que o C++ pra softwares desktop, só que como eu já disse, não conheço. Só o Netbeans, Eclipse que segundo o dream foram feitos em Java :p.

I

C/C++ é a lingugem mais usada para aplicativos desktop porque tem uma quantidade enorme de bibliotecas para isso. Tem o Qt, GTK, win32api e todos os .dll’s ( ou .so’s ) do sistema operacional.
O java é mais focado no J2EE e J2ME mesmo…
Mas é necessário bastante experiência para escrever uma app c++, a simples falta de um include gard onde precisa não deixa nada compilar.
Mas para fugir de toda essa complexidade do C++, eu aconselho Python para apps desktop, muito mais simples!

G

Agradeço! Vou estudar um pouco de Python, perguntar pro professores meus pra saber o que eles acham e se recomendam hoje em dia. :slight_smile:
De repente é legal, nunca vi nada sobre essa linguagem. :smiley:

A

Depende do tipo de aplicação. Eu particularmente não gosto de usar Java em desktop, prefiro e trabalho com C (e raramente com C++). Para trabalhar com gráficos, sem dúvida alguma, Java é muito mais amigável e fácil. Mas também há o C++ Builder, Qt Creator e etc, para quem não quer ter muito trabalho. Para trabalhar com recursos diretos do sistema operacional, esqueça do Java, você terá que pedir ajuda à uma outra linguagem, como C ou C++, por exemplo. Como eu havia dito, depende muito do tipo de aplicação. Para aplicações rápidas e que usam banco de dados, por exemplo, não uso nem Java, nem C e nem C++, uso Delphi.

V

Você teria algo para colocar nesses 3 pontinhos, ou lista termina só com um software popular e 2 para desenvolvedores java?

As vantagens do C++ para desktop estão no seguinte:

  • Não exige instalação de nenhuma virtual machine. Portanto, também não corre-se o risco de uma desinstalação prejudicar seu sistema;
  • Integra-se muito bem ao sistema operacional, e permite usar recursos avançados desse sistema;
  • É portável num número muitíssimo maior de plataformas, desde que se programe bem.
  • Pode ser usado para o desenvolvimento de sistemas de tempo real, e tem melhor performance em aplicações que demandam muito processamento (CPU-Bound);

As desvantagens:

  • Não é uma linguagem gerenciada. O programador deve saber alocar e desalocar memória corretamente. E isso pode gerar bugs dificílimos de corrigir;
  • Exige profissionais mais caros e escassos no mercado;
  • Pode ser difícil de otimizar, pois as IDEs não são tão boas e não há bons profilers.
  • É dificil configurar o ambiente de desenvolvimento;

Agora, o que seria uma “bom software” para você? Se for o software que roda no servidor, não vejo porque usar o C++ no lugar do Java. Mesmo em aplicações desktop empresariais, eu pensaria 3 ou 4 vezes antes de trocar o Java ou o C# pelo C++. Até por que, a desvantagem número #1 não é pequena. É muito mais complexo lidar com uma linguagem não gerenciada.

Hoje, eu só usaria C++ em sistemas de tempo real e softwares de prateleira.

D

Você teria algo para colocar nesses 3 pontinhos, ou lista termina só com um software popular e 2 para desenvolvedores java?
ehehehehehehe, bem eu aposto que tem (de mente vêm alguns emuladores, muitos softwarea open-souce MUITOS mesmo !) mas enfim citei os trẽs pra mostrar que tem sim e dentro da nossa vida!

V

Pois é, só se esforçando um bocado pra lembrar, e sempre para um público restrito. Daria para citar o Star Office?
O Java praticamente não existe no mercado de softwares de prateleira.

Já em C++, dá para citar o próprio Windows, Photoshop, Gimp, Visual Studio, todos os jogos, Corel, Blender, Office, Firefox, IE, Notepad, e praticamente tudo que está na lista “programas” do menu iniciar da maioria das pessoas.

F

Bom dia a todos, estava passando e resolvi dar minha contribuição na thread…
Eu entendo que existem 2 erros escondidos sobre o assunto:

  1. O que define a utilização de uma tecnologia são os requisitos (funcionais e não-funcionais) de uma solução.
    Vamos entender na pratica: Qual é o melhor carro? peugeot 408 ou uma saveiro? É claro que qualquer pessoal sem pensar ira dizer "o peugeot é o carro" !! kkkk
    Mas se eu falar para vc assim…
    *)Qual é o melhor carro para levar uma geladeira Brastemp a 100 Km daqui? -> SAVEIRO pq existe o espaço na carroceria. Veja que o peugeot aqui não é indicado pq aonde vc colocar a geladeira dentro do carro?
    *)Qual é o melhor carro para se passear com a família de 5 pessoas? -> Peugeot pq cabem todos la dentro, super confortável, ar condicionando etc. Já na saveiron não da pq tem apenas 2 bancos na frente.
    Por isso, em minha opinião, não faz sentido nenhum perguntar qual seria a tecnologia ideal para ser usado entre Java, C, Net, "Whatever" sem requisitos da solução a ser desenvolvido. Existem grandes, maravilhosos e lindos sistemas feitos em praticamente varias tecnologias.
  1. Não existe equivalência entre Java e C!
    Java é plataforma para soluções de alto nível possuindo um grande e complexo ecossistema de tecnologias, componentes e frameworks baseados em especificações e/ou proprietários portáveis, multiplataforma e independente de fornecedores que podem ser utilizadas com inúmeras e diferentes linguagens de programações - OOP, AOP e funcional.
    Ja o C é apenas uma linguagem de programação de médio nível multiparadigma (de alto nível + vários recursos de baixo nível) que contem algumas API isoladas para fazer diversas tarefas.
    Alias, vale lembrar que não existe nenhuma outra plataforma no mercado com as mesmas características para ser comparado com o Java. O que pode ser feito é pegar determinados produtos e comparar com os concorrentes existentes dentro do ecossistema Java. Por exemplo:

*)Preciso fazer uma aplicação desktop client/server. Qual seria melhor usar:
Em Java teríamos as seguintes opções:
Visual=Swing, AWT, SWT.
Comunicação com SGDB=JDBC e JPA,
RAD=Eclipse VEP, NetBeans Matisse ou OpenSwing.
Distribuição=Java Web Start.
Pontos positivos são A, B, D, E etc.
Pontos negativos são X, Y , X etc…

Em Delphi teríamos as seguintes opções:
Visual=VCL, visual.NET
Comunicação com SGDB=DataSet
RAD=Borland Delphi.
Distribuição=não tem…
Pontos positivos são A, B, D, E etc…
Pontos negativos são X, Y , X etc…

Com base nisso, o responsável pelo projeto deve tomar a decisão e assim gerenciar os pontos negativos.
Vale lembrar que não existe solução melhor ou pior…sempre haverá pontos negativos a serem eternamente trabalhados.

K

Jovem,

Já trabalhei muito com C++ e posso te dizer que é uma ótima linguagem, mas hoje em dia Java fornece diversos frameworks onde vc pode facilitar o seu desenvolvimento praticando as boas práticas de desenvolvimento de software. Mas caso decida utilizar C++ tome muito cuidado com o gerenciamento de mémoria lembrando que você realizara o papel do garbageCollector.

Abs,

V

O C não é multi-paradigma. Ele implementa apenas o paradigma estruturado.
Quem é multiparadigma é o C++. Cuidado, pois são linguagens completamente diferentes.

E “algumas” APIs isoladas é uma simplificação grosseira, pois são milhares de APIs.

No resto, vc está completamente certo.

G

Então se bem feito, em Java é possível elaborar aplicativos tão fortes como os que eu citei?

F

Eu considerei C e C++ como se a mesma, evoluida kkk…

O C não é multi-paradigma. Ele implementa apenas o paradigma estruturado.
Quem é multiparadigma é o C++. Cuidado, pois são linguagens completamente diferentes.

E “algumas” APIs isoladas é uma simplificação grosseira, pois são milhares de APIs.

No resto, vc está completamente certo.

F

A tecnologia Java esta presente em mais de 4,5 bilhões de dispositivos e é utilizada em todos os principais segmentos da indústria, estando presente em uma ampla gama de dispositivos, computadores e redes. Sua versatilidade, eficiência, portabilidade de plataforma e segurança fazem dela a tecnologia ideal para soluções corporativas integradas online. A tecnologia Java está em todo lugar! Ela pode ser encontrada em laptops, datacenters, consoles de jogo, supercomputadores científicos, telefones celulares, smartphones, tablets, cartões inteligentes e até na Internet. Os últimos números publicados no www.java.com são:
Mais de 800 milhões de PCs
2,1 bilhões de telefones celulares e outros dispositivos portáteis
3,5 bilhões de cartões inteligentes
Além de set-top boxes, impressoras, webcams, jogos, sistemas de navegação para automóveis, terminais lotéricos, dispositivos médicos, guichês de pagamento de estacionamento etc.

A resposta é “Sim” ou vc acha q esse povo todo ai esta brincando de programar? kkk
Qualquer duvida estou a disposição - http://fernandofranzini.wordpress.com/for-j/
Bom final de semana querido :smiley:

V

Sim. Em java “puro” vc só não consegue programar:

  1. Aplicativos muito integrados ao SO (tais como defrag, ou aplicativos que usem recursos específicos como o Active Directory, DirectX, etc).
  2. Aplicativos de tempo real onde o intervalo de tolerância seja menor que o tempo de execução do garbage collector.

Em java não puro (com JNI), vc consegue programar qualquer coisa. Entretanto, vc terá que recorrer ao C ou ao C++ e provavelmente esse código não será multiplataforma (a menos que vc mesmo compile as libs nativas para várias plataformas). Pode ser vantajoso caso você tenha uma parte nativa pequena, e queira acessar o resto do que a plataforma java oferece.

Por sorte, já existem muitas APIs que fazem isso por você. Por exemplo, para acessar a OpenGL, existe a LWJGL e a JOGL, com esse trabalho já feito.

G

Sim. Em java “puro” vc só não consegue programar:

  1. Aplicativos muito integrados ao SO (tais como defrag, ou aplicativos que usem recursos específicos como o Active Directory, DirectX, etc).
  2. Aplicativos de tempo real onde o intervalo de tolerância seja menor que o tempo de execução do garbage collector.

Em java não puro (com JNI), vc consegue programar qualquer coisa. Entretanto, vc terá que recorrer ao C ou ao C++ e provavelmente esse código não será multiplataforma (a menos que vc mesmo compile as libs nativas para várias plataformas). Pode ser vantajoso caso você tenha uma parte nativa pequena, e queira acessar o resto do que a plataforma java oferece.

Por sorte, já existem muitas APIs que fazem isso por você. Por exemplo, para acessar a OpenGL, existe a LWJGL e a JOGL, com esse trabalho já feito.

Agradeço as dicas de vc e de todos, então parece que vou me puxar em Java. Logo no curso nós vamos ter uma segunda parte de Java, ai de repente eu me empolge mais.

Até.

R

Pessoal estou ressuscitando esse tópico pra fazer uma pergunta básica que eu ainda estou em dúvida.

Eu estou querendo desenvolver um software que organize um campeonato de xadrez, algumas das funcionalidades que ele vai ter são:

Emparceirar os jogadores (possuo uma fórmula para isso);

Calcular a pontuação dos jogadores;

Cadastrar jogadores;

Gerar relatórios em excel;

Gerar arquivo html para fazer a promoção do evento;

entre outras funcionalidades básicas.

Eu já tenho um nível básico na linguagem Java, porém como comentaram nesse tópico mesmo, o java é pouco usado no mercado de desktop. Eu pensei em usar C++, mas ainda eu não estudei C++, eu até baixei o QTCreator e o X-Code para Mac OSX, porém ainda não estudei nada dessa linguagem.

Obs: Eu pretendo comercializar esse sistema futuramente.

Com base nessas informações qual linguagem vocês me recomendam? Java ou C++?

V

Java. E eu já faria esse sistema usando tecnologia web.

Assim, se no futuro você quiser permitir o cadastro online, e mesmo ver quem irá jogar com quem, você já estará com tudo pronto.

R

Boa ideia Vini!

Originalmente no meu projeto eu iria fazer uma página em php + mysql para os jogadores que são de outras cidades se cadastrarem, evitando assim tumulto no dia do evento, porém realmente com o Java eu posso fazer toda essa integração usando apenas uma linguagem.

Só mais uma pergunta pra finalizar:

Eu estou desenvolvendo o sistema usando Java Swing, comprei um livro e baixei umas apostilas e estou gostando muito de trabalhar com java, porém eu ainda não fiz nada para web, tem como me indicar algum material para estudar(de preferência na net pois esse mês eu já comprei 3 livros) java for web, pois realmente ficaria interessante essa integração do software com uma página na web?

Desde já obrigado.

J

Isso depende muito do foco do projeto. Se você está querendo desenvolver um sistema comercial te aconselho a escrever em java por causa da quantidade enorme de frameworks adequados que possui, além de ser mais moderna. Se for uma aplicação como uma “ferramenta” de sistema ou CAD, ou um processador é aconselhável que escreva em c++ para poupar recursos do sistema. E se for uma aplicação de sistema(fazer system programming) escreva em c(desenvolver módulos de um kernel linux ou softwares que fazem uso intensivo do sistema operacional para io e setar permissões em arquivos: Ex: sudo em um debian).

Não é difícil saber como escolher entre elas, mas é importante saber que elas possuem papeis distintos, o que torna sua decisão importante para a qualidade do projeto a ser desenvolvido.

Acho que para solução que postou o web é a melhor solução como o vini postou. Seria bem mais prático com java na minha opinião.

R

juliocbq:
Isso depende muito do foco do projeto. Se você está querendo desenvolver um sistema comercial te aconselho a escrever em java por causa da quantidade enorme de frameworks adequados que possui, além de ser mais moderna. Se for uma aplicação como uma “ferramenta” de sistema ou CAD, ou um processador é aconselhável que escreva em c++ para poupar recursos do sistema. E se for uma aplicação de sistema(fazer system programming) escreva em c(desenvolver módulos de um kernel linux ou softwares que fazem uso intensivo do sistema operacional para io e setar permissões em arquivos: Ex: sudo em um debian).

Não é difícil saber como escolher entre elas, mas é importante saber que elas possuem papeis distintos, o que torna sua decisão importante para a qualidade do projeto a ser desenvolvido.

Acho que para solução que postou o web é a melhor solução como o vini postou. Seria bem mais prático com java na minha opinião.

Sobre o meu projeto é um software até que básico, apenas vai organizar campeonatos de xadrez, é claro que nele tem algumas fórmulas bem complexas, porém nada que vá exigir muito processamento, acredito eu que mesmo que um software escrito em java ocupe mais memória ele vá rodar bem, afinal quem que não tem pelo menos 1gb de ram no computador hoje em dia.

Sobre a integração web, a única coisa que eu pretendo fazer é receber informações de jogadores e atualizar algumas informações de acordo com o andamento do torneio (ideia do Vini).

Talvez o C++ seja até melhor, eu estou pensando em estudar ele, porém eu ainda não sei praticamente nada de C++, pra não dizer que não sei nada eu sei usar “printf” hehe.

L

Pois é, só se esforçando um bocado pra lembrar, e sempre para um público restrito. Daria para citar o Star Office?
O Java praticamente não existe no mercado de softwares de prateleira.

Já em C++, dá para citar o próprio Windows, Photoshop, Gimp, Visual Studio, todos os jogos, Corel, Blender, Office, Firefox, IE, Notepad, e praticamente tudo que está na lista “programas” do menu iniciar da maioria das pessoas.

Existe tbm um jogo muito famoso feito em java Minecraft.

L

ricksouto:
juliocbq:
Isso depende muito do foco do projeto. Se você está querendo desenvolver um sistema comercial te aconselho a escrever em java por causa da quantidade enorme de frameworks adequados que possui, além de ser mais moderna. Se for uma aplicação como uma “ferramenta” de sistema ou CAD, ou um processador é aconselhável que escreva em c++ para poupar recursos do sistema. E se for uma aplicação de sistema(fazer system programming) escreva em c(desenvolver módulos de um kernel linux ou softwares que fazem uso intensivo do sistema operacional para io e setar permissões em arquivos: Ex: sudo em um debian).

Não é difícil saber como escolher entre elas, mas é importante saber que elas possuem papeis distintos, o que torna sua decisão importante para a qualidade do projeto a ser desenvolvido.

Acho que para solução que postou o web é a melhor solução como o vini postou. Seria bem mais prático com java na minha opinião.

Sobre o meu projeto é um software até que básico, apenas vai organizar campeonatos de xadrez, é claro que nele tem algumas fórmulas bem complexas, porém nada que vá exigir muito processamento, acredito eu que mesmo que um software escrito em java ocupe mais memória ele vá rodar bem, afinal quem que não tem pelo menos 1gb de ram no computador hoje em dia.

Sobre a integração web, a única coisa que eu pretendo fazer é receber informações de jogadores e atualizar algumas informações de acordo com o andamento do torneio (ideia do Vini).

Talvez o C++ seja até melhor, eu estou pensando em estudar ele, porém eu ainda não sei praticamente nada de C++, pra não dizer que não sei nada eu sei usar “printf” hehe.

Pra este caso eu aconselho java ou C# menos trabalhoso pra fazer isto…

J

ricksouto:
juliocbq:
Isso depende muito do foco do projeto. Se você está querendo desenvolver um sistema comercial te aconselho a escrever em java por causa da quantidade enorme de frameworks adequados que possui, além de ser mais moderna. Se for uma aplicação como uma “ferramenta” de sistema ou CAD, ou um processador é aconselhável que escreva em c++ para poupar recursos do sistema. E se for uma aplicação de sistema(fazer system programming) escreva em c(desenvolver módulos de um kernel linux ou softwares que fazem uso intensivo do sistema operacional para io e setar permissões em arquivos: Ex: sudo em um debian).

Não é difícil saber como escolher entre elas, mas é importante saber que elas possuem papeis distintos, o que torna sua decisão importante para a qualidade do projeto a ser desenvolvido.

Acho que para solução que postou o web é a melhor solução como o vini postou. Seria bem mais prático com java na minha opinião.

Sobre o meu projeto é um software até que básico, apenas vai organizar campeonatos de xadrez, é claro que nele tem algumas fórmulas bem complexas, porém nada que vá exigir muito processamento, acredito eu que mesmo que um software escrito em java ocupe mais memória ele vá rodar bem, afinal quem que não tem pelo menos 1gb de ram no computador hoje em dia.

Sobre a integração web, a única coisa que eu pretendo fazer é receber informações de jogadores e atualizar algumas informações de acordo com o andamento do torneio (ideia do Vini).

Talvez o C++ seja até melhor, eu estou pensando em estudar ele, porém eu ainda não sei praticamente nada de C++, pra não dizer que não sei nada eu sei usar “printf” hehe.

printf é da c standard lib;
em c++ o correto é std::cout

rsrsrs

Imagino que com java você consiga um resultado bem mais adequado que com c++. Não pela questão do processamento, porque java é bem robusto. Mas porque pode conseguir implementar uma solução cliente servidor com maior qualidade.

R

O problema é que eu não sei nada de C++ ainda, e eu estou mais focado em java, mesmo ele não sendo forte em softwares para desktop, mas eu ainda vou dar uma estudada em c++.

F

Ultimamente tenho feito tanta “ponte” JNI que estou considerando largar java Desktop e construir tudo em C++. É praticamente impossivel construir uma aplicacao desktop que use puramente Java.

I

legal, aprendir bastante com este tópico :smiley:

R

Realmente se precisar fazer muita gambi o negócio complica rsrs.

Eu estou estudando Java e C++, vamos ver no que da.

Criado 5 de maio de 2011
Ultima resposta 8 de nov. de 2011
Respostas 29
Participantes 13