86 votes

Polymorphisme - Définir en deux phrases seulement

J'ai examiné d'autres définitions et explications, mais aucune ne me satisfait. Je veux voir si quelqu'un peut définir le polymorphisme en deux phrases maximum, sans utiliser de code ou d'exemples. Je ne veux pas entendre "Vous avez donc un ouvreur de personne/voiture/canette..." ou comment le mot est dérivé (personne n'est impressionné que vous sachiez ce que poly et morph signifient). Si vous avez une très bonne compréhension de ce qu'est le polymorphisme et une bonne maîtrise de l'anglais, vous devriez être en mesure de répondre à cette question par une définition courte, bien que dense. Si votre définition définit précisément le polymorphisme, mais qu'elle est si dense qu'elle nécessite quelques relectures, alors c'est exactement ce que je recherche.

Pourquoi seulement deux phrases ? Parce qu'une définition est courte et intelligente. Une explication est longue et contient des exemples et du code. Regardez ici pour des explications (les réponses sur ces pages ne sont pas satisfaisantes pour ma question) :

Polymorphisme vs surcharge vs surcharge
Essayez de décrire le polymorphisme aussi simplement que possible.

Pourquoi est-ce que je pose cette question ? Parce qu'on m'a posé la même question et que j'ai été incapable de trouver une définition satisfaisante (selon mes critères, qui sont assez élevés). Je veux voir si l'un des grands esprits de ce site peut y parvenir.

Si vous ne pouvez vraiment pas respecter l'exigence des deux phrases (c'est un sujet difficile à définir), il n'y a pas de problème si vous dépassez cette limite. L'idée est d'avoir une définition qui définit réellement ce qu'est le polymorphisme et qui n'explique pas ce qu'il fait ou comment l'utiliser (vous voyez la différence ?).

0 votes

Un nom, une mise en œuvre multiple.

2 votes

On m'a posé cette question lors d'un entretien d'embauche. J'avais l'impression que la poser lors d'un entretien d'embauche était un acte de snobisme élitiste, le genre de chose qu'un employé de Google poserait avec suffisance en supposant que personne ne pourrait y répondre efficacement. Si vous n'avez pas obtenu le poste parce que vous ne pouviez pas y répondre, il est probablement préférable que vous travailliez pour des personnes qui s'intéressent davantage à ce que vous pouvez faire qu'à qui vous pouvez être plus malin.

0 votes

Le polymorphisme est un concept très important à comprendre dans le développement. Je recommande vivement de comprendre au moins sa valeur, sinon sa définition formelle. Je suggère d'être capable d'expliquer au moins le fonctionnement et la valeur du modèle Stratégie.

107voto

Jon Skeet Points 692016

Le polymorphisme permet l'expression d'une sorte de contrat, avec potentiellement de nombreux types mettant en œuvre ce contrat (que ce soit par le biais de l'héritage de classe ou non) de différentes manières, chacun en fonction de son propre objectif. Code en utilisant ce contrat ne devrait pas(*) avoir à se soucier de l'implémentation impliquée, mais seulement du fait que le contrat sera respecté.

(*) Dans le cas idéal, en tout cas - évidemment, très souvent, le code appelant a choisi l'implémentation appropriée très délibérément !

1 votes

Mark, avez-vous accepté cette réponse à un moment donné, puis l'avez-vous rejetée ? J'essaie de résoudre ce qui ressemble à un bug dans le système de réputation - cette réponse m'a donné un net de -15 rep pour aujourd'hui, assez étrangement.

0 votes

Même chose ici, Jon - j'ai maintenant 2 réponses acceptées avec -15 rep. Ce n'est pas que je m'en soucie, mais c'est intriguant.

0 votes

Ocdecio : Peut-être que vous pourriez voter pour stackoverflow.uservoice.com/pages/general/suggestions/ ?

73voto

Lasse V. Karlsen Points 148037

Les fruits peuvent être mangés, en règle générale, mais les différents types de fruits sont consommés de différentes manières. Une pomme, qui est un fruit, peut être mangée (parce que c'est un fruit). Une banane peut également être mangée (parce que c'est aussi un fruit), mais d'une manière différente de la pomme. Vous la pelez d'abord.

En tout cas, moi, je le sais, mais je suis bizarre dans certains domaines, alors qu'est-ce que j'en sais.

Cela illustre l'héritage (les fruits peuvent être mangés), le polymorphisme (quelque chose qui mange des fruits peut manger tous les types de fruits) et l'encapsulation (une banane a une peau).

Sérieusement, l'héritage d'objets, le polymorphisme, l'encapsulation, les choses virtuelles, les choses abstraites, les choses privées, les choses publiques, ce sont tous des concepts difficiles. Si quelqu'un veut absolument avoir une définition en deux phrases de ces concepts, veuillez marquer la question comme une variante de code-golf, parce que deux phrases de ce type devront être si laconiques que si vous ne savez pas déjà ce que c'est, vous n'en apprendrez pas assez pour savoir ce que vous devez apprendre.

0 votes

Lassevk : "à moins que vous ne sachiez déjà ce que c'est, vous n'en apprendrez pas assez sur le sujet pour savoir ce dont vous avez besoin pour en apprendre davantage" << Pour clarifier, c'est ce que j'attends. Je cherche une définition qui peut demander une certaine réflexion pour être comprise. Pas une qui serait utilisée pour enseigner à un débutant.

2 votes

J'avais compris, j'ai juste posté une réponse quelque peu humoristique (pour moi en tout cas) :) Le polymorphisme et la POO sont l'un de ces grands murs, où si vous tracez la courbe d'apprentissage, vous frappez juste un grand mur et soit vous rampez dessus, soit vous ne le faites pas. Si vous le faites, alors vous avez généralement une grande expérience AHA !

8 votes

La ciguë est aussi un fruit ! Tu peux la manger mais seulement une fois !

48voto

Eran Galperin Points 49594

Le polymorphisme consiste à déclarer une interface uniforme qui ne tient pas compte des types, laissant les détails de mise en œuvre aux types concrets qui mettent en œuvre l'interface.

0 votes

C'est incroyablement succinct et je pense que ça colle parfaitement.

21voto

En fait, il existe de multiples formes de polymorphisme et il y a une certaine controverse à ce sujet ; vous pouvez même voir des professeurs de CS qui ne peuvent pas le définir correctement. Je connais trois types de polymorphisme :

  • polymorphisme ad-hoc (ressemble à un canard et marche comme un canard => est un canard). On peut le voir dans Haskell et Python par exemple.

  • le polymorphisme générique (où un type est une instance d'un certain type générique). On peut le voir en C++ par exemple (vector of int et vector of string ont tous deux une fonction membre size).

  • le polymorphisme de sous-type (où un type hérite d'un autre type). On le retrouve dans la plupart des langages de programmation OO (par exemple, le triangle est une forme).

21voto

Otávio Décio Points 44200

Wikipédia : Le polymorphisme est une caractéristique du langage de programmation qui permet de traiter des valeurs de différents types de données à l'aide d'une interface uniforme. C'est assez simple pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X