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
Alain Naigeon
"Fabien LE LEZ" a écrit dans le 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...


Peut être qu'il y a moins de formalités pour le reprendre.
Mais un bon produit commercial, avec une base de clients,
c'est bien rare qu'il ne soit pas repris.

--

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


Avatar
James Kanze
"Alain Naigeon" writes:

|> "Christophe Lephay" a écrit dans
|> le message news: bg54b7$q5$
|> > "Endymion" a écrit dans le message de
|> > news:
|> > > Est-ce qu'on peut dire que définir une classe abstraite
|> > > avec quelques méthodes abstraites et quelques champs et
|> > > demader aux programmeurs d'écrire des sous-classes de cette
|> > > classe abstraite, c'est de la programmation par contrat ?

|> Le principe est plus simple que ça, c'est juste d'énoncer
|> clairement quelles valeurs, ou quelles relations entre valeurs,
|> une classe doit vérifier à tout moment, ou en entrée et
|> sortie d'une opération.

La vérification est sécondaire. Un contrat est un contrat, qu'on
le vérifier ou non. Pense un moment au contrat d'une fonction sort,
par exemple. Tu penses que c'est raisonable à démander la
vérification. (Note bien qu'il n'y a pas que l'ordre en sortie. Il
y a aussi que tous les éléments en entrée si trouvent, et que
ces éléments.)

Ceci dit, il y a un dicton que j'ai entendu en anglais : « trust is
good, verification is better » qui résume en fait un peu la
philosophie. Quand c'est possible, on aime bien y ajouter la
vérification.

|> Et de se donner les moyens, dans le langage, d'exprimer ces
|> contraintes, et d'avertir (de façon récupérable) quand
|> elles sont violées). Enfin, il me semble que ça donne une
|> première idée.

|> Ensuite, un truc sur le quel Meyer insiste : le contrat n'existe
|> pas seulement pour la classe, mais aussi pour l'appelant d'une
|> méthode :

C'est un principe de base de la juriprudence anglo-saxone -- il n'y a
pas de contrat sans obligations réciproque. (Ça explique, par
exemple, pourquoi dans certains travails volentaires, il y a une
salaire symbolique -- un dollar par an, par exemple.)

|> Tel genre de résultat est garanti (et/ou tel ou tel invariant
|> est conservé...) **si** l'entrée vérifie telle et telle
|> condition.

C'est prèsque la définition d'un contrat -- il y a des
obligations réciproques.

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
James Kanze
Gabriel Dos Reis writes:

|> 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 ? :-)

Certes. On peut faire de l'assembleur aussi. En fin de compte, le C++
n'est qu'une commodité syntactique.

Personnellement, ayant fait pas mal d'assembleur dans mon temps,
j'aime les commodités syntactiques.

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
James Kanze
Gabriel Dos Reis writes:

|> writes:

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

|> comme quoi la mode est éphemère : il y a 50 ans, c'est ce
|> que faisaient les gens, et ça marchait bien. Après les
|> 68-tards socialo-communistes ont ajouté tous ces sucres
|> syntaxiques qui nous polluent la vie maintenant.

Ne sois pas personnel. Je suis un 68-tard socialo-communiste. Or que
toi... Qu'est-ce que tu faisais en 68, au juste ? (Ben, à vrai
dire, être 68-tard aux États-unis, c'était peut-être plus
facile. Vu que l'alternatif était un petit voyage organisé au
Vietnam.)

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

|> Ah, PCC veut dire ça donc ! MerrrrrrrrrrrrrrrrrrrciIIII.

Mais n'as-tu pas remarquer combien c'est facile avec des éditeurs
moderne ?

Alors, finit le OO ! vive le CC !

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
James Kanze
(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, 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.)

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

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

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
James Kanze
Gabriel Dos Reis writes:

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

Pour certains, peut-être. S'il faut que tu compiles avec Sun CC
mode compat=4, ils n'ont pas encore créer un changement
fondamental:-).

Pratiquement, pour l'instant, les possibilités des templates
restent une possibilité théorique, non utilisable dans la
pratique pour la plupart des gens. _Pour l'instant._

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
James Kanze
Martinez Jerome writes:

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

|> - Le prix du developpement et la date de livraison, donc oui la
|> vitesse de developpement

|> Mais le deuxieme point est en deuxieme...

Tu en es sûr. Pour avoir les perfs qu'ils veulent, il suffit
d'acheter une machine plus puissante. Ou sinon, ce n'est pas les
différences de performance d'un langage à l'autre qui vont faire
l'affaire. Or, la prix d'une machine plus performant, c'est combien :
2000 Euros ? 10000 ? Tandis que le prix d'un mois de plus de
développement ? Je me facture à 500 Euros le jours, bas prix --
c'est environ 10000 Euros par mois, sans compter les frais annex.

Évidemment, si l'application tourne sur 10000 machines... Je sais
que sur les premier minitels, ils ont mis plusieurs hommes-mois à
gagner une quinzaine d'octets. Ce qui faisait que le programme
rentrait dans un PROM, à la place de deux. Compte tenu des 7
millions d'exemplaires qui ont suivi, ça valait la peine. Mais
combien d'entre nous écrivons des logiciels qui vont tourner sur 7
millions de machines ?

