Java ou c/c++???

Résolu/Fermé
lunastix275 Messages postés 2864 Date d'inscription dimanche 18 mai 2008 Statut Membre Dernière intervention 9 mai 2011 - 27 mars 2009 à 22:01
mamiemando Messages postés 33401 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 novembre 2024 - 29 mars 2009 à 22:52
Bonjour,
j'aimerais savoir si il faut apprendre a codé en java ou c/c++ les avatages et inconvénient de chacun...
Puissance, portabilité etc...
J'espère que vous voudrez bien m'éclairer sur le sujet, merci d'avoir lu et encorre plus merci de me donner des renseignement =P ^^
A voir également:

9 réponses

mamiemando Messages postés 33401 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 novembre 2024 7 804
28 mars 2009 à 02:46
Pour la portabilité

Un programme C/C++ devra être recompilé pour chaque plate-forme. Ce n'est pas forcément super contraignant car la plupart des plateformes offre un compilateur C.

Pour l'histoire des librairies, attention à en choisir qui existe sur les plate formes que tu vises. Par exemple pour faire une interface graphique, QT et GTK présentent l'avantage d'exister sous windows et linux. À noter qu'un programme C++ avec interface QT est à mon avis aussi simple (voire plus) à développer qu'un programme Java.

Pour le confort de développement

Après c'est plus au niveau du langage et de ton style de programmation qu'il faut voir ce qui te convient le plus. Par exemple moi j'aime pas trop Java parce qu'il y a 10 000 classes et que c'est une usine à gaz, mais tu ne codes presque rien. En C++ il y a sans doute plus de chose à coder mais si tu es a peu près autonome en programmation c'est à mon avis plutôt plus simple.

En terme de gestion mémoire, en Java le garabage collector s'occupe de désallouer ce qui n'est plus utilisé, alors qu'en C++ c'est à toi de le gérer. En soi ce n'est pas super compliqué mais bon...

Au niveau des possibilités

En tant que langage compilé et non executé au travers d'une machine virtuelle, un programme C ou C++ sera effectivement plus performant qu'un programme Java.

Le langage en lui-même propose des possibilités qui n'existent pas en Java, comme le multi héritage et les templates (java ne propose pas de templates aussi puissants qu'en C++). Par contre, sur certains points le C++ est assez lourd syntaxiquement parlant. Comparé au Java il y a quelques subtilités (voir les histoires de lien dynamique notamment).

Enfin il est possible d'embarquer en Java des morceaux de C/C++ (voir JNI) pour améliorer les performances.

Bonne chance
2
Zempachi Messages postés 7472 Date d'inscription vendredi 14 octobre 2005 Statut Contributeur Dernière intervention 5 juin 2020 906
28 mars 2009 à 09:26
À noter qu'un programme C++ avec interface QT est à mon avis aussi simple (voire plus) à développer qu'un programme Java.
je confirme, d'autant que la doc est claire et complète.
0
Salut,

Bon, ne parler que de ces langages est un peu réducteur, mais si on se lance dans un comparatif de tous les langages, on en a pour des mois ;-)

POur faire court, le SDK Java embarque "tout ce qu'il faut" (interfaces graphiques, gestion du réseau, parseurs XML, etc...) là où, en C++, il faut utiliser des librairies tierces. Je ne sais pas si on peut considérer ça comme un réel avantage, étant donné que les dites librairies existent en libre. Disons que sur ce point là, java permet de ne pas s'embêter.
Java est aussi (en théorie) complètement portable : ton application compilée une fois pour toutes tournera sur toutes les plateformes (MacOS, Windows, Linux, Unix, etc.)
Par contre, Java est relativement lent : les programmes sont compilés pour une machine vietuelle qui est émulée à l'exécution. Pas mal de progrès ont été faits, mais pour faire du calcul haute performance, un programme en C reste à mon avis ce qu'il y a de meilleur (éventuellement avec quelques optimisations en assembleur pour les plus téméraires/ceux qui trouvent à redire sur l'utilisation des instructions SSE par les compilateurs C).

Tout dépend donc de ce que tu veux faire : si tu veux coder des programmes vite faits, choisis plutot Java. Si la performance est un critère principal, le C++ (voire le C) sera plus approprié.
0
lunastix275 Messages postés 2864 Date d'inscription dimanche 18 mai 2008 Statut Membre Dernière intervention 9 mai 2011 29
28 mars 2009 à 09:55
merci pour ces réponses =)
vos réponses suscite une nouvelle question : ces quoi les templates? =P
et si j'ai bien compris le c/c++ c plus puissants et simple par moments en étant plus subtile, et pour ce qui est de la portabilité du c/c++ il suffit juste de compilé avec un autre compilateur? pas besoin de touché au code?
0
AmineKalaa Messages postés 87 Date d'inscription jeudi 26 mars 2009 Statut Membre Dernière intervention 10 janvier 2011 7
28 mars 2009 à 10:51
Bonjour.
Les templates (en anglais, modèles en français) sont generalement des classes ou bien des pacquages offertes par le compilateur et qui facilitent le developpement. Par exemple java offre une classe Date setrouvant dans le pacquege java.util.Date. Cette classe contient et des attributs(jour,mois annee) et des méthodes donc il suffi d'ecrir en entete du code import java.util.Date pour pouvoir declarer et manipuler des objets de type Date.
il y a plein d'autre templates...
Une conseille: il faut apprendre JAVA...
0
Zempachi Messages postés 7472 Date d'inscription vendredi 14 octobre 2005 Statut Contributeur Dernière intervention 5 juin 2020 906 > AmineKalaa Messages postés 87 Date d'inscription jeudi 26 mars 2009 Statut Membre Dernière intervention 10 janvier 2011
28 mars 2009 à 11:02
Tu confonds la notion de template et la notion d'API.
Ta classe Date fait partie d'une API et en tant que telle, il est possible de l'utiliser via ses attributs et méthodes.
Les templates en C++ permettent de créer une méta classe.
Il s'agit d'une classe qui peut manipuler un ou plusieurs attributs non typés.
Pour pouvoir utiliser une classe template, il faut donc préciser les types pour chacun des attributs (le c++ est fortement typé).
La meta classe vector en est un parfait exemple.

