Adorons Jésus-Eucharistie! | Accueil >> Varia >> Génie logiciel
Vous avez sûrement entendu la blague de l'étudiant africain qui essaie de se faire une tasse de thé à la cafétéria de l'université Laval. Il commence par déchirer son sac de thé pour en verser le contenu dans l'eau bouillante. «Non! Non!» lui disent ses voisins, «Il faut mettre le sac dans l'eau sans l'ouvrir!». Alors l'étudiant rince sa tasse, remet de l'eau, un sac de thé, mais aussi un sac de sucre, en faisant bien attention de ne pas les ouvrir!
Parfois, en voyant les programmeurs C++ faire dériver toutes leurs classes de la classe de base CObject, on a l'impression de voir un étudiant africain mettre un sac de sucre dans son thé sans l'ouvrir. Voici quelques raisons:
Une classe «objet», c'est un rond carré. Un «objet» en C++, c'est une instance d'une classe. Par exemple, «Fido», «Rex» et «Lassie» sont des objets, en d'autre mots des instances de la classe «CChien». Un «CObject» (par convention, on place souvent un «C» devant les noms de classe) est une contradiction dans les termes.
Le C++ n'est pas du SmallTalk. L'idée de tout faire dériver de la même classe de base vient du SmallTalk. Peu de gens se rendent compte jusqu'à quel point le langage orienté-objet SmallTalk a eu (et continue d'avoir) une influence profonde sur le monde de l'informatique, et peu de gens comprennent jusqu'à quel point le C++ est différent du SmallTalk. Mélanger ces deux langages doesn't give good results.
L'héritage multiple est incompatible avec une classe de base unique. Bien sûr, on peut quand même se servir de l'héritage multiple lorsque les deux bases de notre classe dérivée héritent elles-mêmes de la même classe, mais cela entraîne toutes sortes de problèmes inutiles. En C++, les classes «ADT» (qui n'ont pas de constructeur ou de données membres, et dont toutes les fonctions sont virtuelles pures) offrent au programmeur un outil puissant. Par exemple, on peut avoir un «Piano», qui hérite de «Instrument», mais aussi de «Déménageable» (pour que les classes de déménagement sachent comment le transporter), et aussi de «Évaluable» (pour qu'on puisse le faire assurer).
L'inventeur du C++ le déconseille fortement. Laissons parler Bjarne Stroustrup: «Qu'y a-t-il de commun entre un sourire, le pilote de périphérique de mon CD-ROM, un enregistrement du Don Juan de Richard Strauss, une ligne de texte, un satellite, mon dossier médical et une horloge? Mettre tout cela dans la même hiérarchie alors que leur seul point commun est d'être programmé (ce sont des «objets») ne nous donne pas grand chose et peut mêler les gens. Tordre la réalité pour la mettre dans une seule hiérarchie peut introduire des similitudes artificielles, et masquer de réelles ressemblances. On devrait utiliser l'héritage seulement si l'analyse dévoile des similitudes conceptuelles, ou si la programmation découvre des ressemblances utiles dans les manières d'implanter les concepts.»
Personnellement, je trouve que l'avant-dernier argument est le plus fort.
© class Stefan Jetchick : public CProgrammeur, public CPhilosophe, 21 août 1997.
Adorons Jésus-Eucharistie! | Accueil >> Varia >> Génie logiciel