OVH Cloud OVH Cloud

Java et C++

141 réponses
Avatar
pr.nm
Vu d'un néophyte (pas débutant, mais pas très bon), quelles
différences y a-t-il entre Java et C++, mis à part quelques petites
particularités syntaxiques (syntaxe de création d'un tableau,
l'utilisation de destructeur d'objet, l'initialisation par défaut des
champs) ? Est-ce que l'héritage multiple change vraiment quelque chose
?
Où puis-je trouver un document clair (français ou anglais) qui me
permette de faire la transition (j'ai lu un article disant que C/C++
était plus rapide que Java et nécessitait moins de lignes) ?
Merci d'avance.

10 réponses

Avatar
Gabriel Dos Reis
writes:

| Le résultat, c'est que le langage des templates C++ est Turing
| complete. On peut en principe l'utilisable pour tout problème que peut
| résoudre un ordinateur.

oui mais on peut faire le calcul aussi à la main ? :-)

-- Gaby
Avatar
vclassine
Martinez Jerome wrote in message news:<bg5nbe$...
wrote:

La vitesse qui compte la plus, en général, c'est la vitesse de
développement.


Je suis du coté client.
Et ce qui m'interesse dans les contrats sont :
- les perfs : donc la vitesse d'execution : je t'embauche pour dire a
mes utilisateurs pour leur dire que si ils perdent la moité de leur
données temps réel a cause des perfs d'un appli, c'est pas grave...
Ce qui suppose que ton soft dépasse la capacité de la machine de

beaucoup. il est claire que si il faut 30 secondes pour faire une
opération, 30% de perf en moins c'est préjudiciable. Mais quand il
faut moins d'une seconde ça ne change rien...


