J'ai regardé d'autres définitions et explications et aucune d'entre elles ne me satisfait. Je veux voir si quelqu'un peut définir le polymorphisme en au plus deux phrases sans utiliser de code ou d'exemples. Je ne veux pas entendre «donc vous avez une personne / une voiture / un ouvre-boîte ...» ou comment le mot est dérivé (personne n'est impressionné que vous sachiez ce que signifient poly et morph). 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 dans une définition courte, quoique dense. Si votre définition définit avec précision le polymorphisme mais est si dense qu'elle nécessite quelques lectures, 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 (la réponse sur ces pages n'est pas satisfaisante pour ma question):
Polymorphisme vs écrasement vs surcharge
Essayez de décrire le polymorphisme aussi facilement que possible
Pourquoi est-ce que je pose cette question? Parce qu'on m'a posé la même question et que j'ai constaté que j'étais 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 le faire.
Si vous ne pouvez vraiment pas faire l'exigence de deux phrases (c'est un sujet difficile à définir), alors c'est bien si vous y allez. L'idée est d'avoir une définition qui définit réellement ce qu'est le polymorphisme et n'explique pas ce qu'il fait ou comment l'utiliser (faire la différence?).
la source
Réponses:
Le polymorphisme permet l'expression d'une sorte de contrat, avec potentiellement de nombreux types implémentant ce contrat (que ce soit par héritage de classe ou non) de différentes manières, chacune selon son propre objectif. Le code utilisant ce contrat ne devrait pas (*) avoir à se soucier de l'implémentation impliquée, seulement que le contrat sera respecté.
(*) Dans le cas idéal, en tout cas - évidemment, bien souvent, le code appelant a choisi très délibérément l'implémentation appropriée!
la source
Les fruits peuvent être consommés, en règle générale, mais différents types de fruits sont consommés de différentes manières. Une pomme, qui est un fruit, peut être mangée (car c'est un fruit). Une banane peut aussi être consommée (car c'est aussi un fruit), mais d'une manière différente d'une pomme. Vous l'épluchez d'abord.
Eh bien, au moins je le fais, mais je suis bizarre à certains égards alors que sais-je.
Cela illustre l'héritage (les fruits peuvent être consommé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 2 phrases de ceci, veuillez marquer la question comme une variante de code-golf, car deux de ces phrases devront être si concises qu'à moins que vous ne sachiez déjà ce que c'est, vous n'en saurez pas assez. pour savoir sur quoi vous devez en savoir plus.
la source
Le polymorphisme déclare une interface uniforme qui n'est pas sensible au type, laissant les détails d'implémentation aux types concrets qui implémentent l'interface.
la source
Wikipedia: Le polymorphisme est une fonctionnalité du langage de programmation qui permet de gérer les valeurs de différents types de données à l'aide d'une interface uniforme. Assez simple pour moi.
la source
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:
polymorphisme ad hoc (ressemble à un canard et marche comme un canard => est un canard). Peut être vu dans Haskell et Python par exemple.
polymorphisme générique (où un type est une instance d'un type générique). Peut être vu en C ++ par exemple (le vecteur de int et le vecteur de chaîne ont tous deux une taille de fonction membre).
polymorphisme de sous-type (où un type hérite d'un autre type). Peut être vu dans la plupart des langages de programmation OO (ie Triangle est une forme).
la source
Je comprends vraiment pourquoi vous posez cette question. Je comprends le polymorphisme, mais j'étais à un entretien d'embauche et on m'a demandé de donner une définition courte et claire du polymorphisme. Parce que je ne pouvais pas donner de définition claire et courte, j'ai commencé à y penser et voici ma définition:
La capacité des objets d'un type à avoir une seule et même interface, mais une implémentation différente de cette interface.
la source
Définition :
Le polymorphisme est un mot à 10 $ pour une idée à 1 $ - que lorsque je demande quelque chose à faire, je me fiche de la façon dont cela est réalisé tant que le résultat final est approprié. Tant que le service est fourni correctement, je me fiche de l' implémentation .
Discussion
Bien qu'il soit couramment utilisé dans le développement de logiciels, en particulier dans les systèmes développés selon des principes orientés objet, le polymorphisme est fondamentalement un principe du monde réel et devrait être défini en termes du monde réel, pas en termes technologiques.
Exemples
Lorsque je veux passer un appel téléphonique, je décroche un téléphone, compose un numéro et parle à la personne à l'autre bout du fil. Peu m'importe qui a fabriqué le téléphone, quelle technologie il utilise, qu'il soit filaire, sans fil, mobile ou VOIP, ou s'il est sous garantie.
Lorsque je veux imprimer un document, je l'imprime. Je me fiche du langage d'implémentation, de la marque d'imprimante, du style de connexion, du choix du consommable ou de la qualité du papier.
la source
Encapsulation
pour moiPlusieurs implémentations de la même interface.
Exemple: De nombreux modèles de téléphone implémentent l'interface du clavier numérique.
la source
Le polymorphisme est une stratégie orientée objet utilisée lors de la conception de modèles d'objet, pour aider à simplifier le code. Au cœur du polymorphisme se trouve la capacité de définir deux objets similaires mais différents, puis de traiter les deux objets comme s'ils étaient identiques.
Ok c'est difficile ...
la source
J'ai juste pensé 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 une interface unique à des entités de différents types .
C'est plutôt générique, mais c'est la seule façon dont je peux penser pour envelopper les trois types de polymorphismes que je connais: ad hoc , paramétrique et sous - type . J'irai plus en détail ci-dessous et j'ai trié les types de polymorphisme par nom, par ordre alphabétique. Celui qui vous intéresse est probablement le polymorphisme de sous-type , qui est le dernier.
Polymorphisme ad hoc
Le polymorphisme ad hoc consiste à fournir plusieurs implémentations de la même méthode pour différents types de paramètres. En POO , on parle généralement de surcharge de méthode . Par exemple:
Les deux
format
méthodes partagent une seule interface , mais elles fonctionnent sur des entités de types différents .Polymorphisme paramétrique
Le 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, Java
List[T]
attend un paramètreT
au moment de l'instanciation, et ce paramètre définit le type de l'objet résultant.Notez pour les puristes que j'ignore délibérément les types bruts car je pense qu'ils ne feraient que brouiller les eaux dans ce contexte.
List[String]
etList[Date]
partagez une seule interface , mais travaillez sur (et sont) différents types .Polymorphisme de sous-type
Le polymorphisme de sous-type est probablement ce que vous vouliez dire au départ dans votre question: c'est l'acte 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 unAnimal
, et en tant que tel prend en charge toutes les opérations quiAnimal
déclarent. Selon le principe de substitution de Liskov , cela vous permet d'utiliser une instanceDog
où une instance deAnimal
est attendue (mais pas l'inverse).Si
Cat
etDog
sont deux sous-classes deAnimal
, alors ils partagent une seule interface mais sont en fait de types différents .Je pars un peu dans une tangente ici, mais le polymorphisme de sous-type est (je pense) le seul qui permet de redéfinir : l'acte de redéfinir le comportement d'une méthode définie par une classe parente. Ceci est souvent confondu avec la surcharge qui, comme nous l'avons vu précédemment, est un type de polymorphisme et n'a en fait pas besoin de sous-classification (ni de classes, vraiment).
la source
Il semble que les meilleures définitions soient fournies ici, alors permettez-moi d'ajouter mes deux cents s'il vous plaît, juste pour les autres observateurs. J'espère que cela pourrait aider davantage.
Il existe deux types de polymorphisme:
C'est simplement une surcharge de méthode et une surcharge d'opérateur
Le premier terme est hérité de la terminologie Java et C ++.
Mais dans la terminologie .NET, seul le second ( je veux dire le polymorphisme à l'exécution ) est vraiment supposé être un polymorphisme et simplement appelé polymorphisme .
Et pour autant que je sache, il existe trois méthodes pour implémenter le polymorphisme (à l' exécution ) .
Un exemple simple de polymorphisme basé sur l'interface:
Production:
la source
Le polymorphisme est une abstraction de codage logiciel dans laquelle plusieurs entités sous-jacentes différentes (généralement des données, mais toujours) partagent toutes une interface commune qui leur permet de sembler et d'agir de la même manière lors de l'exécution. Nous l'utilisons comme technique de développement pour imposer un comportement cohérent sur un large éventail d'instances similaires, mais pas identiques, avec une implémentation minimale absolue, réduisant ainsi les attentes de bogues et d'incohérences.
Paul.
la source
polymorphisme == plusieurs classes + mêmes signatures de méthode + comportement spécifique à la classe.
la source
Les formes multiples d'un même objet sont appelées polymorphisme.
la source
Polymorphisme
Différents objets peuvent répondre au même message de différentes manières, permettre aux objets d'interagir les uns avec les autres sans connaître leur type exact.
Via: http://www.agiledata.org/essays/objectOrientation101.html
la source
Le polymorphisme est la capacité d'un objet à apparaître et à se comporter différemment pour la même invocation. ex: chaque animal apparaît et sonne différemment (lorsque vous le frappez :))
la source
Le polymorphisme est une caractéristique des langages de programmation qui permet à un objet d'être traité comme une instance de son supertype.
la source
Donner un nom unique à un ensemble d'opérations analogues sur différents types. Lorsqu'elle est bien faite, l'analogie est évidente, par exemple "ajouter" des nombres arithmétiquement et "ajouter" des chaînes par concaténation (qui additionne leurs longueurs).
la source
C'est la définition que j'ai toujours suivie:
Deux objets sont polymorphes (par rapport à un protocole particulier) entre eux, si les deux répondent aux mêmes messages avec la même sémantique.
Le polymorphisme concerne les messages, il s'agit de pouvoir répondre au même ensemble de messages avec la même sémantique.
Si deux objets PEUVENT répondre à vide? mais la sémantique du message est différente, alors .. ils ne sont pas polymorphes.
la source
Le polymorphisme au niveau inférieur est la capacité d'invoquer des méthodes définies par les implémenteurs d'une interface à partir de l'instance d'interface.
la source
Le polymorphisme est une fonctionnalité de programmation qui permet à un objet d'avoir de nombreux types («formes») et vous permet de le traiter comme l'un de ces types en fonction de ce que vous devez faire sans connaître ou vous soucier de ses autres types.
la source
Le polymorphisme est une fonctionnalité de langage permettant au code algorithmique de haut niveau de fonctionner sans changement sur plusieurs types de données. Et l'autre phrase, quelle qu'elle soit pour ... ;-P.
(Les types pris en charge par C ++ sont répertoriés et contrastés dans ma réponse: Polymorphisme en C ++ )
la source
Le concept de polymorphisme est devenu un phénomène ces derniers temps. Voici la dérive réelle. Runtime définit quelle sous-méthode doit être invoquée par une référence d'une super classe. Maintenant, que signifie en pratique? Cela ne veut rien dire. Vous pouvez coder simplement sans polymorphisme. Alors pourquoi? Parce que, si nous n'avons pas le polymorphisme, nous devions mémoriser toutes les définitions des fonctions de sous-classes. Le polymorphisme nous en sauve dans la pratique.
Vous pouvez définir une liste comme suit:
mais si vous vérifiez
IList
, vous pouvez bénéficier de l'interface comme:et utilisez la
IList
référence librement. En supposant qu'elleIList
soit également implémentée dans une autre classe, vous pouvez utiliser des méthodes de cette classe inconnue via une nouvelleIList
référence sans essayer de vous souvenir de ce nom de classe. Merveilleux, n'est-ce pas?Maintenant, des informations plus précieuses arrivent:
Java est polymorphe par défaut, alors que .NET et C ++ ne le sont pas, dans MS, vous devez déclarer la fonction de base
virtual
(et dans .NEToverride
mot-clé ).En outre, il existe 2 règles intégrales dans le polymorphisme. L'un est l'héritage (via l'interface impl. Ou via l'extension de classe) et l'autre est le remplacement. Sans priorité, le polymorphisme n'existe pas. Notez que la surcharge de méthode (qui est toujours dans une seule classe) est également un type de polymorphisme «minimaliste».
la source
Pour une signature de méthode donnée, différentes implémentations de méthode sont exécutées pour différentes classes liées hiérarchiquement.
la source
Le polymorphisme est la capacité d'utiliser différentes classes qui implémentent une interface commune (ou étendent une classe de base commune) de manière commune, sans avoir besoin maintenant de l'implémentation spécifique, et en utilisant uniquement les méthodes disponibles dans l'interface commune.
Ie: En Java, comme ArrayList et LinkedList implémentent tous les deux List, si vous déclarez une variable comme List, vous pouvez toujours effectuer les opérations autorisées dans List, peu importe si votre variable a été instanciée comme ArrayList ou LinkedList.
la source
Les entités du même type (c'est-à-dire implémentées de la même interface ou dérivées de la même classe), se comportent de différentes manières (sous le même nom de méthode).
la source
Je pense que la mise en œuvre de méthodes de la même signature dans différentes classes (ayant une sorte de relation d'héritage en utilisant des extensions ou des implements) est une substitution de méthode et également un polymorphisme car de cette manière nous obtenons de nombreuses formes de la même signature de méthode.
la source
Je suppose que parfois les objets sont appelés dynamiquement. Vous n'êtes pas sûr que l'objet soit un triangle, un carré, etc. dans un poly de forme classique. exemple.
Donc, pour laisser toutes ces choses derrière nous, nous appelons simplement la fonction de classe dérivée et supposons que celle de la classe dynamique sera appelée.
Vous ne vous soucieriez pas si c'est un carré, un triangle ou un rectangle. Vous vous souciez juste de la région. Par conséquent, la méthode getArea sera appelée en fonction de l'objet dynamique passé.
la source
Le polymorphisme est la capacité d'une fonction à s'adapter automatiquement pour accepter des données d'entrée de différents types de données. Vous pouvez "Ajouter" deux doubles "1.1" et "2.2" et obtenir "3.3" ou "Ajouter" deux chaînes "Stack" et "Overflow" et obtenir "StackOverflow".
la source
Le polymorphisme se produit lorsque différents objets répondent à la même méthode d'une manière différente. Par exemple, une voiture se déplace sur la route tandis qu'une personne marche sur la route. Ce sont deux objets qui répondent différemment à la même route.
la source