Jump to content
dlemos

C++ vs Java

Recommended Posts

dlemos

Boas

Estou a pensar aprofundar os meus conhecimentos em programação e tenho de decidir qual o rumo a seguir.

Neste momento não necessito de ter conhecimentos de linguagens de programação à excepção de VBA.

Porém gostaria de ter conhecimentos sólidos numa linguagem mais flexível.

Na faculdade desenvolvi programas básicos em C++, mas tudo muito básico, sem interface gráfica, etc.

A pergunta que eu faço é: entre c++ e  java, quais as diferenças? Isto porque ou aposto numa ou noutra.  estas linguagens rivalizam uma com a outra ou são complementares? podem-me dar exemplos de aplicações desenvolvidas numa linguagem ou noutra?

por exemplo, para software empresarial, qual linguagem que consideram mais útil?

obrigado desde já

Share this post


Link to post
Share on other sites
| Blasted |

Não te posso dizer qual a melhor e acho que ninguém que responder aqui poderá.

Existem gostos e situações em que uma é melhor e vice-versa.

Tenho conhecimentos em ambas, comecei por C++ na faculdade e depois também na faculdade passei para Java.

E em termos de gostos, gosto de ambas e acho até parecidas em termos de sintaxe.

Acho Java um bocado mais alto nível mas talvez te aconselhasse a começar por C++.

Mas tal como disse, são apenas opiniões.

Share this post


Link to post
Share on other sites
M6

dlemos, essa questão não tem uma resposta clara.

Ambas são extremamente competentes em determinados domínios, têm pontos fortes e fracos como qualquer outra.

A nível de TI (e entre essas duas hipóteses), o Java é a linguagem de eleição. É bastante fácil encontrar empresas a recrutar para posições de J2EE. O Java também ganhou uma nova dinâmica com o GWT e o Android. Ninguém hoje em dia desenvolve sistemas web ou para dispositivos moveis modernos através de aplicações C++ mas sim recorrendo a J2EE, Android e afins.

Actualmente o C++ tende a ficar cada vez mais focado em determinados nichos, em comparação com a generalização que acontece no Java. Sistemas industriais, sistemas operativos, algumas aplicações de desktop (se bem que nestas também tem vindo a reduzir) são alguns casos de utilização tradicional do C++.

A questão é saber o que vais fazer com esse conhecimento. Se pretendes um emprego na área da programação, Java/J2EE tem bastante mais procura do que C++.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
Triton

Em termos de popularidade, estão quase ela por ela, vendo pelo site http://www.langpop.com/.

Mas não interessa só a popularidade. De facto, como o M6 diz, existem mais empregos em Java do que em C++ (ou pelo menos é a ideia generalizada). Mas diria que em média, os programadores C++ são mais bem pagos, embora não tenho agora dados para sustentar essa ideia.

O melhor é aprender as duas. Saber C/C++ é essencial se quiseres fazer algo mais complicado.


<3 life

Share this post


Link to post
Share on other sites
Triton