En java, il n'y a pas à ma connaissance un équivalent des templates en c++

Je finirai enfin par dire qu'il faut apprendre java si on en a besoin, de la même manière pour le c++ , php, dotnet, etc, ou tout autre langage.
0
AmineKalaa Messages postés 87 Date d'inscription jeudi 26 mars 2009 Statut Membre Dernière intervention 10 janvier 2011 7 > Zempachi Messages postés 7472 Date d'inscription vendredi 14 octobre 2005 Statut Contributeur Dernière intervention 5 juin 2020
28 mars 2009 à 11:08
ca peut etre que je n'est pas bien choisi l'exemple mais sachiez que en java la "meta classe" Vector existe aussi
il ya aussi la notion de classe abstraite, interface(ce sont pas les interfaces graphiques)...
0
Zempachi Messages postés 7472 Date d'inscription vendredi 14 octobre 2005 Statut Contributeur Dernière intervention 5 juin 2020 906 > AmineKalaa Messages postés 87 Date d'inscription jeudi 26 mars 2009 Statut Membre Dernière intervention 10 janvier 2011
28 mars 2009 à 11:17
Effectivement la classe vector existe aussi en java mais il n'est pas, à ma connaissance, possible de créer une méta classe en java, c'est à dire dont le type de certains attributs n'est pas défini.
Cela permet par exemple de définir une meta classe liste : on pourra alors créer une liste de string, de int, etc.
En java, il n'existe pas encore cette possibilité d'implémentation.

