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
vclassine
"Christophe Lephay" wrote in message news:<bg6dhs$ihj$...
"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.


Je ne sais pas si on peut aller jusque là, il faut que je sois ammener
à faire du C++ ou que j'attende la version 1.5 de java pour en mesurer
toute la puissance. Jusque là je vois ça comme une alternative
"propres" aux macros et un bon moyen de faire des composants
génériques mais pas trop permissifs. Mais peut-être que je n'en mesure
pas toute la puissance... Je verrais quand j'aurais fait le tour de la
question, pour l'instant ça ne me manque pas bcp en java...

Quoiqu'il ça arrive en java et donc pour la question initiale ça n'est
pas un critère de choix... Surtout que le temps qu'il aprenne la
POO/COO java 1.5 sera là...



Avatar
vclassine
James Kanze wrote in message news:...
(Vincent) writes:

|> wrote in message
|> news:...
|> > Gabriel Dos Reis wrote in message
|> > news:...
|> > > "Arnaud Debaene" writes:

|> > > | Les templates ne servent pas qu'à faire des conteneurs de
|> > > | T, loin de là.

|> > > ah bon ?!

|> > Oui, mais comme il a dit, les templates ne sont qu'une
|> > commodité syntaxique. En fin de compte, la
|> > méta-programmation, ce n'est qu'une façon de générer
|> > du code -- tu n'as qu'à écrire ce qu'il aurait
|> > généré à la main:-).

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

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

Je suis contre l'exagération aussi. Surtout quand les compilateurs
ont du mal à suivre. Mais d'une part, je trouve que la commodité
syntactique n'est pas si mauvais que ça,
Entièrement d'accord, le point de vue que j'ai c'est plutôt "utile et

agréable" mais pas indispensable... Je suis pour les commodités quand
elles n'ont pas de conséquences néfastes...

et d'autre, je crois que
si tu penses que les templates, ce n'est que la commodité
syntactique, je crois qu'il y a quelque chose que tu n'as pas compris.

Les templates, tels que certains les utilisent, sont
révolutionnaire. Je ne sais si les bureaux d'études sont près
pour cette révolution-là -- je crois plutôt que non, mais
c'est bien autre chose qu'une commodité syntactique. C'est
peut-être même plus que l'introduction des fonctions, pour dire
à quel point c'est autre chose. (C'est pour ça, d'ailleurs,
qu'il faut du temps avant qu'il devient une technologie courante.)
Peut-être que je n'en mesure pas toute la puissance, effectivement.

Mais j'imagine que si je ne trouve pas ça vital, ça ne le saura pas
avant un bon moment pour le néophyte qui pose la question... En tout
cas pas avant java 1.5... Maintenant je suis près à croire que des
gens y ont trouvé un paradigme révolutionnaire, mais de là à ce que ça
change le quotidien de la plupart des developpeurs d'ici un an...

|> mais ça reste une "commodité syntaxique"... J'entends par
|> là que ça n'apporte pas de nouvelle possibilités.

Je te conseille de lire Andrei. (Gabi pourrait donner des
références exactes. J'ai un mal fou déjà avec son nom de
famille.) Qu'on soit d'accord avec ce qu'il fait ou non (et j'ai mes
doutes sur l'applicabilité dans l'industrie), ça dépasse de
loins ce que j'appellerai une commodité syntactique.
Je le note, mais franchement j'ai une étagère pleine de bouquin

passionnant ou très utiles à lire... :-(

|> A la limite une feignasse peut systématiquement utiliser un
|> conteneur générique configuré pour accepter des Object...

Mais est-ce que tu as compris que les templates C++, ce n'est pas que
les collections ? Les templates, c'est un langage de programmation qui
permet à définir des programmes -- un langage de
méta-programmation, en somme.
J'ai compris que ça n'est pas seulement ça. Mais dans l'ensemble il me

semble qu'au delà des collections (ou autres choses du même genre) et
des macros améliorés les applications restent assez confidentielles.
En ce sens ça n'apporte, pour moi, pas grand chose à quelqu'un qui
veut être programmeur amateur et qui ignore le sens réel du
"implements". Je pense que se baser sur ce que sera la programmation
professionel dans 5 ou 10 ans pour conseiller un débutant (ou presque)
dans le choix d'un langage de "bricolage" et d'aprentissage, c'est un
peu hors sujet. D'autant plus que ça sera implémenter (à savoir
comment...) dans java, bien avant que ces notions lui soit
accessibles...

