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

3 réponses

1 2
Avatar
Luc Hermitte
Gabriel Dos Reis wrote in
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 ?


j'aurais dû dire de la "sucrette syntaxique" ? ou alors deux sucres ;)
Je voulais juste dire que la différence était plus flagrante au niveau du
code que du design (si on compare à la redéfinition).

--
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>

Avatar
kanze
Gabriel Dos Reis wrote in message
news:...
writes:

| 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.

cette définition exclut les fonctions templates de C++.


Ce n'était pas mon intention. Il me semble évident, par exemple, que
quelque chose comme std::find est une fonction polymorphique -- ou
plutôt, qu'il dépend du polymorphisme des opérateurs sur les itérateurs
et de la fonction de comparison.

Voir les travaux de Stracher, Cardelli & Wegner.


On cherchait une définition simple... (Mais au fond, peut-être il n'y en
a pas.)

--
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
Gabriel Dos Reis
writes:

| (Mais au fond, peut-être il n'y en a pas.)

in fine, c'est ce que je voulais dire. Enfin, pour une définition
appropriée de « simple ».

Inclure les fonctions templates demande un autre point de vue, mais
alors on ne fait plus « simple », à part dire que polymophisme c'est
le fait qu'un nom désigne une collection d'entités et dont la
signification -- en tant qu'entité de la collection -- dépend du
contexte. Mais alors, je suis certain que
(1) soit ce n'est pas simple;
(2) soit j'ai exclu quelque chose qu'on peut raisonnablement
qualifier de polymorphe.

-- Gaby
1 2