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.

16voto

niki4ko Points 97

Je comprends vraiment pourquoi vous posez cette question. Je comprends le polymorphisme, mais lors d'un entretien d'embauche, on m'a demandé de donner une définition courte et claire du polymorphisme. Comme je ne pouvais pas donner une définition claire et courte, j'ai commencé à y réfléchir et voici ma définition :

La capacité des objets d'un même type à avoir une seule et même interface, mais une implémentation différente de cette interface.

12voto

Bevan Points 20976

Définition :

Le polymorphisme est un mot à 10 dollars pour une idée à 1 dollar, à savoir que lorsque je demande que quelque chose soit fait, je ne me soucie pas de la manière dont cela est réalisé tant que le résultat final est approprié. Tant que le service est fourni correctement, je je m'en fiche sur le mise en œuvre .

Discussion

Bien qu'il soit couramment utilisé dans le développement de logiciels, notamment dans les systèmes développés selon les principes de l'orientation objet, le polymorphisme est fondamentalement un principe du monde réel et doit être défini en termes du monde réel, et non en termes technologiques.

Exemples

Lorsque je veux passer un appel téléphonique, je décroche un téléphone, je compose un numéro et je parle à la personne à l'autre bout du fil. Je ne me soucie pas de savoir qui a fabriqué le téléphone, quelle technologie il utilise, s'il est câblé, sans fil, mobile ou VOIP, ou s'il est sous garantie.

Lorsque je veux imprimer un document, je l'imprime. Je ne me soucie pas du langage de mise en œuvre, de la marque de l'imprimante, du style de connexion, du choix du consommable ou de la qualité du papier.

10voto

Doug Knesek Points 1578

Implémentations multiples de la même interface.

Exemple : De nombreux modèles de téléphone mettent en œuvre l'interface du clavier numérique.

8voto

JoshBerke Points 34238

Le polymorphisme est une stratégie orientée objet utilisée lors de la conception de modèles d'objets, pour aider à simplifier le code. À la base, le polymorphisme est la capacité de définir deux objets similaires mais différents, et de traiter ces deux objets comme s'ils étaient identiques.

Ok c'est dur....

7voto

Nicolas Rinaudo Points 1947

Je pensais juste ajouter ma propre interprétation de ce qu'est le polymorphisme : De manière très générique, le polymorphisme est l'acte de fournir un interface unique aux entités de différents types .

C'est plutôt générique, mais c'est le seul moyen auquel je pense pour envelopper les trois types de polymorphismes que je connais : ad hoc , paramétrique y sous-type . J'entrerai dans les détails plus loin, et j'ai classé les types de polymorphisme par nom, par ordre alphabétique. Celui qui vous intéresse est très probablement polymorphisme de sous-type qui est le dernier.

Polymorphisme ad hoc

Polymorphisme ad hoc est le fait de fournir plusieurs implémentations de la même méthode pour différents types de paramètres. Sur le site OOP il est généralement connu sous le nom de surcharge des méthodes . Par exemple :

public String format(int a) {
    return String.format("%2d", a);
}

public String format(Date a) {
    return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(a);
}

Les deux sites format Les méthodes partagent un interface unique mais ils fonctionnent sur des entités de différents types .

Polymorphisme paramétrique

Polymorphisme paramétrique est le fait de faire fonctionner une classe (ou une méthode) sur un type qui est lui-même un paramètre de la classe (ou de la méthode). On parle souvent de génériques .

Par exemple, la fonction List[T] attend un paramètre T au moment de l'instanciation, et ce paramètre définit le type de l'objet résultant.

Note pour les puristes que j'ignore volontairement types bruts car je pense qu'ils ne feraient que brouiller les pistes dans ce contexte.

List[String] y List[Date] partager un interface unique mais travaillent sur (et sont) différents types .

Polymorphisme du sous-type

Polymorphisme du sous-type est probablement ce que vous vouliez dire initialement dans votre question : C'est le fait de fournir une interface unique à plusieurs implémentations du même type.

Pour utiliser l'exemple habituel : Animal fournit un contrat que toutes les implémentations doivent respecter. Dog est un Animal et, en tant que tel, il prend en charge toutes les opérations qui Animal déclare. Selon le Principe de substitution de Liskov ce qui vous permet d'utiliser une instance de Dog où une instance de Animal est attendu (mais pas l'inverse).

Si Cat y Dog sont toutes deux des sous-classes de Animal puis ils partagent un interface unique mais sont en fait différents types .

Je m'éloigne un peu du sujet ici, mais le polymorphisme de sous-type est (je pense) le seul qui permette à l Remplacement de le fait de redéfinir le comportement d'une méthode définie par une classe parente. On le confond souvent avec surcharge qui, comme nous l'avons vu précédemment, est un type de polymorphisme et ne nécessite pas de sous-classement (ni de classes, d'ailleurs).

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