PS: Je dis ça sans moquerie ou mépris. Nous avons tous été débutant,
il est hypocrite d'ignorer la différence de niveau et le chemin à
parcourir...

Avatar
kanze
Gabriel Dos Reis wrote in message
news:...

writes:

| David, c'est l'expertise sans égale de toutes les détails des
| templates

Non, là tu es en train de parler John Spicer :-)


C'est vrai. Encore que la différence n'est pas énorme. (Et encore, je ne
suis pas sûr. Je parie que David a plus d'expérience à l'utilisation des
templates.)

Demande à David si tu ne me crois pas.


Ce qui ne prouverait rien. Je crois que tu sais aussi bien que moi que
David est une personne extrèmement modeste, toujours prêt à donner plus
de crédit aux autres, et moins à lui-même, qu'il ne se doit.

--
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
kanze
Jean-Marc Bourguet wrote in message
news:...
"Christophe Lephay" writes:
"Jean-Marc Bourguet" a écrit dans le message de
news:

writes:

Non. C'est David Vandervoorde. (Dans les groupes anglophones, il
écrit son nom Daveed, pour qu'on le prononce correctement. Il
est belge, et malgré son nom de famille, belge francophone.)


Pourquoi "malgré" ?


Parce que Vandervoorde fait plus flamand que wallon...


L'origine, oui. Mais il faut ne pas avoir vecu longtemps en Belgique
pour faire des hypotheses sur la langue maternelle de quelqu'un en se
basant sur le nom.


Peut-être, mais je n'ai jamais vecu en Belgique:-).

--
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
vclassine
Fabien LE LEZ wrote in message news:...
On 28 Jul 2003 08:19:12 -0700, (Vincent) wrote:

mais honn?tement peu d'entreprises
peuvent se permettre de maintenir une biblioth?que que leurs auteurs
aurait abandonn?...


Certes, mais une biblioth?que abandonn?e mais en open source a plus de
chances d'?tre reprise par quelqu'un d'autre...


La bonne id?e c'est d'utiliser une biblioth?que OpenSource mais via
une API normalis?e, au cas o?... Un peu comme avec Xerc?s qui supporte
l'api Java standardis?e, comme d'autres concurrents opensource ou
pas...

Mais entre utiliser une biblioth?que open-source ou une biblioth?que
ferm?e bas?e sur une api standard, le choix d?pends vraiment du
domaine, du projet, de la biblioth?que...


Avatar
Gabriel Dos Reis
writes:

| Gabriel Dos Reis wrote in message
| news:...
|
| > writes:
|
| > | David, c'est l'expertise sans égale de toutes les détails des
| > | templates
|
| > Non, là tu es en train de parler John Spicer :-)
|
| C'est vrai. Encore que la différence n'est pas énorme.

Ça dépend à quelle echelle tu te places. Vu de Chulak, tu as
probablement raison.

| (Et encore, je ne
| suis pas sûr. Je parie que David a plus d'expérience à l'utilisation des
| templates.)
|
| > Demande à David si tu ne me crois pas.
|
| Ce qui ne prouverait rien.

et dans ce cas qu'est-ce qui prouverait quelque chose ? Le fait que tu
assertes qu'il est l'Expert ?

| Je crois que tu sais aussi bien que moi que
| David est une personne extrèmement modeste, toujours prêt à donner plus
| de crédit aux autres, et moins à lui-même, qu'il ne se doit.

David est très modeste. Certes. Mais au de là sa modestie, il dit aussi
la vérité. Demande lui plus de détails sur la part de John dans
l'elaboration du bouquin.

Encore une fois : je ne veux en aucun diminuer le mérite de David.

-- Gaby
Avatar
vclassine
"Christophe Lephay" wrote in message news:<bg8nvp$hgg$...
"Vincent" a écrit dans le message de
news:
total = prixHorsTaxe.applyTaxe(tva);
Est tout à fait acceptable et applyTaxe n'est guère plus long à écrire
que la surcharge de l'opérateur. Même si l'opérateur peut être employé
ailleurs...


