[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[linux-team] C vs. C++ (was Gnome 0.99.8)
> > Bruno Mairlot wrote:
> >
> > Je n'aime pas l'orienté objet. Je trouve que c'est plus efficace en C
> > pure. Dans le cas de Gtk+, Gtk-- est intéressant uniquement si tu veux
> > concevoir des widgets au-dessus de ceux existant déjà.
>
> Voici un extrait de la FAQ de bjarne Stroustrup (le createur du C++).
>[...]
>
> Je crois qu'il est assez bien placer pour savoir ce qu'il dit.
>
Bon, il est évident que Stroustrup ne va pas dire le contraire :-)
Pour commencer, il faut éviter de confondre OO vs. procédural avec C
vs. C++. Le C++ est considéré comme bien faible par les gens qui se
disent des gurus de l'OO.
Le truc le plus drôle, c'est de voir que Stroustrup cite Meyer dans sa
biblio, et inversément, et qu'ils se démolissent plus ou moins
mutuellement. Meyer, avec la hargne qui le caractérise, dit que le C++
est un langage de nains (bon, je paraphrase :-), et Stroustrup prétend
que Meyer confond les principes généraux avec Eiffel. Fin de la
parenthèse.
Mais je dois bien dire que depuis que j'ai goûté au C++, il m'est dur
de revenir au C. Le problème des gens qui goûtent au C++ après avoir
fait du C, c'est qu'ils croient généralement que c'est du C avec des
choses en plus (plus). Erreur ! Les deux approches sont
fondamentalement différentes, en dépit de la syntaxe proche, et de tout
ce que ce bon vieux Bjarne veut bien nous dire (2e extrait du FAQ ci-
dessus)...
Mon premier programme en C++ a été une conversion d'un programme C, où
je devais supporter plusieurs hardware différents, et je maintenais
autant de version de programmes qu'il y avait de hardware (des cartes
vidéos) avec des #ifdef. Puis, on m'a demandé de piloter des caméras
en plus. Ca multipliait les combinaisons (4 cartes vidéos, fois 3
caméras :-( yeeek!). Ca n'était plus tenable, il fallait changer ça.
Je me suis donc retroussé les manches, et j'ai réécrit mon programme
(en C++) pour passer au travers d'interfaces génériques (une pour la
caméra, une pour la carte). Mon programme est donc le même quel que
soit le hardware que je rencontre, il y a juste au démarrage, quand je
lis ma config, que j'initialise mes pointeurs génériques avec un new de
la bonne classe dérivée de l'interface correspondante. Abstraction.
Pour faire la même chose en C, il faut passer par des pointeurs de
fonctions et des tas de trucs horribles.
C'était il y a longtemps... Depuis, je me suis tapé de la littérature,
et notamment les "design patterns" du gang of four. C'est un must.
Pour ceux qui veulent des infos plus spécifiques au C++, la 3e édition
du Stroustrup est indispensable, ça fait fonctionner les neurones, tout
en étant bien plus abordables que les éditions précédentes. Autres
lectures à ne pas négliger, les recettes de cuisine du père Scott
Meyers.
Dans ma boîte, même pour les systèmes embarqués, on a laissé tomber le
C. Après une étude sérieuse des problèmes que ça pouvait poser.
Résultats : les tableaux utilisés pour les fonctions virtuelles ne sont
pas pénalisants par rapport aux avantages que ça apporte (c'est peut-
être la légende la plus répandue sur le sujet). Même le boss du
firmware, qui disait que "ça faisait juste des indirections en plus" a
dû se rendre à l'évidence devant le code généré (on crosse-compile avec
le gnu).
Le truc vraiment pénalisant, ce sont les exceptions. Elles sont
disablées pour le firmware, mais on les utilise pour les softs win32 et
unix.
Il est difficile d'expliquer ça par mail. J'ai constaté que quand on
explique l'OO aux gens qui viennent du procédural, il faut le temps
pour que les principes fassent leur chemin. On comprend par palier
quels sont les avantages que ça peut apporter. Je n'ai encore
rencontré personne qui perçoive directement "comment ça marche". Ca ne
vient qu'avec la pratique, et toute la théorie du monde n'y change rien.
J'ai d'ailleurs suivi le même parcours...
Ajoutons à ça que les profs de C++ dans les écoles donnent leurs cours
en expliquant que le C++ est un superset du C (mais bon, quels sont les
profs qui écrivent de vrais programmes tels qu'on en écrit dans
l'industrie ?).
Le C++ montre toute sa force dans le polymorphisme, et l'abstraction
dans l'approche des problèmes, ce qui fait que le soft qu'on écrit est,
non pas réutilisable comme le disent beaucoup, mais réutilisé.
Bon, sur ces paroles mémorables, je redémarre mon compilo, il y a un
observer pattern qui m'attend ;-)
My two cents,
Michel
---
C-3PO: We seem to be made to suffer. It's our lot in life.
- Star Wars -
---------
This message was send by Majordomo 1.94.3. Please repport problems to
manu@rtfm.be. If you want to be deleted from the list, send a mail to
majordomo@rtfm.be with "unsubscribe linux-team" in the body.