Partage
  • Partager sur Facebook
  • Partager sur Twitter

Différentes définitions please ^^

8 juin 2007 à 15:13:10

Yop all,

Voila j'aurais voulu connaitre la différentre entre le polymorphisme, la surcharge, la redéfinition et l'invocation de méthode.

Merci.


PS: me sortez pas le dictionnaire j'ai regardé, mais niveau programmation j'ai pas tout compris donc si vous connaissez clairement, je suis preneur :)
  • Partager sur Facebook
  • Partager sur Twitter
8 juin 2007 à 18:55:39

Salut.

La surcharge c'est de créer deux fonctions dans le même espace qui ont le même nom mais qui se différencies par les paramètres

int fonction();
int fonction( int un_nombre );
int fonction( string une_chaine );


la redéfinition c'est probablement la même chose, mais lorsque ton compilateur te parle de redéfinition, c'est que tu as probablement une différence entre la déclaration et la définition d'une fonction.


l'invocation de méthode? je ne sais pas

le Polymorphisme est une utilisation avancée de l'héritage. Mais c'est trop compliqué pour l'expliquer correctement à froid comme ça.

  • Partager sur Facebook
  • Partager sur Twitter
9 juin 2007 à 0:01:07

Invoquer une méthode c'est faire un appel tout simplement.

La redéfinition, dans le cas d'une erreur donnée par le compilateur, c'est quand tu donnes le même nom à deux variables différentes. Sinon, une sous-classe peut "redéfinir" une méthode de sa super-classe en déclarant et définissant une méthode de même nom avec un comportement différent.

Pour finir, la surcharge c'est le fait de donner un même nom à plusieurs fonctions totalement différentes, il existe deux types de surcharge : la surcharge de paramètres et la surcharge polymorphique. Les deux sont présentes en C++.
La surcharge de paramètres, simplement appelée "surcharge", c'est le fait de faire plusieurs fonctions/méthodes ayant le même nom mais dont le type, le nombre et l'ordre des paramètres sont différents.

Quant à la surcharge polymorphique, ou simplement "polymorphisme", c'est le fait d'avoir des méthodes de même nom mais dans des portées différentes. C'est une capacité essentielle de la programmation-objet. En gros, deux objets peuvent répondre à une même méthode (c'est-à-dire même nom et paramètres) mais de façons différentes.
Prenons par exemple deux objets de classes respectives : Homme et Chien. Ces deux objets peuvent répondre à la méthode manger();

Voilà ce que ça donne :

georges.manger(steak);
rex.manger(steak);


Tu vois que c'est la même chose de l'extérieur, mais les deux objets ne feront pas la même chose.
Georges prendra une fourchette, un couteau, de la moutarde et coupera le steak pour emmener chaque bout jusqu'à sa bouche.
Rex, lui, mangera directement la viande avec les dents sans y toucher avec ses pattes.

Donc, une même "action" qui est "manger" mais deux façons de faire, c'est ça le polymorphisme. De même, le polymorphisme peut fonctionner entre super-classe/sous-classe grâce à la redéfinition. Mais au final il s'agit juste de faire en sorte que plusieurs objets puissent répondre à leurs façons à des messages équivalents.
  • Partager sur Facebook
  • Partager sur Twitter
9 juin 2007 à 0:09:38

La surcharge est une des 2 formes de polymorphisme ad'hoc -- l'autre correspondant aux convertions implicites. L'explication de MatteX est bonne. Et ce n'est que ça.

Le polymorphisme, selon la taxinomie de Lucas Cardelli (?) se déclime en 4 formes. 2 pour le polymorphisme ad'hoc. Et 2 pour le polymorphisme universel :
- le polymorhisme paramétrique (en C++, cela correspond à la généricité apportée par les templates)
- le polymorphisme d'inclusion, en schématisant : celui qui fait qu'un élément d'un sous-type va pouvoir être utilisé en place d'un élement du type parent. Le polymorphisme d'inclusion est généralement abusivement appelé "polymorphisme" (tout court) dans un contexte OO.

La redéfinition (overriding en anglais) correspond à l'action de supplanter la définition d'une fonction dans un type enfant. Ce sera la nouvelle définition de la fonction qui sera appellée quand on manipulera effectivement une donnée fille, même si officiellement elle est du type parent.
En C++, on ne peut redéfinir que les fonctions virtuelles.

Plus d'infos dans les archives de fclc++, de developpez, sur wikipédia, etc.
  • Partager sur Facebook
  • Partager sur Twitter
C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
9 juin 2007 à 11:50:46

Oki oki, ca s'eclaire un ptit peu mieux, merci :)
  • Partager sur Facebook
  • Partager sur Twitter