tu vois tout de suite que c'est un clown qui n'a rien compris à la POO et au design de langage. Et Eckel aussi puisqu'il ne lui fait même pas la remarque. Tu devrais leur mailer pour leur dire qu'ils n'ont rien compris.
> L'échantillon de programme C++ modifié en passant des pointeurs montre très bien le comportement que j'exècre
Oui, en passant des pointeurs, ou des références. Ça s'appelle le polymorphisme (ou plutôt le manque de, dans le cas présent, si on ne met pas 'virtual'). Note aussi que si tu changes affiche() pour qu'elle prenne un objet de type B, c'est bien la méthode B qui est appelée, qu'elle soit virtuelle ou non, ce qui démontre bien que 'virtual' n'a pas la fonction que tu lui prètes. Maintenant pour comprendre la nécéssité de l'existence de ce mot clé tu peux un peu te documenter sur le modèle objet de C++, savoir que la compatibilité avec C était un principe de base (et par conséquent qu'on ne pouvait pas ajouter systématiquement une table virtuelle à un objet), mais je te sens pas vraiment bien parti pour essayer d'aller au dela de ce que tu crois savoir.
> Si l'héritage n'est accessoire et "pour débutant" que pour les programmeurs C++, c'est justement parce qu'il est si problématique avec ce langage.
Alors faut prevenir les gens qui ont fait Java aussi, même dans la lib Java il n'y a quasiment jamais plus de 3 niveaux d'héritage (2 si on tient compte du fait que java.lang.Object est une base obligatoire). Pareil dans la lib de Ruby.
> la pwlib a un bel arbre généalogique de classes (qui merdouille dès qu'on veut y ajouter quelque chose, certes, mais ça c'est l'effet C++)
Non, c'est l'effet du Fragile Base Class Problem, qui existe dans n'importe quel langage OO et qui est la première conséquence de l'abus d'héritage. Tiens va voir là :
In this paper we study the fragile base class problem. This problem occurs in open object-oriented systems employing code inheritance as an implementation reuse mechanism. System developers unaware of extensions to the system developed by its users may produce a seemingly acceptable revision of a base class which may damage its extensions. The fragile base class problem becomes apparent during maintenance of open object-oriented systems, but requires consideration during design.
Note bien qu'il dit "object-oriented systems", et pas "C++", et y a pas un poil de C++ dans le papier.
[^] # Re: Langage objet...
Posté par Guillaume Laurent . En réponse à la dépêche Les nouveautés de Qt 4. Évalué à 1.
C'est vrai que quand tu lis une interview d'Anders Hejlsberg (par Bruce Eckel en plus)
http://www.artima.com/intv/csdes.h(...)
tu vois tout de suite que c'est un clown qui n'a rien compris à la POO et au design de langage. Et Eckel aussi puisqu'il ne lui fait même pas la remarque. Tu devrais leur mailer pour leur dire qu'ils n'ont rien compris.
> L'échantillon de programme C++ modifié en passant des pointeurs montre très bien le comportement que j'exècre
Oui, en passant des pointeurs, ou des références. Ça s'appelle le polymorphisme (ou plutôt le manque de, dans le cas présent, si on ne met pas 'virtual'). Note aussi que si tu changes affiche() pour qu'elle prenne un objet de type B, c'est bien la méthode B qui est appelée, qu'elle soit virtuelle ou non, ce qui démontre bien que 'virtual' n'a pas la fonction que tu lui prètes. Maintenant pour comprendre la nécéssité de l'existence de ce mot clé tu peux un peu te documenter sur le modèle objet de C++, savoir que la compatibilité avec C était un principe de base (et par conséquent qu'on ne pouvait pas ajouter systématiquement une table virtuelle à un objet), mais je te sens pas vraiment bien parti pour essayer d'aller au dela de ce que tu crois savoir.
> Si l'héritage n'est accessoire et "pour débutant" que pour les programmeurs C++, c'est justement parce qu'il est si problématique avec ce langage.
Alors faut prevenir les gens qui ont fait Java aussi, même dans la lib Java il n'y a quasiment jamais plus de 3 niveaux d'héritage (2 si on tient compte du fait que java.lang.Object est une base obligatoire). Pareil dans la lib de Ruby.
> la pwlib a un bel arbre généalogique de classes (qui merdouille dès qu'on veut y ajouter quelque chose, certes, mais ça c'est l'effet C++)
Non, c'est l'effet du Fragile Base Class Problem, qui existe dans n'importe quel langage OO et qui est la première conséquence de l'abus d'héritage. Tiens va voir là :
http://www.cas.mcmaster.ca/~emil/publications/fragile/(...)
In this paper we study the fragile base class problem. This problem occurs in open object-oriented systems employing code inheritance as an implementation reuse mechanism. System developers unaware of extensions to the system developed by its users may produce a seemingly acceptable revision of a base class which may damage its extensions. The fragile base class problem becomes apparent during maintenance of open object-oriented systems, but requires consideration during design.
Note bien qu'il dit "object-oriented systems", et pas "C++", et y a pas un poil de C++ dans le papier.