Alors, il faut que tu introduit une classe supplémentaire
Pour surcharger l'opérateur plus il te faut bien aussi une classe Prix

ou un truc dans ce goût là, non?


Non. tu peux avoir juste une classe prix qui gère ces opérations. Avec ton
exemple, tu risque de multiplier et les classes (pour les prix hors taxes,
les prix ttc, les prix auxquels la tva ne s'appliquent pas).
Là clairement c'est une discussion dans le vide, pour se rendre compte

de l'impact, il faut un vrai sujet d'étude, pas deux lignes de code...


-- une valeur
décimale qui connaît la TVA française.
Dans l'exemple C++ comme Java la TVA est dans l'appel, mais ça n'est

pas forcément une bonne idée...


Mais ce n'était qu'un exemple simple. Que faire dans les programmes du
marché, par exemple, où les formules qu'on manipule sont vraiment
compliqués, et qu'ils changent assez souvent.
Je ne vois pas l'avantage d'un opérateur par rapport à une fonction

pour l'évolutivité.


Je suis assez d'accord...

Très clairement soit c'est simple ou très peu
usagé et utiliser add() ou mult() est un peu plus pénible, mais pas
bloquant. Sois c'est compliqué et il y a intérêt à encapsuler dans une
fonction, ne serait-ce que pour l'évolutivité du code... Je ne crois
pas que le fait que la surcharge d'opérateur permette d'écrire des
formules complexe et volatile en dehors d'une encapsulation soit un
atout...


L'intéret des opérateurs sur les fonctions devient évident lorsque les
formules deviennent complexes. Par exemple comprendre un calcul
d'amortissement dégressif ou de coefficient de corrélation sera plus facile
avec des opérateurs surchargés qu'avec des fonctions...
A mon avis le problème n'est pas tellement pour un calcul très

complexe, mais plutôt pour une appli ou il y à énorméments de
calculs... Si il s'agit de deux ou trois gros calcul, tu les écris à
la main, tu les traduit en fonction et tu les encapsules...

Maintenant dans des lib sientifiques c'est lourd...




Avatar
vclassine
Loïc Joly wrote in message news:<bg5tvk$oj8$...
Vincent wrote:
Euh? En C++ on peut écrire une fonction redéfinissable mais pas
appelable par la classe fille?


Oui.

class A
{
private:
virtual void f();
};

f est redéfinissable, mais non appelable, ni par le client, ni par la
classe fille.


Et on n'est pas obligé de la redéfinir pour créer une classe concrète fille, non?


Avatar
vclassine
je suis en pleine lecture du livre de Bertrand Meyer et le chapitre est
encore tout chaud dans ma tête,
ce qui me gène dans ta proposition pour "implémenter" le contrat, c'est
l'impact sur les performances.

En effet, le contrat doit permettre de nous passer d'un certain nombre de
test pour éviter notamment
la redondance de code, toute fois il est important de pouvoir garantir le
contrat en fournissant des
assertions lors de la phase de débuggage, pour pouvoir dire "tiens mon
client n'a pas respecter le contrat
c'est de sa faute si le résultat est inattendue...."

Une fois que l'on passe en mode de production, une majorité ou la totalité
des assertions sont supprimer.
car on sait que les client qui ont appeler les méthodes ont pris soin de
respecter les préconditions. Et que
mes méthodes semble fournir les résultats escompté (post-conditions).

Quelle solution as-tu en Java pour en mode "release" supprimer les appels a
tes fonction pre_condition et
post_condition, qui ne devrait plus être nécessaire après avoir effectuer le
debuggage?
Je reprenais un exemple avec des fonctions, les assertions éxistent

(depuis peu) en Java, et elles sont bien sûr désactivable à
l'éxécution...

Avatar
Loïc Joly
Vincent wrote:
Loïc Joly wrote in message news:<bg5tvk$oj8$...

Vincent wrote:

Euh? En C++ on peut écrire une fonction redéfinissable mais pas
appelable par la classe fille?


Oui.

class A
{
private:
virtual void f();
};

f est redéfinissable, mais non appelable, ni par le client, ni par la
classe fille.



Et on n'est pas obligé de la redéfinir pour créer une classe concrète fille, non?


Si tu ajoutes =0 à la fin, si :
class A
{
private:
virtual void f() = 0;
};

--
Loïc