¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

 

Comparaison des langages C++ et Java

 

 

 

 

C++

Java

 

Origine

 

 

C++ est une évolution du langage C vers un langage orienté objet. Il garde les points forts du C et en corrige certains points faibles. Entre les langages «bas niveau» comme l’assembleur, et les langages «haut niveau» comme Java, C++ peut à la fois interagir avec les couches hardware et fonctionner comme un puissant langage de haut niveau.

 

 

Java est un langage orienté objet, puissant et portable. Inspiré notamment du langage C, Java évite certaines complexités d’autres langages orientés objets comme le C++.

 

 

Point fort distinctif principal

 

 

 

Rapidité d’exécution.

 

 

 

Portabilité.

 

 

Compilation

 

 

Langage compilé traditionnel.

Le code source est compilé en code machine, directement exécutable par le processeur du poste.

 

 

Combinaison langage compilé et interprété.

Le code source est compilé en pseudo-code Java, celui-ci n’est pas directement compréhensible par le processeur du poste, il est interprété par une machine virtuelle Java (1).

 

 

Portabilité

 

Dépendance vis-à-vis de la plate-forme.

La portabilité n’est pas systématique. Le comportement de l’application à l’exécution dépend de la machine sur laquelle elle est exécutée, du compilateur qui a été utilisé pour la générer.

 

 

Caractère multi-plateforme.

L’application est portable (c’est le principe qui consiste à passer par la machine virtuelle Java qui conduit à la portabilité), ce qui facilite son utilisation sur des postes dont les caractéristiques ne sont pas maîtrisées.

 

 

Performances

 

Rapidité d’exécution

(liée à sa nature de langage compilé en code machine natif).

 

 

Exécution plus lente, même si les écarts de performances entre C++ et Java sont actuellement bien moins significatifs que lors des 1ères versions de Java (2). Java n’est pas adapté pour des applications ultra-critiques en terme de vitesse d’exécution (3).

 

 

Programmation Orientée Objet

 

 

Hybride entre langage procédural et orienté objet.

C++ donne moyen de programmer orienté objet mais ne l’impose pas.

 

 

Langage orienté objet « plus pur »

 

Pas purement objet dans le sens où il existe des types primitifs (types de base entiers, réels, booléen, caractère) qui ne sont pas objets.

 

 

Facilités,

Possibilités, complexité d’utilisation

 

 

Complexité d’utilisation (4) en faveur d’un fort contrôle sur les instructions générées et déroulées au final.

 

Offre des fonctionnalités et possibilités – puissantes et complexes - qui n’existent pas en Java (8).

 

Commentaire : (5)

 

Java est plus facile à apprendre, plus simple à utiliser que C++  (4)

 

 

Simplifie la programmation. Exerce une sorte d’assistance du programmeur en prenant en charge certains traitements effectués automatiquement ou par défaut (9). Langage sécurisé par essence (la syntaxe Java n’offre pas certaines fonctionnalités complexes du C++).

 

Commentaire : (6)

 

 

Fiabilité

 

Fiabilité en terme de maîtrise/contrôle des opérations (sous condition de programmation et de tests de haute qualité).

 

 

Fiabilité en terme de robustesse par simplification/sécurisation de la programmation (réduit risques d’erreurs).

 

 

Profil du programmeur

 

Requiert de bonnes connaissances et compétences informatiques.

 

Requiert de bonnes connaissances et compétences informatiques, toutefois plus accessible pour un non informaticien.

 

 

Actualité du langage

 

 

Langage très répandu/utilisé, disposant de nombreux environnements de développement, actuellement étudié dans les écoles informatiques.

 

 

Langage très répandu/utilisé, disposant de nombreux environnements de développement, actuellement étudié dans les écoles informatiques.

 

 

Temps de développement

 

 

 

(10)

 

Exemples d’utilisations typiques du langage

 

 

Jeux 3D compilés en natif pour windows.

 

Application Web, application distribuée d’entreprise.

 

 

 

(1) Machine virtuelle Java :

Pour pouvoir exécuter une application Java, il faut avoir installé une machine virtuelle Java sur le poste d’exécution. ( ^ Retour tableau )

 

(2) Amélioration des performances Java par rapport à ses débuts :