J'ai du mal a imaginer qu'un code précompilé soit plus rapide qu'un code
compilé, plus proche de la machine donc.
A optimisation egale (a la limite sans utiliser vector<>), le C++ serait
vraiment moins rapide que Java???
as-tu des exemples?
(j'avoue, c'est le principe meme de code non completement compilé plus
rapide que du code compilé qui me "choque". Mais bon, avec
l'informatique plus rien doit choquer... :) )
Au delà des optimisation possible uniquement avec un compilateur JIT

il faut considèrer l'impact de la vélocité des API...


Avatar
vclassine
Loïc Joly wrote in message news:<bg5u7d$jgm$...
Par vraiment, non...
Déjà, on peut faire des templates avec autre-chose qu'un type...
Ensuite, plutôt que modern C++ design, qui est assez ardu, je te
conseille de lire C++ template, the complete guide, et en particulier
les chapitres meta-programming et expression template.


Pour moi un template c'est un peu comme une expréssion régulière, non?
ça n'apporte pas de fonctionnalité que tu ne puisse pas écrire
directement (même si c'est lourd), non?

Avatar
Arnaud Debaene
Vincent wrote:
Oui, mais avec toutes ces solutions alternatives, rien n'empêche
l'utilisateur de ta bibliothèque d'implémenter directement les 2
interfaces sans passer par ta/tes classe(s) qui "enforcent" le
contrat (c'est même la façon naturelle de faire en Java).


Si la réponse à ta remarque n'est pas le mot clé "final" qui rend les
méthode "non-virtuelles", tu peux me donner un exemple concret en
C++...


Soient 2 interfaces (au sens programmation par contrat du terme) I1 et I2,
définies dans la bibliothèque que tu es en train d'écrire. Comment faire
pour que l'utilisateur de ta bibliothèque (tu ne le connais pas, c'est une
bibliothèque commerciale) puisse hériter de tes 2 interfaces (càd les
implémenter) tout en garantissant que les pré-conditions et post-conditions
seront obligatoirement appliquées (l'utilisateur ne peut pas
"court-circuiter" test tests)?

Réponse en C++ :
class I1
{
public:
float f1(int param)
{
//préconditions
float resultat=do_f1(param);
//postconditions
return resultat;
}
protected:
virtual float do_f1(int param) =0;
};

class I2
{
public:
int f2(char param)
{
//préconditions
int resultat=do_f2(param);
//postconditions
return resultat;
}
protected:
virtual int do_f2(char param) =0;
};


Pour implémneter les 2 interfaces, l'utiliateur de ta bibliothèque n'a qu'à
faire :
class MaClasseUtilisateur : public I1, public I2
{
protected:
virtual float do_f1(int param) { // implémentation };
virtual int do_f2(char param) { // implémentation };
};

Comment fais-tu la même chose en Java?

Arnaud


Avatar
Gabriel Dos Reis
(Vincent) writes:


[...]

| > C'est la dernière mode en programmation. Ça s'appelle la programmation
| > copier/coller.
|
| Je ne l'ai pas dis dans cet esprit c'est certe très utile (même si il
| ne fauit pas exagèrer on n'écrit pas tant de templates que ça...),
| mais ça reste une "commodité syntaxique"... J'entends par là que ça
| n'apporte pas de nouvelle possibilités.

Pas de nouvelles possibilités en quel sens ?

Clairement, les templates ont changé la manière de programmation, vue
de C++.

-- Gaby
Avatar
Christophe Lephay
"Vincent" a écrit dans le message de
news:
Arf! Si tu considères que les templates sont une "commodité syntaxique",
Expression un peu mal choisie je te l'accorde, ça ne rend pas bien

compte de l'utilité de la chose... Mais je continue de penser que ça
n'est pas indispensable.


C'est juste un paradigme supplémentaire (programmation générique, inspiré de
la programmation fonctionnelle). Dans le même ordre d'idée, on pourrait dire
que le paradigme OO n'est pas indispensable quoique utile.

Chris


Avatar
Christophe Lephay
"Gabriel Dos Reis" a écrit dans le message de
news:
"Christophe Lephay" writes:
| Mais la SL me parait bien moins dépendant de l'environnement qu'une
| interface graphique...

C'est ce qu'on a essayé de faire croire. D'après toi quelle est la
définition de fichier ?


Je ne sais pas quelle est la définition de fichier. En revenche, je sais
qu'un système de fichier est plus simple qu'une interface graphique...

Chris

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

Martinez Jerome wrote in
message news:<bg5nbe$...

wrote:

La vitesse qui compte la plus, en général, c'est la vitesse de
développement.


Je suis du coté client.
Et ce qui m'interesse dans les contrats sont :
- les perfs : donc la vitesse d'execution : je t'embauche pour dire a
mes utilisateurs pour leur dire que si ils perdent la moité de leur
données temps réel a cause des perfs d'un appli, c'est pas grave...
Ce qui suppose que ton soft dépasse la capacité de la machine de

beaucoup. il est claire que si il faut 30 secondes pour faire une
opération, 30% de perf en moins c'est préjudiciable. Mais quand il
faut moins d'une seconde ça ne change rien...


Eh oui ! Sans compter que l'optimisation de la façon de faire
(choix d'un algorithme) peut améliorer beaucoup plus que
le codage proprement dit.

--

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



Avatar
Gabriel Dos Reis
"Christophe Lephay" writes:

| "Gabriel Dos Reis" a écrit dans le message de
| news:
| > "Christophe Lephay" writes:
| > | Mais la SL me parait bien moins dépendant de l'environnement qu'une
| > | interface graphique...
| >
| > C'est ce qu'on a essayé de faire croire. D'après toi quelle est la
| > définition de fichier ?
|
| Je ne sais pas quelle est la définition de fichier.

Ah, je vois :-)

| En revenche, je sais
| qu'un système de fichier est plus simple qu'une interface graphique...

-- Gaby
Avatar
Alain Naigeon
[je ne retrouve plus l'auteur]

Pendant qu'on y est, on pourrait éliminer les fonctions aussi, parce
qu'elles non plus elles ne sont qu'une commodité syntaxique ; on n'a
qu'écrire le vrai code à leur place.

C'est la dernière mode en programmation. Ça s'appelle la programmation
copier/coller.




Erreur ! C'est presque démodé, et ça s'appelait "inline" :-)

--

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