OVH Cloud OVH Cloud

Polymorphisme : est-ce juste ?

13 réponses
Avatar
Zouplaz
Bonjour, j'ai trouvé cette définition du polymorphisme sur le web et ça
correspond exactement à l'idée que je m'en faisais :

"Le polymorphisme est le fait qu'un message identique envoye à
deux objets de classes differentes mais heritant d'une meme
superclasse puisse entrainer un traitement different de ce
message."

Dans mon cas, lors d'un projet il y a quelques mois j'avais un truc du
genre (ici version ultra simplifiée) :

classe object3D
classe staticObject dérivant de object3D
classe animatedObject dérivant de staticObject
classe character dérivant de object3D
classe player dérivant de character

dans object3D deux méthodes majeures étaient définies :
- update
- draw

et overloadées (surchargées) dans chaque classe dérivées.

ensuite, j'avais une classe scene dont un membre était un vector
d'object3D
Sauf que je créais des instances des classes dérivées et que je stockais
des pointeurs vers ces instances dans le vector en question.

Du coup, les méthodes update et draw appellée étaient correctes.

Ca semble bien correspondre à la définition ci-dessus et me semblait un
moyen très naturel de résoudre un certain nombre de problèmes (mais ce
n'est pas le propos).

Donc, je synthétise ma demande :
1) la définition ci-dessus est-elle juste ?
2) l'exemple que je fournis (le mien) est-il correct ?

Je dois rencontrer quelques profs de fac en vue de mon incarcération en
milieu technique, alors je voudrais pas bafouiller une énormité ;-)

Et pitié... Faites pas dans le détail !!!! Je sais qu'il y a ici des
intervenants très pointus sur le sujet... N'en faites pas trop hein !?

Merci

10 réponses

1 2
Avatar
Arnaud Debaene
Zouplaz wrote:
Bonjour, j'ai trouvé cette définition du polymorphisme sur le web et
ça correspond exactement à l'idée que je m'en faisais :
<snip>

Donc, je synthétise ma demande :
1) la définition ci-dessus est-elle juste ?
oui


2) l'exemple que je fournis (le mien) est-il correct ?
oui


Arnaud

Avatar
Gabriel Dos Reis
Luc Hermitte writes:

| La surcharge est un "sucre syntaxique" juste là pour simplifier la vie du
| développeur

vu comme cela, qu'est-ce qui n'est pas du sucre syntaxique ?

-- Gaby
Avatar
Alain Naigeon
"Gabriel Dos Reis" a écrit dans le message
news:
Luc Hermitte writes:

| La surcharge est un "sucre syntaxique" juste là pour simplifier la vie du
| développeur

vu comme cela, qu'est-ce qui n'est pas du sucre syntaxique ?

Dans un autre fil, il a bien été dit que C++ est un sucre
syntaxique de l'assembleur - j'exagère juste un peu ;-)

--

Français *==> "Musique renaissance" <==* English
midi - facsimiles - ligatures - mensuration
http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/
Alain Naigeon - - Strasbourg, France
Avatar
Christophe Lephay
"Gabriel Dos Reis" a écrit dans le message
de news:

Luc Hermitte writes:

La surcharge est un "sucre syntaxique" juste là pour simplifier la vie du
développeur


vu comme cela, qu'est-ce qui n'est pas du sucre syntaxique ?


Peut-être ce qui permet des changements au niveau du design ?

Chris


Avatar
Samuel Krempp
le Mardi 9 Septembre 2003 02:10, écrivit :

vu comme cela, qu'est-ce qui n'est pas du sucre syntaxique ?


Peut-être ce qui permet des changements au niveau du design ?


faut voir que le mécanisme de résolution de surcharge fournit qd même des
possibilités, et permet bien des changements en matière de design..


--
Sam


Avatar
Christophe Lephay
"Gabriel Dos Reis" a écrit dans le message de
news:
mais le design, c'est du sucre syntaxique sur le programme :-/


Avec un peu de sel sémantique, qui plus est ;)

Chris

Avatar
Gabriel Dos Reis
"Christophe Lephay" writes:

| "Gabriel Dos Reis" a écrit dans le message de
| news:
| > mais le design, c'est du sucre syntaxique sur le programme :-/
|
| Avec un peu de sel sémantique, qui plus est ;)

le programe a une sémantique, c'est le design qui serait un sucre
syntaxique sur cette sémantique.

-- Gaby
Avatar
Zouplaz
Luc Hermitte - :