De version en version, les machines virtuelles Java sont constamment améliorées et optimisées. En particulier, la compilation JIT (« Just In Time », « juste à temps ») accélère l’exécution en convertissant à la volée du pseudo-code Java en code machine natif. ( ^ Retour tableau )

 

(3) Les performances Java par rapport aux besoins en vitesse d’exécution :

Les besoins en vitesse d’exécution sont très variables selon les logiciels considérés. Les capacités de Java seront suffisantes/satisfaisantes pour beaucoup de cas, même si Java n’est pas la solution la plus rapide. Les capacités de Java risquent de ne pas convenir pour des applications logicielles très exigeantes en rapidité, comme les drivers, les logiciels temps réel (traitement du signal, asservissements, …), la visualisation 3D … ( ^ Retour tableau )

 

(8) Exemples de fonctionnalités et possibilités puissantes et complexes du C++ :

Concernant les pointeurs, des types de données spécifiques du matériel hôte, l’héritage multiple, la surcharge d'opérateurs … ( ^ Retour tableau )

 

(9) Java décharge le programmeur de certains traitements :

Par exemple le garbage collector (ramasse miettes) automatise les opérations d’allocation et de libération de mémoire. ( ^ Retour tableau )

 

Les informations ci-dessous relèvent - pour tout ou partie - d’avis, interprétations, témoignages, retours d’expériences, et peuvent en ce sens être empreintes d’une certaine subjectivité.

 

(4) Voir aussi le paragraphe « 5.3.6.3.Langage » du document « CAPSIS - Etude générale  - Croissance d'Arbres en Peuplement et Simulation d'Interventions Sylvicoles » - Unité CIRAD/INRA de Modélisation des Plantes - François de Coligny - Mai 1999. Ce document est accessible sur le site CAPSIS : http://coligny.free.fr/ sous « Documentation » / « Rapports – manuels – cours » : « Rapport d'étude générale du projet Capsis (rapport initial) ». ( ^ Retour tableau )

 

(5) Des fonctionnalités et possibilités puissantes et complexes du C++ :

D’un côté ces possibilités constituent des outils puissants qui peuvent s’avérer utiles voire indispensables dans certains cas spécifiques/critiques. D’un autre côté ces possibilités sont souvent des points difficiles/complexes du langage, potentiellement sources d’erreurs. Leur utilisation nécessite rigueur et maîtrise du langage. Ces possibilités ne sont pas forcément nécessaires dans des cas classiques, habituels de programmation. ( ^ Retour tableau )

 

(6) Aspects de simplification, prise en charge, facilité de prise en main de Java :

D’un côté ces aspects constituent un atout/avantage, en particulier pour un programmeur qui ne serait pas informaticien de métier. D’un autre côté ces aspects peuvent devenir pénalisants en rendant Java inadapté dans certains cas spécifiques/critiques, par exemple par manque de contrôle/maîtrise des opérations automatisées et prises en charge par Java. ( ^ Retour tableau )

 

(10) Temps de développement en Java

Les éléments donnés dans le tableau comparatif (en colonne Java des rubriques « Facilités, Possibilités, complexité d’utilisation » et « Fiabilité ») amènent à dire que Java tend à optimiser les temps de développement de différentes manières. Concernant les phases de codage et de tests, Java tend à rendre le codage plus rapide et à faciliter la mise au point. En phase de maintenance, Java tend à réduire les activités de maintenance corrective (cf fiabilité et robustesse du code). Par ailleurs la portabilité de Java permet d’éviter des travaux supplémentaires qui consisteraient à adapter le logiciel produit à diverses plates-formes. ( ^ Retour tableau )

 

¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾

 

Fiche produite par Nathalie Rousse (INRA/UMR ARCHE AgRosystèmes Cultivés & HErbagers) de la Plate-forme INRA-ACTA-ICTA, avec la participation de François De Coligny (INRA/UMR AMAP botAnique et bioinforMatique de l'Architecture des Plantes) et de Laurent Perochon (INRA / URH Unité de Recherches sur les Herbivores).

 

Vos retours nous aideront à améliorer et enrichir le contenu de cette fiche, vous êtes invités à nous contacter (via le dossier « Contacts ») pour nous faire part de vos commentaires, avis, compléments …

 

 

- mise en ligne le 26/09/05 -

¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