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

2 3 4 5 6
Avatar
Arnaud Meurgues
Luc Hermitte wrote:

Pas exactement car _tout_ est passé par valeur en Java ;


En C et en C++ aussi, si tu vas par là.

Arnaud

Avatar
Arnaud Meurgues
wrote:

- 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.



Ben si : sans ça, on aurait pas de containers en Java... ;-)

Arnaud


Avatar
kanze
Arnaud Meurgues wrote in message
news:<3f6acf98$0$2785$...
Luc Hermitte wrote:

Pas exactement car _tout_ est passé par valeur en Java ;


En C et en C++ aussi, si tu vas par là.


Quand le paramètre est une référence (en C++), il y a passe par
référence. Dans tous les autres cas, y compris des pointeurs, il y a
passe par valeur.

Ce que fait Java correspond à le passage d'un pointeur.

--
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


Avatar
Michaël Monerau
wrote:
On ne peut pas prendre la bibliothèque standard comme un modèle de
bonne conception:-). Mais en l'occurance... il faut bien que le
destructeur ferme tout et libère toutes ses ressources. En général, y
compter est une erreur de programmation, mais je ne vois pas ce qu'il
pourrait faire d'autre.


Pourquoi une erreur de programmation ? Je ne saisis pas bien... Si ce
comportement est normalisé, l'exploiter ne me paraît pas être une erreur de
programmation.
--
<=- Michaël "Cortex" Monerau -=>

Avatar
Arnaud Debaene
Michaël Monerau wrote:
wrote:
On ne peut pas prendre la bibliothèque standard comme un modèle de
bonne conception:-). Mais en l'occurance... il faut bien que le
destructeur ferme tout et libère toutes ses ressources. En général, y
compter est une erreur de programmation, mais je ne vois pas ce qu'il
pourrait faire d'autre.


Pourquoi une erreur de programmation ? Je ne saisis pas bien... Si ce
comportement est normalisé, l'exploiter ne me paraît pas être une
erreur de programmation.


S'il y a une erreur d'écriture sur le disque au moment du "close" dans le
destructeur du fstream, tu as deux possiblités :
- le fstream ignore silencieusement l'erreur, et le programmeur n'a aucun
moyen de savoir qu'il y a eu une erreur.
- le destructeur du fstream lève une exception, ce qu'il ne faut jamais
faire et on entre gaillardement dans le domaine du comportement indéfini.

Arnaud


Avatar
Michaël Monerau
Arnaud Debaene wrote:
Michaël Monerau wrote:
wrote:
On ne peut pas prendre la bibliothèque standard comme un modèle de
bonne conception:-). Mais en l'occurance... il faut bien que le
destructeur ferme tout et libère toutes ses ressources. En général,
y compter est une erreur de programmation, mais je ne vois pas ce
qu'il pourrait faire d'autre.


Pourquoi une erreur de programmation ? Je ne saisis pas bien... Si ce
comportement est normalisé, l'exploiter ne me paraît pas être une
erreur de programmation.


S'il y a une erreur d'écriture sur le disque au moment du "close"
dans le destructeur du fstream, tu as deux possiblités :
- le fstream ignore silencieusement l'erreur, et le programmeur n'a
aucun moyen de savoir qu'il y a eu une erreur.
- le destructeur du fstream lève une exception, ce qu'il ne faut
jamais faire et on entre gaillardement dans le domaine du
comportement indéfini.


Ah... J'ai rien dit ;-)
--
<=- Michaël "Cortex" Monerau -=>



Avatar
Zouplaz
Richard Delorme - :

plus que problématique !

En java, les objets sont systématiquement passés par référence, et non
par copie, sauf les types natifs (boolean, int, ...).



Eh ben, j'avais du lire une page en diagonale...

Effectivement, un rapide essai avec NetBeans m'a bien confirmé qu'il s'agit
de reférences.

Ouf !

Quel méprise !

Avatar
Alexandre
a écrit dans le message de
news:
"Arnaud Debaene" wrote in message
news:<3f68cd83$0$2787$...
<snip>

- 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.


Palier l'absence de template ?


Avatar
Arnaud Debaene
Gourgouilloult wrote:

Par contre, je n'ai plus fait de Java depuis des lustres... quelqu'un
peut me rappeler si toutes les méthodes ne sont pas virtuelles, en
Java ?


Par défaut elles sont virtuelles. Ont peut les rendre non virtuelles avec
final. Il n'est pas dit explicitement que les méthodes final ne sont pas
aussi appelées via la v-table, mais il est indiqué qu'elles peuvent être
inlinées, ce qui laisserait supposer qu'elles sont effectivement appelées
directement.
voir :
http://java.sun.com/docs/books/jls/second_edition/html/classes.doc.html#11246

Arnaud

Avatar
Alain Naigeon
"Arnaud Debaene" a écrit dans le message news:

"Alain Naigeon" wrote in message
news:<3f68d0f2$0$10431$...

"Arnaud Debaene" a écrit dans le message
news:


3f68cd83$0$2787$

- 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).
Bien sûr, et ca existe en Java : ca s'appelle les finaliseurs. Le gros

problème est qu'ils sont appelés par le GC quand il détriut l'objet,
ce qui signifie que tu ne sais pas quand il est appelé ni dans quel
ordre.

Imagines par exemple un objet "o_file_stream" gérant un fichier en
écriture.
[...]


Oui, bon, je comprends ton exemple, mais comme d'autres l'ont souligné,
il s'agit plus d'un problème de fond lié à ce cas que d'un problème de
langage.
On ne sait pas quand le destructeur est appelé, ok, mais il se peut qu'il
y ait tout de même des choses à faire en toutes circonstances, et quel
que soit le moment où un objet est détruit. Alors ce code, j'imaginais
qu'on puisse le loger dans un "OnDelete", une sorte de programmation
évènementielle. Après tout, il y a plein de choses à faire pour détruire
une fenêtre, mais on ne sait pas non plus quand l'utilisateur va cliquer
pour la fermer. Alors il y a sans doute quelque chose qui m'échappe...
Du point de vue de celui qui écrit le destructeur, l'évènement "destruction
ordonnée par GC" est-il plus aléatoire - donc plus problématique - que
l'évènement "destruction suite à clic sur bouton de fermeture" ?

--

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



2 3 4 5 6