OVH Cloud OVH Cloud

Java vs C++

55 réponses
Avatar
Zouplaz
Bonjour, est-ce que quelqu'un aurait un lien vers une page expliquant
clairement les avantages du C++ (en terme POO) par rapport au à Java.



Merci

10 réponses

1 2 3 4 5
Avatar
Michaël Monerau
Zouplaz wrote:
Bonjour, est-ce que quelqu'un aurait un lien vers une page expliquant
clairement les avantages du C++ (en terme POO) par rapport au à Java.


Trop gros, passera pas ;-)
--
<=- Michaël "Cortex" Monerau -=>

Avatar
Michaël Monerau
Zouplaz wrote:
Michaël Monerau - :

Zouplaz wrote:
Bonjour, est-ce que quelqu'un aurait un lien vers une page
expliquant clairement les avantages du C++ (en terme POO) par
rapport au à Java.


Trop gros, passera pas ;-)
--
<=- Michaël "Cortex" Monerau -=>



Non, non c'est PAS un troll !! Rhaaa !! Bon, j'explique...


eheh :-)
OK. Mais malheureusement, je ne peux pas te renseigner, vu que je ne connais
pas Java.

Désolé !
--
<=- Michaël "Cortex" Monerau -=>



Avatar
Alexandre
Java = portable, sécurisé, pas (trop) de bidouilles comme en C. Lent à
l'execution. Pas d'héritage multiple (enfin, pas vraiment), pas de gestion
directe de la mémoire (donc pas de bas niveau possible)

C++ = portable si recompilé, rapide à l'execution. permet le bas niveau.
Permet aussi de faire du C, ce qui n'est pas une bonne chose.

"Zouplaz" a écrit dans le message de
news:
Michaël Monerau - :

Zouplaz wrote:
Bonjour, est-ce que quelqu'un aurait un lien vers une page expliquant
clairement les avantages du C++ (en terme POO) par rapport au à Java.


Trop gros, passera pas ;-)
--
<=- Michaël "Cortex" Monerau -=>



Non, non c'est PAS un troll !! Rhaaa !! Bon, j'explique...