E porque não uma linguagem .NET (VB.NET ou C#) ?

Sim, C# é preferivel a Java em termos de linguagem. E quem programa em C# programa em Java. Mas acho que não substitui uma linguagem como C ou C++. São linguagens que se complementam.

Também seria útil aprender uma linguagem de scripting como Lua, Python, Ruby, Perl, ou PHP.


<3 life

Share this post


Link to post
Share on other sites
KTachyon

A nível de TI (e entre essas duas hipóteses), o Java é a linguagem de eleição. É bastante fácil encontrar empresas a recrutar para posições de J2EE. O Java também ganhou uma nova dinâmica com o GWT e o Android. Ninguém hoje em dia desenvolve sistemas web ou para dispositivos moveis modernos através de aplicações C++ mas sim recorrendo a J2EE, Android e afins.

Err... iOS é C. Objective-C, C, C++... O Android tem o NDK, que significa Native Development Kit... em C++. Não é por aí.

O Java é mais alto nível, abstrai o programador preguiçoso daquelas coisas feias que se chamam ponteiros para memória xD

Actualmente o C++ tende a ficar cada vez mais focado em determinados nichos, em comparação com a generalização que acontece no Java. Sistemas industriais, sistemas operativos, algumas aplicações de desktop (se bem que nestas também tem vindo a reduzir) são alguns casos de utilização tradicional do C++.

Porque o C é mais baixo nível, permite implementar com melhor controlo. A nível de performance, um programa em C bem implementado >= a um programa em Java bem implementado.

A questão é saber o que vais fazer com esse conhecimento. Se pretendes um emprego na área da programação, Java/J2EE tem bastante mais procura do que C++.

Não acredito muito nisso. Mas de qualquer forma, se queres ter um emprego bem pago na área da programação, tens que saber C/C++... por duas razões: pelos vistos é mais raro arranjar quem programe C que Java e, quem programa C, programa Java... :confused:


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
Metaluim

O Java é mais alto nível, abstrai o programador preguiçoso daquelas coisas feias que se chamam ponteiros para memória xD

Chamam-se mesmo apontadores :P

Porque o C é mais baixo nível, permite implementar com melhor controlo. A nível de performance, um programa em C bem implementado >= a um programa em Java bem implementado.

Isso é questionável e não é verificado em certos casos.

Não acredito muito nisso. Mas de qualquer forma, se queres ter um emprego bem pago na área da programação, tens que saber C/C++... por duas razões: pelos vistos é mais raro arranjar quem programe C que Java e, quem programa C, programa Java... :confused:

Quem programa C, necessariamente pode não programar Java, ou pelo menos direito... Se bem que maior do código Java que encontro profissionalmente, tem sido a reutilização de 2 ou 3 padrões de desenho de classes (que são até considerados anti-padrões) e classes com métodos estáticos.

Quanto ao tópico em si, isso é uma guerra santa que actualmente tem vindo a perder o seu valor. Java é bastante usado para empresas, sendo a linguagem de eleição competindo com tecnologias .NET. Fora disso já não é tão usado, mas continua a ser mais usado que C++. Hoje em dia a questão da performance, põe-se só em casos extremos (aplicações de tempo real críticas, programação concurrente, sistemas gráficos, SO's, motores de jogos, etc...) sendo que a JVM está bastante mais optimizado do que nos primórdios do Java. Portante agora a questão penso que se prende no custo de desenvolver numa ou noutra. C++ é uma linguagem traiçoeira para newbies enquanto que Java é mais amigável. Se fizeres m**** em Java, é o equivalente a fazeres um corte superficial na pele mas fazeres m**** em C++ é decapitares-te. A menos que tenhas já bastante experiência e saibas utilizar ao mínimo as features mais esotéricas da linguagem, mas lá está, estes programadores de C++ são raros (mas também normalmente são bem pagos).

Moral da história, aprende BrainFuck.

Share this post


Link to post
Share on other sites
KTachyon

Chamam-se mesmo apontadores :P

Pah, eu sempre aprendi ponteiros, tal como todos os meus colegas de engenharia informática. Se o termo em português mudou entretanto...

Isso é questionável e não é verificado em certos casos.

Não é assim tão questionável. Pensa só que o bytecode tem que ser executado pela virtual machine, só depois pode ser interpretado pelo processador. Basta pensar lógicamente:

Imagina que tens um programa em C 100% optimizado (com um bom compilador e as flags todas certinhas) e o mesmo programa em Java 100% optimizado, com uma JVM que gera o nativo. Em primeiro lugar, o nativo gerado pela JVM tem que ser gerado pela JVM, ocupando ciclos de processador. Em segundo lugar, assumindo que a JVM vai gerar código nativo, irá ser, no máximo, tão bom como o código gerado pelo compilador de C. Finalmente, tendo em C uma gestão de memória mais directa, consegues fazer melhor utilização de recursos, coisa que em Java tens que esperar que o JVM o faça.

Ou seja, assumindo um nativo perfeito contra um bytecode perfeito, o nativo tem sempre melhor performance e/ou necessita de menos recursos de hardware.

Quem programa C, necessariamente pode não programar Java, ou pelo menos direito... Se bem que maior do código Java que encontro profissionalmente, tem sido a reutilização de 2 ou 3 padrões de desenho de classes (que são até considerados anti-padrões) e classes com métodos estáticos.

Porque não? É só uma questão de adaptação às pequenas diferenças de sintaxe. A lógica é a mesma, consegues implementar as mesmas design patterns em qualquer uma das linguagens (excepto as de garantia de gestão de memória em Java). A meu ver, quem programa em C ainda mais obrigação tem em conseguir programar bem em Java, a partir do momento em que o começa a fazer :)

Finalmente, relativamente a empresas, nas de software em que já trabalhei, ou do que já vi de trabalho de lá, pouco vi de Java. Apenas me lembro de um caso em que me recordo de ter utilizado Java, era um servidor com Velocity Engine em que os servlets eram em Java, e toda a algoritmia feita em Java. E eu cheguei a criticar a implementação do sistema, não por causa do Java, mas por causa do Velocity Engine :confused:

De resto, Objective-C, Python, PHP e até BASIC :P

Muitos colegas meus, em empresas de software, a base é C/C++.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
dlemos

Obrigado a todos pelas respostas, tenho a noção que a pergunta não é propriamente fácil..

Vou aproveitar para colocar mais algumas:

- Eu na faculdade tive C e C++, mas o C++ não é encarado um pouco como uma evolução do C?

- Podem-me dar exemplos de aplicações conhecidas feitas em C++ e feitas em Java

Share this post


Link to post
Share on other sites
KTachyon

C++ é basicamente C extended. Escreves C em C++ :confused:

Aplicações populares, provavelmente encontras mais em C que em Java. Aliás, eu nem me recordo de aplicações Java que tenha utilizado mais que meia dúzia de vezes, ou que se tenham mantido por muito tempo no meu sistema. Mas, se fores para ambientes mais empresariais podes encontrar Java em serviços e ambientes de integração de aplicações. Java Beans, JMS...


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
bubulindo

C++ é basicamente C extended. Escreves C em C++ :confused:

Desculpa discordar, mas C é completamente diferente de C++ e/ou Java. Sim, é verdade que podes compilar código C dentro dum ficheiro de C++, a sintaxe é a mesma (excepção feita às "extensões"), mas o paradigma é completamente diferente e em consequência a maneira de estruturar programas é diferente também.


include <ai se te avio>

Mãe () {

}

Share this post


Link to post
Share on other sites
KTachyon

Pah, só precisa de ser completamente diferente se tu quiseres :confused: Podes programar OOP com C simples. Claro que não é tão óbvio e a estrutura do código não fica como se tivesses acesso às extenções do C++, mas é perfeitamente possível. Mas aqui já estamos a falar de questões de leitura/manutenção de código.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
| Blasted |

Pah, só precisa de ser completamente diferente se tu quiseres :confused: Podes programar OOP com C simples. Claro que não é tão óbvio e a estrutura do código não fica como se tivesses acesso às extenções do C++, mas é perfeitamente possível. Mas aqui já estamos a falar de questões de leitura/manutenção de código.

Acho que não é correcto dizer que só é diferente se quisermos. É diferente. Pode-se tentar fazer com que PAREÇA igual, mas não é de todo igual.

O paradigma é completamente diferente. OOP em C é um OOP não óbvio e muito pouco intuitivo já para não dizer "feio" :P

Share this post


Link to post
Share on other sites
KTachyon

Eu não disse o contrário, apenas disse que o paradigma não precisa de ser, necessariamente, dependente da linguagem. Se uma pessoa não perceber o conceito de OOP quando aprende a programar C++, quando for programar Java vai continuar a não perceber. Mas a partir do momento em que se percebe, sabe-se em qualquer uma delas. É só uma questão de sintaxe.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
M6

Deixo aqui alguns exemplos de aplicações desenvolvidas em Java (algumas delas bem críticas tendo em conta o domínio em que operam):

- As aplicações gráficas de interface com Oracle desenvolvidas pela Oracle.

- As aplicações gráficas de interface com DB2 (Windows e Linux) desenvolvidas pela IBM.

- Parte do OpenOffice/LibreOffice.

- DBVisualizer

- iCANgraph

- Aptana

Se fores pelo J2EE é menos visivel, mas grande parte dos sistemas das administração central nacional são J2EE.

Uma vantagem enorme do Java é o facto de poderes compilar apenas uma vez e ser executado em qualquer lado onde exista uma JVM. Se isto for importante, o Java é, tipicamente, uma escolha melhor do que o C++.

No caso do C++, para suportares vários SOs, tipicamente, tens de artilhar o teu código com macros de compilação #IFs para cada sistema e tens de compilar a aplicação em cada um dos sistemas suportados. Como é óbvio, isto aumenta, e muito, o custo de manutenção e suporte de uma aplicação em C++.

Como referi acima, se pretendes fazer vida disto, é bastante mais fácil encontrares emprego sabendo Java do que C++. Quando ao facto dos programadores de C++ ganharem mais, não é tão claro assim, dado que tipicamente ganham mais porque já têm anos de experiência.

O .Net foi  referido anteriormente, o que se aplica ao Java aplica-se ao .Net, se bem que aqui restringes-te ao mundo Microsoft. Se isso é bom ou mau para ti, só tu podes dizer, mas passar de uma linguagem para a outra, sabendo o paradigma OO, é bastante simples e rápido. O mesmo já não é verdade ao nível do J2EE, cujo grau de complexidade exige bastante mais trabalho do que uma aplicação web em .Net, fazendo com que quem sabe J2EE entre em .Net bastante mais depressa do que o inverso.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
shumy

Não é assim tão questionável. Pensa só que o bytecode tem que ser executado pela virtual machine, só depois pode ser interpretado pelo processador. Basta pensar lógicamente:

É até bastante questionável. A lógica falha um pouco aqui.

Muitos programas em c/c++ perdem performance por não usarem todo o hardware que têm disponível (quando não são compilados especificamente para o set de instruções do processador), e algumas compilações podem cair no minimo multiplo comum, tipo x86.

O java tem boas performances nos ambientes servidores em que a aplicação se mantém a correr. É efectuado o processo de compilação ao arrancar (JIT compiler) e depois reutiliza a compilação que está normalmente optimizada para a arquitectura onde está a correr.

Para dar uma boa resposta nas questões de performance, a solução testar.


Aqui há coisa de 2 anos fazia umas malhas de croché, depois fartei-me e fui para informática!

Share this post


Link to post
Share on other sites
KTachyon

Isso não quer dizer que não possas tomar partido do hardware que queiras, mais especificamente ou menos especificamente. Se a performance é um ponto importante, Java não é o caminho. Das aplicações que o M6 indicou, já usei o Aptana e o OpenOffice, e, para dizer mais, NetBeans, Eclipse (e os AS: Glassfish e JBoss). Pah, sinceramente eu verifico várias situações em que se nota que são aplicações que correm na JVM. Não é preciso vir escrito em lado nenhum. Apenas pelo facto de haverem situações em que é necessário um pouco mais de performance para a qual a JVM não estava preparada. Um branch prediction que correu mal, por exemplo, é várias vezes pior que falhar um branch prediction no processador.

E antes que me comecem a bater, eu não estou a dizer que o Java é inútil. De facto, se é preciso fazer um programa rapidamente, portável e que não utiliza recursos excessivos, Java é as escolha menos time-consuming de entre as duas (eu próprio escolho o Java nestas situações). Se tiveres a preparar um sistema distribuido em rede de cobre em que certamente que o bottleneck vai ser a rede, com Java consegue-se ter performance mais que suficiente para lidar com tudo sem problemas, custa menos a desenvolver e é mais facilmente portável. Etc, etc, tudo bem... Mas por aí, também é fácil meter alguém que sabe programar C++ a programar Java e a safar-se muito bem.

Até porque uma pessoa nem se deve cingir a saber apenas uma linguagem de programação... Ajuda saber mais, na altura em que é preciso tomar uma decisão informada. E, uma pessoa que saia de C/C++ e arranque para experimentar outra linguagem, tem a vida mais facilitada que uma pessoa que comece do Java. E nota-se, em algum pessoal do meu curso que começou com o Java como a primeira linguagem de programação, já na faculdade, que quando ouvem a letra "C" ou a palavra "ponteiro", escondem-se porque acham que vai aparecer o bicho papão...


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
dlemos

Pessoal obrigado mais uma vez pela disponibilidade

Deu para perceber que ambas as linguagens são complementares e não se substituem necessariamente uma à outra, depende das circunstâncias

Sendo assim só me resta aprender as duas, pela ordem que as circunstâncias decidirem=)

PS: não pretendo ser programador profissional, é mesmo gosto pessoal. Mas nunca se sabe=)

Share this post


Link to post
Share on other sites
bioshock

E a sintaxe não terá um peso substancial na escolha? (isto para quem nada sabe)

Share this post


Link to post
Share on other sites
dlemos

Como tive C e C++ na faculdade, percebo umas coisas agora estou enferrujado lol

Actualmente só uso VBA

Lamento é nunca termos aprendido a desenvolver interfaces gráficas...ou seja, só fazíamos o programa, guardavamos o ficheiro, criavamos o executável e corríamos a partir da linha de comandos....há alguma maneira de desenhar interfaces gráficas de forma simples, como se faz por exemplo no VBA?

Share this post


Link to post
Share on other sites
M6

Sim. Tens por exemplo o C++ Builder.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
shumy

Também: Qt Designer


Aqui há coisa de 2 anos fazia umas malhas de croché, depois fartei-me e fui para informática!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.