Dans ton exemple, je suis quasi-persu‚d‚ que tu parles en fait de la
_red‚finition_ (overriding) (et non pas de la surcharge!) de m‚thodes
d‚finies dans une classe mŠre.
Ici, cela concerne directement le design de ton application car tu dis
qu'il est possible que l… o— un Objet3D est attendu, tu fourniras
peut-ˆtre bien un StaticObject dont la m‚thode Draw() aura ‚t‚
sp‚cialis‚e. [1]


Tu as tout à fait raison ! Il s'agit bien de redéfinition et non pas de
surcharge !!

Et dire que c'est du "syntaxic sugar" était déjà affirmé dans les plus
vieilles faq que j'ai pu lire il y a 10 ans.

Merci pour la précision

Avatar
kanze
Zouplaz wrote in message
news:...
Bonjour, j'ai trouvé cette définition du polymorphisme sur le web et
ça correspond exactement à l'idée que je m'en faisais :

"Le polymorphisme est le fait qu'un message identique envoye à deux
objets de classes differentes mais heritant d'une meme superclasse
puisse entrainer un traitement different de ce message."


Elle a l'air un peu confus. D'abord, il parle de « message », qui fait
penser à Smalltalk. Mais en Smalltalk, pas besoin d'avoir une classe de
base en commun ; en Smalltalk, il n'y a pas de vérificatin de type
statique, et lors de la reception d'un message, on ne vérifie que
l'existance d'un méthode pour traiter ce message.

En général, je crois qu'une bonne définition de polymorphisme doit être
indépendante du langage, et même du fait que le typage soit statique (à
la C++) ou non (à la Smalltalk). Or, l'héritage n'y joue un rôle que
dans le cas du typage statique, où on hérite surtout des interfaces.

En fait, le polymorphisme, c'est simplement le fait de pouvoir envoyer
un message identique, ou appeler la même fonction (la terminologie
dépend du langage), sur des objets dont le type varie, dont on ne
connaît pas forcement le type, et dont les types ont des implémentations
différentes de la fonction. Le polymorphisme peuvent se résoudre lors de
la compilation, lors de l'édition de liens, ou lors de l'exécution --
lors qu'il se résoud lors de l'exécution, on parle souvent de la
programmation orientée objet.

Dans mon cas, lors d'un projet il y a quelques mois j'avais un truc du
genre (ici version ultra simplifiée) :

classe object3D
classe staticObject dérivant de object3D
classe animatedObject dérivant de staticObject
classe character dérivant de object3D
classe player dérivant de character

dans object3D deux méthodes majeures étaient définies :
- update
- draw

et overloadées (surchargées) dans chaque classe dérivées.


Pas overloaded/surchargées. Overridden/rédéfinies

Sinon, c'est l'exemple classique du polymorphisme dynamique, c-à-d
résolution lors de l'exécution. La nécessité d'une classe Object3D, dans
ce cas, est due au typage statique de C++ ; dans Smalltalk, si les
classes de base ne comportaient pas d'implémentation dont tu voulais
héritée, elle ne serait pas nécessaire.

ensuite, j'avais une classe scene dont un membre était un vector
d'object3D Sauf que je créais des instances des classes dérivées et
que je stockais des pointeurs vers ces instances dans le vector en
question.

Du coup, les méthodes update et draw appellée étaient correctes.

Ca semble bien correspondre à la définition ci-dessus et me semblait
un moyen très naturel de résoudre un certain nombre de problèmes (mais
ce n'est pas le propos).

Donc, je synthétise ma demande :
1) la définition ci-dessus est-elle juste ?


Je la trouve un peu confu, mais elle va dans le bon sens.

2) l'exemple que je fournis (le mien) est-il correct ?


Tout à fait. C'est même l'exemple type.

Je dois rencontrer quelques profs de fac en vue de mon incarcération
en milieu technique, alors je voudrais pas bafouiller une énormité ;-)

Et pitié... Faites pas dans le détail !!!! Je sais qu'il y a ici des
intervenants très pointus sur le sujet... N'en faites pas trop hein !?


Si on veut ignorer les détails, je dirais simplement :
- que la définition donnée ne concerne réelement que le polymorphisme
dynamique, lors de l'exécution, et qu'il en existe d'autres, et
- que la nécessité d'héritage dans le polymorphisme, c'est un artifact
du typage statique.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16

Avatar
Luc Hermitte
drkm wrote in news::

Je t'épargne les détails, au pire on a des références sous le coude.


On veut des noms !


cf la réponse de Gabriel à James. Il y a un article dispo en ligne qui
donne des définitions pour le polymorphisme -- google doit pouvoir
retrouver l'adresse que j'ai encore paumée.

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


1 2