On Jeudi 10 Février 2005 22:46, Miguel Moquillon wrote:
> > Quel est le problème de C++ avec l'héritage multiple ?
>
> Déjà, C++ gère plusieurs types d'héritages :
> public, private, protected et même virtual (public, protected et
> private), pour reprendre les expréssions C++ : super, non ?
Ah, oui, j'avais oublié ce bordel ! Effectivement, maintenant je me
souviens que je n'ai jamais réussi à me mettre dans la tête comment se
gérait l'héritage, suivant que tu le déclare public, privé ou protégé, et
selon si la variable est elle-meêm publique, privée ou protégée ! Ca fait
une bonne dizaine de cas, non ?
> Quant tu as des caractéristiques qui malheureusement ont même nom entre
> deux classes, c'est le bordel et tu as intérêt à utiliser un héritage
> 'virtual' en ordonnant bien la déclaraction des classes héritées ... je
> te passe d'autres contorsions pour arriver à quelque chose de potables
> si on est pas très exigeant, et des contorsions pas du tout souple.
Ah, je ne sais pas comment Python s'en sort avec 2 attributs du même nom.
Pas encore expérimenté.
> > Et le plus de
> > Eiffel ? Je crois d'ailleurs qu'Eiffel est une référence en matière de
> > propreté de langage objet, non ?
>
> Eiffel est en effet réputée pour la clareté de sa syntaxe, sa rigueur et
> la robustesse des applis qu'il permet de construire. A côté de ceci, par
> le support des classes génériques et de la covariance (des paramètres et
> des types de retour) il apporte une certaine souplesse dans l'écriture
> de code que je n'ai encore jamais rencontré dans les langages à typage
> statique et fort.
> Quant à son héritage, tu peux lors de sa déclaration, renommer des
> caractéristiques héritées ou sélectionner celles qui tu désires dans ta
> classe fille. Exemple :
> [...]
C'est effectivement pratique. J'imagine qu'on doit pouvoir faire ce genre
de chose avec python, vu qu'il est possible de modifier dynamiquement les
attributs d'un objet (et donc d'une classe).
D'ailleurs, ce mécanisme de modification dynamique est super pratique pour
patcher des bugs ou des manques en attendant une correction. Je viens
justement d'en faire l'expérience. Une personne sur la liste Python m'a
suggéré un bout de code pour modifier le comportement de l'opérateur de
comparaison de la classe Vector, qui n'était pas capable de comparer avec
None. Le code ressemble à ça :
# Patch
from Scientific.Geometry import Vector
def my_cmp(vec1, vec2):
# nouvelle comparaison qui marche
Vector.__cmp__ = my_cmp
Voila. Il a redéfini la méthode __cmp__ (surcharge d'opérateur) en
substituant my_cmp. pratique, non ? Bon, faut quand même que j'envoie le
bout de code au dévelopeur de Scientific...
--
Frédéric
http://www.gbiloba.org