|> > Ce n'est pas dit. Si tu fais attention à ne travailler
|> > qu'avec les double[], le résultat pourrait être même
|> > plus vite qu'avec C++. Sur certaines plateformes, en tout cas --
|> > la portabilité à ce niveau, ce n'est pas le fort de Java.

|> J'ai du mal a imaginer qu'un code précompilé soit plus
|> rapide qu'un code compilé, plus proche de la machine donc.

Que tu puisses l'imaginer ou non, j'ai des mésures à l'appui.

Mais qu'est-ce qui te fait dire que le Java n'est pas compilé. La
compilation a lieu bien évidemment lors du chargement, chaque fois
qu'on démarre l'appli. Mais c'est compilé, et c'est une
compilation souvent optimisée pour la machine précise où il
tourne. (Sur ma machine au travail, j'ai des améliorations
d'environ 20% si je dis au compilateur de compiler pour Sparc v9,
plutôt que pour Sparc générique. Évidemment, le code
compilé pour Sparc v9 ne marcherait pas sur mon Sparc à la
maison. Mais sur les machines où il marche, c'est environ 20% plus
rapide.)

|> A optimisation egale (a la limite sans utiliser vector<>), le C++
|> serait vraiment moins rapide que Java???

Certainement, pour des tableaux des types de base. L'enemie de
l'optimisation, c'est des alias. C'est une grande faiblesse de C et de
C++ -- les tableaux deviennent des pointeurs, et des pointeurs, on ne
sait pas où il pointe. Il faut donc supposer le pire.

|> as-tu des exemples?

J'ai perdu le lien, mais il ne doit pas être trop difficile à en
créer. Il faut des opérations complexes sur plusieurs tableaux
des types de base (double, par exemple) dans une fonction qu'on
appelle souvent. Dans le cas de Java, le compilateur sait que les deux
tableaux, ou bien, ils sont les même, ou bien, ils sont disjoints.
Le compilateur C++ ne sait pas que les écritures à travers un
pointeur ne peuvent pas jouir sur des résultats des lectures
antérieurs à travers l'autre pointer.

|> (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... :) )

Mais quand on l'execute, le code du Java est complétement
compilé. Le compilateur n'a pas le temps de faire des analyses
statiques aussi profond que ne pourrait faire un compilateur C++. En
revanche, il a toujours des informations du profiling, et Java n'a
pas les problèmes d'alias que n'a C++.

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
James Kanze
Gabriel Dos Reis writes:

|> Loïc Joly writes:

|> | Un argument est que si tu as codé vite, il te reste du temps
|> | pour optimiser là où tu en a besoin.

|> J'ai souvent entendu « si tu codes vite, il te restera du temps
|> pour debugguer » ;-)

La formulation classique, je crois : si tu n'as pas le temps de le
faire correctement la première fois, où vas-tu trouver le temps
de le faire une deuxième fois (quand la première fois ne marche
pas) ?

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
James Kanze
Loïc Joly writes:

|> Martinez Jerome wrote:
|> > James Kanze wrote:

|> >> Sans parler de l'aspect risque. Quand j'étais à la
|> >> Dresdner Bank, ils ont décidé de réécrire toute une
|> >> application en Java, parce que la bibliothèque de
|> >> fenêtrage sur laquelle elle était basée était
|> >> retirée du marché.

|> > D'ou l'interet de l'open-source... (Et c'est pourquoi je
|> > préfère WxWindows a Qt, trop restrictif a mon gout)

|> Il me semble que sur ce point particulier, TrollTech a signé un
|> contrat stipulant qu'en cas de faillite, QT basculerait
|> automatiquement dans l'OpenSource.

Et alors. Tu as un boggue, et du coup, on te donne quelque centaines
de lignes de code, et on te dit : débrouille-toi.

Dans la pratique, avec des sous-systèmes d'une telle complexité,
tu dépends du fournisseur. Or, dans certains cas des logiciels
libres, ça peut être une garantie -- s'il y a des dizaines de
personnes qui y travaillent dans plusieurs pays différents, la
risque que tous y rénoncent au même moment, et que tu n'arrives
même pas à en embaucher un, est tellement faible qu'on puisse
l'ignorer. (C'est donc que l'utilisation de g++ est AMHA sans risque.
Ou au moins, avec moins de risques que pour la plupart des
compilateurs.) Mais le fait que les sources soient ouvertes ne
garantit rien en soi.

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
Luc Hermitte
James Kanze wrote in news:
soft.fr:

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


Alexandrescu ? Il a ecrit "Modern C++ Design" chez Addison Wesley et
quantités d'articles intéressants. D'ailleurs, c'est qui le 2eme nom qui
a participé au bouquin sur les templates avec Jossutis ? Ce n'est pas lui
d'ailleurs ?

J'ai mis un peu plus de temps à réussir à retenir son patronyme que
Stroustrup, mais maintenant ça va. ^_^


--
Luc Hermitte <hermitte at free.fr>
FAQ de <news:fr.comp.lang.c++> :
<http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/>
Dejanews : <http://groups.google.com/advanced_group_search>