Quels sont les avantages et les inconvénients respectifs majeurs des langages de programmation C++ et Java l'un vis-à-vis de l'autre ?
:merci:
Version imprimable
C++ beaucoup plus rapide que java.
java beaucoup plus portable que C++.
pour toi nouveauté de programmation :
- Le C++ n'est pas tout objet
- les pointeurs !
Java et C++ sont deux langages distincts (bien que très semblables) et n'ont pas les mêmes objectifs. En effet, pour faire ton choix entre les deux cela dépend de ton objectif et de tes contraintes (support, nombre d'utilisateurs, portabilité, ...)
Eh bien en fait je désire connaître (un bien grand mot, disons plutôt apprendre :D ) les deux.
Et c'est justement la question que je me pose de savoir dans quel cas il est plus judicieux d'utiliser l'un plutôt que l'autre. J'ai bien compris en ce qui concerne la rapidité d'exécution et la portabilité mais quels sont les autres critères de choix en fonction de quel genre d'application ?
:merci:
C++ est plus complet (on peut a peu pres tout faire avec), plus performant (quand correctement concu et code), plus generaliste(bien que en principe objet, on n'est pas oblige de faire de l'object avec), plus puissant (template, ...), plus complet (il vit depuis longtemps et possede de tres nombreuses librairies, standard ou non). C'est egalement un langage tres complique et tres sujet a l'erreur et a l'introduction de bogues.
Java est plus facile a apprendre et utiliser, plus portable, plus objet.
Dans les deux cas il peut y avoir des problemes de compatibilite. Au niveau C++, c'est surtout lie a la portabilite (si tu code du C++ standard), mais le code est ensuite rarement compatible, sur une meme machine , d'un compilateur a un autre. Au niveau Java, il y a des problemes de compatibilite et support entre les versions. La version 2.0 de Java n'est pas supportee partout et par tous.
Effectivement, car le C te permet de faire n'importe quoi, tu dois donc bien savoir ce que tu fais, car tu peux vite arriver à écrire dans une partie de la mémoire non désrée et écraser des données d'autres variables de ton programme. Le C ne te dira pas qu'il y a une erreur si ton programme est syntaxiquement correct, c'est à toi à garder les yeux ouverts.Citation:
Envoyé par elrond
En Java tu es beaucoup plus paterné, tu ne sais pas faire grand chose par toi-même, tu appelles des fonctions qui se débrouillent.
Pour moi, je me suis directement tourné vers le C et n'ai appris le Java que plus tard, par curiosité. Parce qu'avec le C je me sentais plus libre.
:merci: à tous pour vos réponses !
Je crois que c'est la rapidité d'exécution et la liberté du fait de pouvoir accéder à tout qui m'attirent le plus et c'est pour cela que je vais me mettre sérieusement au C++ (m'en tape d'la difficulté :mrgreen:).
Encore une chose : N'existe-t'il pas différents compilateurs pour permettre de porter un code sous différentes platformes ? Du style j'écris un prog, je crée un executable pour Windows avec un compilateur puis je crée un deuxième executable (du même code) pour Unix avec un compilateur pour Unix ? Ou bien c'est plus compliqué du fait que vous vous servez vraiment de l'architecture de la machine en question ?
Merci ! :coucou:
C'est possible pour du code pur C++ANSICitation:
Envoyé par Gregork
Cependant contrairement à Java, il manque plein de chose à C++ ce qui fait que pour faire certaines choses (exemple interfaces utilisateurs : swing en java, en C++ rien) , ou accès sgbd (jdbc en Java, en C++ rien), etc, tu doit soit utiliser une lib pour l'OS, donc non portable, soit trouver une lib portable. Mais c'est une LIB en plus, c'est pas inclus dans le standard C++.
Dans Java c'est inclus, donc toujours standard et toujours portable.
Le vrai choix entre C++ ou Java se situe au niveau du besoin. Exemples de besoins :
- Faire un jeux 3D compilé en natif pour windows : C/C++/Delphi
- Faire une application web : Java, ASP, ASPX, PHP, Delphi, etc...
- Faire une application distribuée d'entreprise : Java, .NET...
Je ne suis pas tout a fait d'accord, il existe de nombreuses choses qui n'existe pas directement en C/C++, mais qui necessite des bibliotheques speciales ou qui sont des fonctionnalites propres au compilateur (ex : IHM, Son, Graphisme, Base de donnee, etc.) alors que la plupart de ces fonctionnalites sont de base en Java.Citation:
Envoyé par Elrond
Pour quoi Java ou .net pour une application distribuée en entreprise ???
Quoiqu'il en soit, une autre particularité du C++ est de n'etre pas restreint a la programmation sur PC. En C++ tu peux très bien programmer pour des machines des automates des plateformes ou je ne sait quoi. Pour quasiment tout ce qui est programmable on pourra creer un compilateur C++
Quoiqu'il en soit, si tu apprends le C++, il n'y aura pas grand chose de plus a apprendre pour le Java. (En fait il y aura surtout a oublier) Et quoiqu'on en dise, même si il y a des noms de fonctions a rééaprendre pour le Java, ce n'est qu'un moindre mal, sachant qu'en C++ tu as enormement de fonctions qui font plus ou moins la même chose, suivant les librairies que l'on choisit d'utiliser. Les noms fonctions ca s'apprends pas par coeur, ca s'utilise a l'arrache.
C'est ce qui se dessine dans la majorité des grand comptes : Java (80%) ou .NET (20%) (option CORBA ou SOAP)Citation:
Envoyé par Blustuff
Comme pour Java :mouarf:Citation:
Envoyé par Blustuff
-> énormément d'applications embarquées pour Java...
Pour se former sur Java voir ces cours et tutoriels : http://java.developpez.com/cours/
Pour les débutants Java celui la est vraiment au top : Programmation Java pour les enfants, les parents et les grands-parents.
je suis tout à fait d'accord avec epictète. Java était avant tout destiné à être embarqué, mais a d'abord percé là où on ne l'attendait pas.
Aujourd'hui certaines machines virtuelles ont été porté vers de architectures autres que x86 (strongarm, powerpc ...).
Pourquoi java est il devenu le numéro 1: tout simplement parce qu'il permet au développeur de s'affranchir d'un grand nombre de difficultés (notamment au niveau gestion de la mémoire). On peut donc développer plus vite des applis souvent moins buggées.
Le C++ n'est cependant pas mort pour autant, et est encore largement utilisé en entreprise, notamment grâce à ces performances par rapport à java (langage compilé).
Mais en ce qui concerne la portabilité, il vaut mieux ne pas trop y penser :wink:
Mais y-a-t'il une chance pour que C++ soit abandonné un jour ou cela semble-t'il impossible du fait de sa grande popularité mais surtout du fait qu'il n'y a pas (ou peu) d'autres langages natifs aussi puissants ?
Même question pour Java : quelles sont ses chances d'être remplacé un jour, par quoi, etc. ?
Ok, alors au boulot ! :wink:
En tout cas merci à tous pour toutes ces explications très enrichissantes, qui, même si elles ne me font pas choisir un des deux languages me donnent juste envie de toucher aux deux :P
Peut-être que c'est en pratiquant que j'en viendrai à donner ma préférence à l'un ou à l'autre. Mais c'est vrai que pratiquant le Java depuis 2 mois maintenant, je reste tout de même séduit et attiré par le côté vitesse de C++ mais surtout par le fait qu'on reste de libre de "toucher à tout" et de "jouer avec la machine". Quant au principe de la programmation orientée objet, je crois qu'il ne doit pas être trop difficile de passer de l'un à l'autre, les structures de programmation restant identiques (ou très similaires) pour les deux languages, à ce que j'ai compris...
Voilà, voilà...
A+ :coucou:
Je pense aussi qu'il faut apprendre les deux, mais dans un certain ordre:
Java en premier puis C++
Tu apprendras ainsi à 'concevoir' des applications en objet (avec Java). Tu penseras plus en objet quand tu feras du C++. En effet, on peut faire des choses abominables en C++ (mix entre C et objet), alors que si tu prends l'habitude de voir bien les divers objets et leurs interactions, tu appliqueras naturellement ces méthodes au C++ et tu auras des applis plus propres et moins buggées.
Ce que tu dis n'est pas faux Tifauv en C++ on peut prendre de mauvaises habitudes !
Mais je pense que le C++, en ayant fait du C avant, est beaucoup plus rapide à mettre en oeuvre que le Java.
J'y vais ausi de mon grain de sel :
Les applets s'exécutent côté client. Donc tu ne peux pas les remplacer par des PHP, mais par du JavaScript. Ce sont les Servlets et JSP qui jouent sur le même tableau que les PHP.Citation:
les applets java ne m'intéressent pas, pour faire du Web j'utilise PHP. Donc ma question se situe uniquement au niveau applications...
Sinon je pense que C++ est sur la pente descendante pour l'informatique de gestion. Reste l'info industrielle.
Enfin, l'avenir (et le présent !) des applications distribuées est dans les nouvelles techno
- parcequ'elles permettent de s'affranchir des détails techniques de communication -> on se concentre sur la prog métier.
- parceque la démarche des éditeurs est d'en faire des standards
Et voilà pour info un post qui traite déjà du sujet : http://www.developpez.net/forums/viewtopic.php?t=16969
Thomas
C'est ce qu'il se disait de Cobol il y a deja pas mal d'annee. Resultat c'est encore utilise, ca recrute meme encore un peu et certaines personnes se voient obligees de s'y mettre pour telle ou telle mission.Citation:
Envoyé par laffreuxthomas
Pour resumer, il faut se mefier des technos sur la pente descendante, certaines mettent quelques dizaines d'annees avant d'etre relegue au rang de simple curiosite.
oui en fait c'est tout à fait ce que je veux dire : C++ va vivre le même sort que Cobol. On a le temps de voir venir mais plus le temps passera et moins ça sera intéressant.
Je ne suis pas tout à fait d'accord. Je pense que Java devrait se développer pour les applications non-OS et être utilisé quand on n'a pas besoin de vitesse pure.
Mais pour tout ce qui est développement système, le C/C++ est le seul langage utilisable (avec un peu d'assembleur éventuellement). Et pour le moment, aucun langage n'est capable de le remplacer. Donc, le C/C++ devrait durer encore un bon bout de temps.
Par contre, c'est une hérésie que Cobol soit encore utilisé.
bah, j'en connais pas mal, il y a quelques années, qui disaient que c'était absurde de concevoir quoique ce soit de système/réseau avec C++, parceque c'était bien plus lent que le C.
Et avant ça il y a eu ceux qui disaient qu'un OS fait en autre chose que de l'assembleur ct n'importe quoi, ça n'avancerait jamais...
alors
Les nouveaux langages sont taillés pour faire des outils capables de monter en charge. Bien sûr que sur une machine donnée un prog C++, C, assembleur ça va vite. Mais quand tu veux faire des applis distribuées pour un très gros serveur Internet, c'est plus simple de faire en nouvelles techno.
Et le futur des OS passera par là aussi.
Et après Java et .Net il y en aura d'autres, et on construiras des machines plus puissantes et on fera des OS avec aussi !
En plus ça fait un bout de temps qu'il y a pas mal de développement réseau (et système aussi à priori) réalisés en Java.
Thomas
Oui, mais Java est au final un langage interprété, et il faut bien que l'interpréteur tourne sur quelquechose: l'OS...
N'oublions pas que tous les langages compilés donnent de l'assembleur, donc ils doivent être aussi rapides. La seule différence, c'est dans le degré d'optimisation du compilateur.
les langages interprétés peuvent être compilés à la volée
=> no problemo, on est dans la même catégorie
Je ne voi pas très bien en quel honneur on enterre le C++, qui est d'après ce graphe N°2 derrière le C et devant Java :Citation:
Envoyé par laffreuxthomas
http://www.usethesource.com/cgi-bin/index.pl?section=Software
Et comme le plus souvent on utilise pas Java ou C++ pour les faire memes choses, je ne voi pas en quoi Java irais enterrer C++.
Je prédit un brillant avenir pour Java ET C++
Avant de jouer à madame soleil moi j'ai au moins la décence de fournir un petit graphe...
:)
PS : Vous etes prié de fournir des données, graphes, sources avant de dire n'importe quoi merci, sinon ce débat va etre totalement sans intéret, ce sera un troll à déplacer sur le forum taverne.
Une petite preuve en passant, regarde la proportion d'offre d'emploi en C++ actuellement et ce qu'elle etait il y a 4/5 ans (attention, je parle en proportion pas en absolu).Citation:
Envoyé par Epictète
Maintenant il est vrai que ca c'est beaucoup stabilise, et ce que ca va donner a long terme je ne sais pas, mais la regression est indeniable, meme si il reste encore un des langages les plus usites.
Je conviens qu'il ressort que les offres d’emploi java sont en N°1 et de loin, mais les offres C ou C++ sont toujours très représentées d'après ce que j'ai pu voir...
Désolé mais j'ai pas mal programmé en C++, même si j'ai complètement laissé tomber depuis que je connais Java. En tout cas je connais les 2 langages et je peux t'assurer qu'ils sont en concurrence.Citation:
Je prédit un brillant avenir pour Java ET C++
Avant de jouer à madame soleil moi j'ai au moins la décence de fournir un petit graphe...
Thomas
La question n'est pas de connaitre, la question est de constater que généralement il ne sont pas utilisés dans les memes domaines d'applications.Citation:
Envoyé par laffreuxthomas
Si par exemple tu as le choix entre C++ et Java, et qu'on te dise d'une part de faire :
1) Un jeux 3D pour windows en Direct X
2) une application distribuée d'entreprise avec un serveur d'applications
Dans le cas 1 : C++ dans le cas 2 : Java.
Bon franchement ca vole pas très haut tout ca. Très très décevant...
:(
écoute, ne te fâche pas.
Mais les jeux, depuis trois ans que je cherche et change de boulot en tant que développeur, jamais personne ne m'a proposé d'en faire un où même quelque chose qui s'en approche. C'est pas ça, aujourd'hui, qui joue dans le secteur informatique.
Les applications distribuées avant la venue de Java c'était du C++ avec CORBA, bien souvent. Aujourd'hui cette techno bat en retraite.
Les applications réseaux c'était du C et C++, Java grossit aussi dans ce domaine.
Je t'assure que Java et C++ sont en concurrence sur beaucoup de domaines.
Sous Windows, avec .Net il faut maintenant faire la distinction entre "langage" et "plate-forme". La plate-forme .Net est le successeur des plate-formes liées au C++ et celles des autres langages. Je veux dire : sous Windows, C# va remplacer C++ car C++ dans .Net pose des problèmes de gestion mémoire non sécurisée.
Donc si on élargit le débat pour savoir si les nouvelles techno (Java, .Net) remplacent les anciennes (C++, C) , moi je répond oui ! A part dans le milieu industriel peut-être.
Thomas
Dans ta vision simpliste du monde, tu as simplement oublié énormément de choses, ne serais ce que par exemple les développeurs C++ open source qui se foutent royalement de .NET. sur le forum C++.
Tes prévisions sont aussi fiable que celle d'une madame soleil, et en contradiction avec ce graphe :
http://www.usethesource.com/cgi-bin/...ction=Software
Certes, tout comme on peut faire tout dans n'importe quel langage. Mais certains domaines se prete plus a tel ou tel application. Pour l'instant il y a des domaines pour lesquels Java n'est tres peu adapte (bas niveau, besoin de perf) meme si c'est techniquement possible d'utiliser Java.Citation:
Désolé mais j'ai pas mal programmé en C++, même si j'ai complètement laissé tomber depuis que je connais Java. En tout cas je connais les 2 langages et je peux t'assurer qu'ils sont en concurrence.
Concernant C# et .NET, ils ont un gros desanvatage, ils sont mono plateforme alors qu'actuellement la tendance est plutot aux langages portables au possible. Outre ce probleme il me semble que peu de gens sont partant pour migrer les applications existantes sous .NET (quitte a utiliser des technos plus soutenus comme VB6) et guere plus pour commencer de nouveaux projets sous .NET (pas de competences disponibles, cout de formation et peu d'interet technique de laisser le C/C++ au profit de C#).
En ce qui concerne le probleme de gestion memoire non securise en C++ ce n'est pas un probleme de langage mais de compilateur et/ou OS.
Un peu agaçant.Citation:
les développeurs C++ open source qui se foutent royalement de .NET
Je suis un développeur Open-Source et j'ai choisi Java et non C++ pour créer une plate-forme de développement, un exemple de cas où C++ et Java sont en concurrence.
Je ne vois pas en quoi un développeur C++ se ficherait de .Net, qu'il soit du monde libre ou non.
J'ai pratiqué .Net (5 mois) et je commence une nouvelle mission .Net de 6 mois lundi prochain. Ca fait 3 ans que je programme en Java sur un logiciel libre. Auparavant, j'ai fait du C++ / assembleur sous DOS durant 3 ans, c'était mes début en programmation.
Donc j'estime pouvoir m'exprimer sur ce sujet.
C'est pas ce que je vois... je viens de chercher du boulot pendant 2 mois, avec un CV orienté autant Java que .Net et j'ai eu autant d'entretiens pour des missions en .Net que pour des missions Java. Il y a donc de la demande. Tu me diras, c'est juste mon expérience.Citation:
Outre ce probleme il me semble que peu de gens sont partant pour migrer les applications existantes sous .NET (quitte a utiliser des technos plus soutenus comme VB6) et guere plus pour commencer de nouveaux projets sous .NET
En fait les problèmes de gestion mémoire non sécurisée en C++ ne sont valables que dans la plate-forme .Net : .Net s'occupe en temps normal de la gestion de la mémoire. Alors que en C++ la gestion est manuelle.Citation:
En ce qui concerne le probleme de gestion memoire non securise en C++ ce n'est pas un probleme de langage mais de compilateur et/ou OS
Thomas
Je conviens que madame soleil a toujours plus de graphes que moi ;o)
allez je rigole ! Bon, on arrête de se disputer, je donnais juste mon avis, ya pas de quoi se taper dessus !
a++
Thomas
Quand tu prévoi le succès de Java et de .NET je ne dis pas la contraire, d'autant plus que java c'est déjà un énorme succès, mais quand tu prédit la disparition de C++ à mon avis c'est beaucoup trop extrémiste.
Je ne te donnerais encore qu'un seul exemple, les nombreux développeurs qui font des applications pour les serveur linux (les 2 / 3 du marché je rappelle) utilisent majoritairement C ou C++, (ou PHP, PERL, Python, ou Java... pour les développements web). C'est donc par forcément du java, et c'est pas du tout du .NET.
Hors les serveurs linux cela représente les deux tiers du marché ce qui n'es pas rien.
Donc ton jugement simpliste est beaucoup trop extrémiste.
:)
Je voudrais juste avant tout préciser que les projets sur Sourceforge ne sont peut être pas représentatifs des projets que l'on peut voir en Entreprise et pour lesquels la plupart d'entre vous travaille, et qu'il ne faut peut être pas accorder tant de crédit à ce graphique.Citation:
Envoyé par Epictète
Il y a probablement plus de projets C/C++ dans ce graphique, car les développeurs Open Source développent en général davantage d'outils pour Linux ou Unix en général, lui même écrit en C (il est alors plus simple d'appeler les librairies dans le même langage). Ils sont en général puristes, et ont en général pas mal d'expérience, ce qui explique pourquoi ils ont certainement davantage pratiqué le C et le C++ dans leur vie.
De même, des outils tels que Delphi, ou Visual Basic sont bien moins utilisés sur Sourceforge, car ils sont propriétaires, alors qu'ils sont très largement utilisés en Entreprise.
Ca vient peut etre des domaines ou je travaille mais je ne connais pas grand monde qui s'y interesse.Citation:
C'est pas ce que je vois... je viens de chercher du boulot pendant 2 mois, avec un CV orienté autant Java que .Net et j'ai eu autant d'entretiens pour des missions en .Net que pour des missions Java. Il y a donc de la demande. Tu me diras, c'est juste mon expérience.Citation:
Outre ce probleme il me semble que peu de gens sont partant pour migrer les applications existantes sous .NET (quitte a utiliser des technos plus soutenus comme VB6) et guere plus pour commencer de nouveaux projets sous .NET
Je pense plutot que tu parle de serveur Unix/Linux en general et non Linux, mais la conclusion reste la meme.Citation:
Hors les serveurs linux cela représente les deux tiers du marché ce qui n'es pas rien.
Bonjour...
Je voudrais vous faire part de mes idées concernant Java et C++.
Je vais essayer d'etre le plus objectif possible... Je crois sincerement que C++ surclasse Java en ce qui concerne le developpement logiciel professionnel ( Point de vue de la vitesse (language compilé, pas de Virtual Machine ( moins de resources utilisées), gestion de la mémoire (et oui, c'est TRES souvent tres important) pas de GarbageCollector (Qui sait quand/comment la mémoire est libérée), nombre de fonctions...)
Par contre (toujours selon mon avis), Java est TRES utile, tres fonctionnel pour des applis non sensibles, sur des plateformes ADAPTEES, avec des VM ADAPTEES... (est ce 100% le cas???? je n'en suis pas si sur)
Je ne comprends pas pourquoi on s'acharne à dire que C++ n'est pas portable à cause de ses librairies... Selon ma propre expérience (meme au niveau micorcontrolleur) beaucoup de librairies sont portées sur differentes plateformes (toujours en fonction de leurs utilisations, performances, capacités etc... Toutes n'existent pas, j'en conviens mais il y a souvent moyen de s'en tirer... C'est le revers de la médaille d'un language "Do it yourself" et non "Request to add predifined bricks to build a wall" (comparaison légère entre C++ et Java :wink: ))
Une derniere chose, pour un developpement professionnel sur et performant, je recommande Ada (la POO en Ada95 est à mon gout "eblouissante" :D "merveilleuse" ) mais le revert de la médaille: Language dur à maitriser, on ne sait plus "tricher" aussi facilement qu'en C, C++ et il demande plus de preparation d'architecture logicielle avant de coder.
A+
PS: Je pense egalement que mélanger du procédural avec de l'objet n'est pas TOUJOURS un mal, mais bien une possibilité offerte qu'il faut (faudrait) sagement utiliser...
Ca rejoint mon point de vue, qui est que c'est bien de pouvoir choisir entre ces 2 langages en fonction des besoins.
C'est pour cette raison que Java ne va pas remplacer C++, meme si c'est vrai que beaucoup de développeurs C++ sont passés à Java.
Epictéte merci bcp pour les graphiques , cela je vais les conserver bien précieusement.
Pour tenter de revenir à la question initiale , je pense pour un débutant qu'il vaut mieux apprendre d'abord Java que C++ , tout le monde l'a dit et c'est plus facile BIEN que des outils performants comme C++ Builder soient d'une prise en main aisée.
De plus le SDK de Java est gratuit.
Pour ce qui est des performances si Java et .NET seraient similaires en philosophie et architecture , là où je me pose des questions , c'est lorsque des membres de ce forum sont désepérées d'avoir recours à Direct X pour afficher 3 malheureux graphiques avec VB.NET/C#/dot NET.
Et que ces deux environnements nécessitent des ressources matérielles conséquentes.
Il faudrait penser à recouper tes sources. Un graphe unique ne fait pas la loi, d'autant plus qu'il s'agit ici des utilisations au sein d'une communauté de programmeur qui publient en opn source, question de mentalité -> choix du langage influencé. (Linux et PHP, c'est développé en quel langage?? :) )
Même s'i lest intéressant à prendre en comtpe, il faudrait l'accompagner à d'autres...
Personnelement, je fais du C++, sous Builder. Je confirme que n'importe qui peut en tirer quelque chose de sympathique. Vraiment bien fait cet EDI.