On peut tricher (http://www-igm.univ-mlv.fr/~forax/java/jlx/template/paper/ pour "émuler" ce mécanisme de template mais il n'est pas nativement présent en java, comme c'est le cas en C++ (http://apinc.org

0
AmineKalaa Messages postés 87 Date d'inscription jeudi 26 mars 2009 Statut Membre Dernière intervention 10 janvier 2011 7 > Zempachi Messages postés 7472 Date d'inscription vendredi 14 octobre 2005 Statut Contributeur Dernière intervention 5 juin 2020
28 mars 2009 à 11:38
merci, mais en java cette notion de "meta classe" peut etre remlacer par les classes abstraites ou les interface:
au lieu d'ecrire
class Liste{
....
}
on ecrit
interface Liste{
...
}
cette interface ne contient que des methode abstraites(deu genre public void affiche();) ca veut dir q'on sait q'il existe une methode affiche pour l'interface liste mais actuellement on ne sait pas quoi et comment afficher!!
une interface doit etre alors implementé par une clase:
class MonClasse imlements Liste{
...
public void affich(){
System.out.println("il fait beau")
.....
}
}

class monClasse2 imlements Liste{
....
public void affich(){
System.out.println("je m'appelle Amine");
...
}
}
une classe qui imlemente une interface doit obligatoirement redefinir toutes les methodes de l'intreface.
de plus on ne peut pas instancier une interface ou une classe abstraite.
pas de Liste liste =new Liste();
0
lunastix275 Messages postés 2864 Date d'inscription dimanche 18 mai 2008 Statut Membre Dernière intervention 9 mai 2011 29
28 mars 2009 à 12:42
pour ce qui est de la portabilité du c/c++ il suffit juste de compilé avec un autre compilateur? pas besoin de touché au code?
0
Zempachi Messages postés 7472 Date d'inscription vendredi 14 octobre 2005 Statut Contributeur Dernière intervention 5 juin 2020 906
28 mars 2009 à 12:49
Tout dépend de ce que tu utilises.
Par exemple si tu utilises les MFC (bibliothèques graphiques sous Windows), beh sous linux ça marchera pas vu que c'est dispo que sous windows.
Plus généralement, si tu ne fais pas de code spécifique à un système d'exploitation, tu n'auras pas à modifier ton code.
D'ailleurs, il faut noter que le compilateur GCC dispo nativement sous linux est également dispo sous Windows : MinGw.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamiemando Messages postés 33401 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 novembre 2024 7 804
28 mars 2009 à 12:50
Pour la portabilité je ne suis pas spécialement convaincue. Comme je le disais plus haut il existe des compilateurs C sur toutes les machines. Pour la notion de template (patron de classe en français) on est très loin des possibilités offertes par le C++ avec les "pseudos templates" du java.
http://www.commentcamarche.net/faq/sujet 11255 introduction a la stl en c standard template library
http://www.commentcamarche.net/faq/sujet 11194 les templates en c

... et je ne parle pas des possibilités offertes par boost...

Les deux sont bien et tout deux largement utilisés. Pour résumer :

- java permettra de partir vers des applications web
- ...mais un programme c++ peut être appelé depuis un serveur apache (alors certes, on aura pas toute l'interface, mais après tout il suffit de faire un programme c++ qui manipule des fichiers générés par un formulaire php et qui recrache un fichier de résultats qui sera relu par le serveur apache)

- java permet de faire rapidement des applications graphiques mais il y a tellement de classes que c'est pas forcément trivial,
- c++ permet de faire pareil au travers de librairies bien faites et portable (QT notamment)

- java est plus simple sur certains aspect, notamment la gestion de la mémoire mais reste nettement moins performant que du C++. Certaines features bien pratique dans le C++. Si le multi-héritage c'est pas forcément indispensable, les "vrais" templates sont bien pratiques.
- En contrepartie java est plus simple car il n'y a que des références, fini les passages de paramètres par pointeur ou recopie. Mais bon c'est forcément limitant, notamment un pointeur peut être non initialisé (ou passé à NULL) alors qu'une référence est toujours initialisée.

Avant de se demander si C++ est mieux que java ou le contraire, je pense qu'il faudrait se demander quelle genre d'application il veut faire. Car les deux présentent leurs avantages, donc autant choisir le plus adapté...

Bonne chance
0
lunastix275 Messages postés 2864 Date d'inscription dimanche 18 mai 2008 Statut Membre Dernière intervention 9 mai 2011 29
28 mars 2009 à 12:57
pas application web bof ...
donc c/c++ plutot et pour la portabilité existe t il des librairies ou je sais pas comment ça s'appelle pour le graphisme qui marche et sous linux et sous mac?
0
mamiemando Messages postés 33401 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 novembre 2024 7 804
28 mars 2009 à 13:01
Oui QT.
0
lunastix275 Messages postés 2864 Date d'inscription dimanche 18 mai 2008 Statut Membre Dernière intervention 9 mai 2011 29
28 mars 2009 à 13:06
donc c bon après? no problème pour la portabilité?
0
mamiemando Messages postés 33401 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 novembre 2024 7 804
28 mars 2009 à 13:17
Eh oui !

À moins que tu fasses du archi bas niveau lié à l'architecture de la machine (où tu dois te poser des questions sur la manière dont est encodé un entier ou un caractère) c'est portable. En effet, QT te place à un niveau d'abstraction où tu peux t'affranchir des questions liées à l'architecture machine.

Je t'invite à lire :
https://fr.wikipedia.org/wiki/Qt
https://www.qtsoftware.de/oxShop2/source/
http://www.qtfr.org/
http://doc.trolltech.com/

Évidemment pour que ton programme soit portable il faudra utiliser des headers et des librairies qui existent sur les différentes plateformes. Par exemple pour QT, boost, la STL pas de problème. Mais on oublie
- conio.h, l'API Win32, les MFC, (spécifique windows) et qui ne servent à rien si tu utilises QT,
- les appels à des commandes spécifiques au système (voir fonction system()). Souvent en plus on peut s'en passer. Par exemple un system("PAUSE"); se remplace par un getchar();

Bonne chance
0
lunastix275 Messages postés 2864 Date d'inscription dimanche 18 mai 2008 Statut Membre Dernière intervention 9 mai 2011 29
28 mars 2009 à 16:03
merci beaucoup =) mais si j'utilise code::blocks j'ai cru comprendre que j'avais pas besoin de mettre les système pause donc il se démerde tout seul avec ça?
0
mamiemando Messages postés 33401 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 novembre 2024 7 804
28 mars 2009 à 16:07
En fait le system("pause") (=getchar();) ne sert à que si tu lances un programme qui écrit dans une console depuis l'explorateur windows. En effet windows lance le programme dans une fenêtre commande ms-dos qui se ferme dès que le programme est terminé, ce qui ne donne pas toujours la possibilité de voir tout ce que le programme a écrit.

Pour démarrer en QT :
https://openclassrooms.com/fr/courses/1894236-programmez-avec-le-langage-c

Bonne chance
0
lunastix275 Messages postés 2864 Date d'inscription dimanche 18 mai 2008 Statut Membre Dernière intervention 9 mai 2011 29
28 mars 2009 à 16:22
merci beaucoup mamiendo =))

edit : je vais d'abord finir le c =P et j'attaquerai le c++ ensuite puis le QT ^^
0
mamiemando Messages postés 33401 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 novembre 2024 7 804
29 mars 2009 à 22:52
Ok bonne continuation
0