Je me suis re-inscrit en fac dans une fillière necéssitant un niveau
"correct" en informatique (que je pense posséder mais y a encore du boulot
sur les concepts et je compte faire ce qu'il faut), bref l'un des modules
concerne la programmation OO et Java est proposé...

Comme je suis une sorte "d'auditeur libre" (je passe les détails, google
VAE pour ceux que ça intéresse) je peux éventuellement présenter mon
mémoire avec une partie mise en oeuvre réalisée en C++...

A force de lire les messages ici et potasser un peu j'ai quand même fini
par apprendre quelques concepts dont certains n'existent peut-être pas en
Java (héritage multiple par exemple).

Donc (ouf), je voudrais avoir l'esprit clair avant de choisir Java ou C++
et pas me retrouver en train de penser C++ et me heurter à Java.

Certains diront, les concepts sont les mêmes... Si on sait, on sait, le
langage on s'en fout !
Oui mais il y a de multiples détails intéressants (limitations de "final"
par rapport à "const" par exemple) qu'il vaut mieux que je connaisse
histoire de pas m'embrouiller les pinceaux...

Vala...




Avatar
Michaël Monerau
Alexandre wrote:
C++:Permet aussi de faire du C, ce qui n'est pas une bonne chose.


Tu n'en fais que si tu veux... Je vois pas pourquoi laisser la possibilité
de faire du C serait une mauvaise chose...

J'espère que tu as fait une faute de frappe :-)
--
<=- Michaël "Cortex" Monerau -=>

Avatar
Michael Demanet
Alexandre wrote:
Java = portable, sécurisé, pas (trop) de bidouilles comme en C. Lent à
l'execution. Pas d'héritage multiple (enfin, pas vraiment), pas de gestion
directe de la mémoire (donc pas de bas niveau possible)

C++ = portable si recompilé, rapide à l'execution. permet le bas niveau.
Permet aussi de faire du C, ce qui n'est pas une bonne chose.
Je ne vois pas en quoi faire du C est une mauvaise chose ! Shocking !!

Je crois que j'ai lu dans un bouquin de c++ une phrase qui résulait très
bien la nature de ce langage. Ca disait plus ou moins ceci :
"C++ est une arme remarquable. Elle permet de faire d'excellentes choses
mais si l'arme est mal utilisée, c'est la jambe qui part avec !".

Michaël

Avatar
Christophe Brun
Le 17 Sep 2003 14:39:47 GMT, Zouplaz a écrit:

Bonjour, est-ce que quelqu'un aurait un lien vers une page expliquant
clairement les avantages du C++ (en terme POO) par rapport au à Java.



Merci




Pour compléter les points décrits par mes honorables collègues, je propose
:

1 - JAVA est plus facilement utilisable que C++ dans un contexte
multithread (du moins l'ai-je lu à plusieurs reprises...)
2 - JAVA permet d'éviter les pièges de la gestion de mémoire.
A mon avis, le point 2 (garbage collector) n'est un avantage notable que
pour les programmeurs ayant une faible maîtrise de leur code (et ignorant
les auto_ptr, smart_ptr ou le principe d'Aquisition de Ressources par
Initialisation).

Par contre, pour autant que je sache :
3 - pas de templates en JAVA (donc pas de STL et pas de
métaprogrammation...)
4 - la syntaxe constructeur/destructeur qui permet de faire tant de choses
élégantes en C++ (entre autres d'utiliser le principe d'Acquisition de
Ressources par Initialisation) n'existe pas en JAVA (attention, j'ai bien
dit : #la syntaxe#)

A titre personnel, la question que je me pose est plutôt : quels sont les
avantages de JAVA par rapport à Visual Basic... Mais pour le coup, nous
sortons du thème du forum :o)

--
Sauf erreur ou omission...
C.Brun

Avatar
Arnaud Debaene
Zouplaz wrote:
Bonjour, est-ce que quelqu'un aurait un lien vers une page expliquant
clairement les avantages du C++ (en terme POO) par rapport au à Java.

Si tu parles purement de POO, les différences les plus notables que je vois

sont :

- Garbage Collector en Java, ce qui entraine malheureusemeent qu'il n'y a
pas de vrai destructeur en Java et qu'il est donc difficile de gérer
proprement la durée de vie des ressoureces autres que la mémoire (en C++ on
utilise l'idiome RAII). Un effet de bord annexe est qu'n Java on ne peut pas
choisir de manipuler soit une valeur soit une référence (ou pointeur) comme
on peut le faire en C++.

- Le Java propose la notion d'interface au niveau syntaxique, mais C++
permet de faire exactement la même chose (et même mieux, voir tous les posts
de James sur la programmation par contrat ou par interface) avec des classes
virtuelles pures.

- En Java, tout le monde hérite d'Object. Il y a du pour et du contre...

- En Java, pas d'héritage multiple d'implémentation.

- Java propose "en standard" beaucoup plus de fonctionnalités avancées que
le C++, mais les bibliothèques disponibles en C++ rattrapent cela. En vrac
et parmi les plus importants : theading, GUI, accès aux BdD, accès réseau,
sécurisation du code (signature), sérialisation de/vers des formats
standards (XML),

Ensuite, hors POO, le C++ propose les templates qui offrent d'énormes
possibilités, à priori supérieures à ce que seront les "generics" en Java
1.5.

Arnaud

Avatar
Alain Naigeon
"Arnaud Debaene" a écrit dans le message news:
3f68cd83$0$2787$
Zouplaz wrote:
Bonjour, est-ce que quelqu'un aurait un lien vers une page expliquant
clairement les avantages du C++ (en terme POO) par rapport au à Java.

Si tu parles purement de POO, les différences les plus notables que je

vois

sont :

- Garbage Collector en Java, ce qui entraine malheureusemeent qu'il n'y a
pas de vrai destructeur en Java


Ce qui entraîne..? Bon, il me semble qu'on peut imaginer de spécifier
des destructeurs pris en compte par un Garbage collector (sans pour autant
déclencher soi-même leur exécution). Java a sans doute de bonnes raisons
de ne pas faire ainsi, mais "ce qui entraîne" me paraît un peu rapide, non ?

--

Français *==> "Musique renaissance" <==* English
midi - facsimiles - ligatures - mensuration
http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/
Alain Naigeon - - Strasbourg, France


Avatar
Zouplaz
Arnaud Debaene - :

Si tu parles purement de POO, les différences les plus notables que je
vois sont :

- Garbage Collector en Java, ce qui entraine malheureusemeent qu'il
n'y a pas de vrai destructeur en Java et qu'il est donc difficile de
gérer proprement la durée de vie des ressoureces autres que la mémoire
(en C++ on utilise l'idiome RAII). Un effet de bord annexe est qu'n
Java on ne peut pas choisir de manipuler soit une valeur soit une
référence (ou pointeur) comme on peut le faire en C++.




Alors JUSTEMENT ! Je ne vois pas comment on peut concevoir de travailler
sans concepts de référence et encore moins de pointeurs (qui sont à
bannir en C++, vous me l'avez si souvent dit !)...

Comment peut-on s'en sortir avec des copies d'objets !! Je trouve ça plus
que problématique !

Exemple :

class piece_maison
{
public void addMobilier(mobObject mob)
}

Là c'est typique, l'objet mobilier une fois associé à une instance de
piece_maison en sera définitivement prisonnier ! S'il est modifié par
ailleurs ça finira aux oubliettes.

Concevoir qu'un objet (une instance) puisse avoir une vie propre, soit
totalement autonome de son container me semble indispensable (mais je
peux me tromper, c'est là que ça devient conceptuel).

Sans parler des liens entre instances par référence (et pour moi par
pointeur sic)

COMMENT font-ils ces gens (ceux qui programment en Java) pour s'en sortir
?

Suis-en train de me fourvoyer ? J'ai quand même du mal à imaginer que le
concept de référence si important en C++ soit finalement un gadget dont
on aurait pu se passer...

Votre avis m'intéresse sur ce point tout particulièrement !!!!

Avatar
kanze
"Arnaud Debaene" wrote in message
news:<3f68cd83$0$2787$...
Zouplaz wrote:
Bonjour, est-ce que quelqu'un aurait un lien vers une page
expliquant clairement les avantages du C++ (en terme POO) par
rapport au à Java.


Si tu parles purement de POO, les différences les plus notables que je
vois sont :

- Garbage Collector en Java, ce qui entraine malheureusemeent qu'il
n'y a pas de vrai destructeur en Java et qu'il est donc difficile de
gérer proprement la durée de vie des ressoureces autres que la mémoire
(en C++ on utilise l'idiome RAII). Un effet de bord annexe est qu'n
Java on ne peut pas choisir de manipuler soit une valeur soit une
référence (ou pointeur) comme on peut le faire en C++.


Une ramasse-miettes serait une bonne chose en C++, il n'y a rien à dire.
Mais soyons précis : l'existance d'une ramasse-miettes est orthogonale à
la support pour l'OO (qui semblait intéresser surtout le posteur
initial), et c'est également orthogonale à l'existance des destructeurs.

Il y a eu une proposition pour une ramasse-miettes en C++ présentée au
comité de normalisation avant la dernière norme. Les auteurs l'en ont
rétiré, parce qu'ils s'éstîmaient à l'époque que c'était trop tard, et
que essayer de l'incorporer au langage aurait rétardé la norme. Je ne
l'exclurais pas d'office dans la prochaine version de la norme, même si
d'autres évolutions semblent en avoir réduit l'importance.

L'absence des destructeurs en Java est palié par les blocs finally. Que
l'utilisateur oublie systèmatiquement à mettre:-) -- dans ce cas-ci, on
pourrait dire que Java et C++ offrent les mêmes possibilités, avec des
moyens bien différents, mais que la façon C++ de faire est nettement
plus robuste.

- Le Java propose la notion d'interface au niveau syntaxique, mais C++
permet de faire exactement la même chose (et même mieux, voir tous les
posts de James sur la programmation par contrat ou par interface) avec
des classes virtuelles pures.


On dit « des classes abstraites ». Ce sont les fonctions qui sont
virtuelle pures. :-)

Il y a quand même une chose là que Java fait, et qu'il faut faire à la
main en C++. Admettons que la classe Base a une fonction virtuelle f().
Si j'ai aussi une interface :

interface I { void f() ; } ;

et que j'écris :

class C extends Base implements I
{
} ;

En Java, le f() de Base implément automatiquement le f() de I. En C++,
il faut bien que j'écrive une function f() dans C.

Je n'arrive pas à me décider si le comportement Java est mieux ou pire
que ce que fait C++.

- En Java, tout le monde hérite d'Object. Il y a du pour et du
contre...


Intéressant. Je n'ai pas encore trouver du pour.

- En Java, pas d'héritage multiple d'implémentation.


Ni d'une interface avec contrat:-).

En fait, Java fait une distinction artificielle entre les héritages. À
la Dresdner Bank, la plupart de nos « interfaces » était déclarées
class, parce qu'on voulait y mettre de la vérification du contrat et de
l'instrumentation. Du code, donc.

- Java propose "en standard" beaucoup plus de fonctionnalités avancées
que le C++, mais les bibliothèques disponibles en C++ rattrapent cela.
En vrac et parmi les plus importants : theading, GUI, accès aux BdD,
accès réseau, sécurisation du code (signature), sérialisation de/vers
des formats standards (XML),


N'empèche que si tu veux les utiliser, il faut que tu les cherches, que
tu les installes, etc. C'est quand même plus facile en Java.

Ensuite, hors POO, le C++ propose les templates qui offrent d'énormes
possibilités, à priori supérieures à ce que seront les "generics" en
Java 1.5.


En général, C++ supporte de multiples paradigmes. Java ne supporte que
l'OO.

Il y a deux autres distinctions de taille :

1. C++ supporte une sémantique de valeur aussi pour les types définis
par l'utilisateur. Gosling a proposé un tel support en Java, mais
pour l'instant, rien ne s'est fait.

2. Java prétend savoir toujours ce qui est le mieux pour toi, et
l'impose -- il n'y a qu'une façon de faire quoique ce soit. Les
auteurs de C++ ont été bien moins prétencieux, et si parfois la
liberté qu'il propose fait peur, chaque fois que tu trouves que le
défaut du langage n'est pas ce qu'il te faut (c-à-d très souvent, et
en Java et en C++), il est possible à le contourner. Tandis qu'en
Java, tu es coincé.

La deuxième distinction fait que Java ne convient que pour certaines
applications de niche (dont peut-être l'enseignement), mais pas pour la
plupart des applications professionnelles.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16


1 2 3 4 5