Question

J'ai examiné d'autres définitions et explications et aucune d'elles ne me satisfait. Je veux voir si quelqu'un peut définir le polymorphisme en deux phrases au maximum sans utiliser de code ou d'exemples. Je ne veux pas entendre «Vous avez donc une personne / une voiture / un ouvre-boîte ...» ou comment le mot est dérivé (personne n'est impressionné par le fait que vous sachiez ce que signifie poly et morph). Si vous avez une très bonne compréhension de ce qu'est le polymorphisme et maîtrisez bien l'anglais, vous devriez pouvoir répondre à cette question dans une définition courte, mais dense. Si votre définition définit avec précision le polymorphisme mais est si dense qu'elle nécessite quelques relectures, 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 neutralisation vs surcharge
Essayez de décrire le polymorphisme aussi facilement que possible

Pourquoi je pose cette question? Parce que la même question m’était posée et que j’étais incapable d’arriver à 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 imposer l’obligation de deux phrases (c’est un sujet difficile à définir), c’est acceptable si vous passez au-dessus. L’idée est d’avoir une définition qui définisse ce qu'est le polymorphisme et n’explique pas ce qu’il fait ou comment l’utiliser (comprendre la différence?).

Était-ce utile?

La solution

Le polymorphisme permet d’exprimer une sorte de contrat, de nombreux types pouvant implémenter ce contrat (par héritage de classe ou non) de différentes manières, chacune en fonction de son objectif. Le code utilisant ce contrat ne devrait pas (*) avoir à se soucier de la mise en œuvre impliquée, mais seulement que le contrat sera respecté.

(*) Dans l’idéal, de toute façon - le code appelant a bien souvent choisi délibérément l’implémentation appropriée!

Autres conseils

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 (parce que c'est un fruit). On peut aussi manger une banane (parce que c'est aussi un fruit), mais d'une manière différente de celle d'une pomme. Vous épluchez-le d'abord.

Eh bien, au moins, oui, mais je suis bizarre de certaines manières, alors que sais-je?

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

Sérieusement, l'héritage d'objets, le polymorphisme, l'encapsulation, les objets virtuels, les objets abstraits, les objets privés, les objets publics, sont tous des concepts difficiles. Si quelqu'un veut absolument avoir une définition en deux phrases, merci de marquer la question en tant que variante code-golf, car deux phrases de ce type devront être si concises que si vous ne savez pas ce que c'est déjà, vous n'en saurez pas assez sur le sujet. savoir ce dont vous avez besoin pour en savoir plus.

Polymorphism déclare une interface uniforme qui n'est pas sensible au type, laissant les détails de l'implémentation à des types concrets qui implémentent l'interface.

En fait, il existe de nombreuses formes de polymorphisme qui suscitent une vive controverse. 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 de type générique). Peut être vu en C ++ par exemple (les vecteurs de int et 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 (c'est-à-dire que Triangle est une forme).

Wikipedia: Polymorphism est une fonctionnalité de langage de programmation qui permet de gérer les valeurs de différents types de données à l’aide d’une interface uniforme. C'est assez simple pour moi.

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. Comme je ne pouvais pas donner une définition claire et concise, j'ai commencé à y réfléchir et voici ma définition:

Possibilité pour les objets d'un type d'avoir une même interface, mais une implémentation différente de cette interface.

Définition :

Polymorphisme est un mot à 10 dollars pour une idée à 1 dollar: lorsque je demande que quelque chose soit fait, je ne me soucie pas 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 ne me soucie pas de de la mise en œuvre .

Discussion

Bien qu’il soit couramment utilisé dans le développement de logiciels, en particulier dans les systèmes développés suivant des principes orientés objet, le polymorphisme est fondamentalement un principe réel et doit être défini en termes réels, et non technologiques.

Exemples

Lorsque je souhaite passer un appel téléphonique, je décroche un téléphone, compose un numéro et parle à l'interlocuteur. Peu m'importe qui a fabriqué le téléphone, quelle technologie il utilise, qu'il soit câblé, sans fil, mobile ou VOIP, ou qu'il soit sous garantie.

Lorsque je veux imprimer un document, je l’imprime. Peu m'importe le langage d'implémentation, la marque de l'imprimante, le style de connexion, le choix du consommable ou la qualité du papier.

Plusieurs implémentations de la même interface.

Exemple: de nombreux modèles de téléphone implémentent l’interface du clavier numérique.

Le polymorphisme est une stratégie orientée objet utilisée lors de la conception de modèles objet pour simplifier le code. Le polymorphisme fondamental réside dans la possibilité de définir deux objets similaires mais identiques, puis de les traiter comme s'ils étaient identiques.

Ok c'est dur ....

Je pensais juste ajouter ma propre interprétation de ce qu'est le polymorphisme: très généralement, le polymorphisme est l'acte consistant à 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 pour moi d’envelopper les trois types de polymorphismes que je connais: ad hoc , paramétrique et . Je donnerai plus de détails ci-dessous et je classerai les types de polymorphismes par nom, par ordre alphabétique. Celui qui vous intéresse est très 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. Dans POO , on l'appelle généralement surcharge de méthode . 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 méthodes format partagent une interface unique , mais elles fonctionnent sur des entités de types différents .

Polymorphisme paramétrique

Le

polymorphisme paramétrique consiste à 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 Liste [T] de Java attend un paramètre T 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 sens qu'ils ne feraient que brouiller les cartes dans ce contexte.

List [String] et List [Date] partagent une interface unique , mais fonctionnent sur (et sont) différents types .

Polymorphisme de sous-type

Le

polymorphisme de sous-type est probablement ce que vous vouliez dire initialement dans votre question: il s’agit 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. Chien est un Animal et prend en charge toutes les opérations déclarées par Animal . Selon le principe de substitution de Liskov , vous pouvez utiliser une instance de Chien où une instance de Animal est attendue (mais pas l'inverse).

Si Cat et Chien sont tous deux des sous-classes de Animal , ils partagent une interface unique mais sont dans fait différents types .

Je suis un peu tangent ici, mais le polymorphisme de sous-type est (je pense) le seul qui permette de dépasser : l'acte de redéfinir le comportement d'une méthode définie par un classe parente. Ceci est souvent confondu avec la surcharge qui, comme nous l’avons déjà vu, est un type de polymorphisme et n’a pas besoin de sous-classes (ni de classes, en réalité).

Le polymorphisme est une abstraction logicielle de codage dans laquelle plusieurs entités sous-jacentes différentes (généralement des données, mais toujours) partagent une interface commune qui leur permet de paraître et d’agir de manière identique à l’exécution. Nous l'utilisons comme technique de développement pour imposer un comportement cohérent sur une large gamme d'instances similaires, mais non identiques, avec une implémentation minimale absolue, réduisant ainsi les attentes en matière de bogues et d'incohérences.

Paul.

polymorphisme == plusieurs classes + signatures de la même méthode + comportement spécifique à la classe.

Il semble que les meilleures définitions soient fournies ici, alors laissez-moi ajouter mon deux cents s'il vous plaît, juste pour d'autres observateurs. J'espère que cela pourrait aider davantage.

Il existe deux types de polymorphisme:

1. Compile-time (static) polymorphism or (ad hoc) polymorphism.

C’est simplement une surcharge de méthode et une surcharge d’opérateur

2.  Run time or (dynamic) polymorphism.

Le premier terme est hérité des terminologies Java et C ++.

Mais dans la .NET terminologie, seul le second ( je veux dire le polymorphisme à l'exécution ) est vraiment supposé être un polymorphisme et simplement appelé polymorphisme .

Et autant que je sache, il existe trois méthodes pour implémenter ( temps d'exécution ) polymorphisme .

 1. Parametric polymorphism or simply the use of generics (templates in C++).

 2. Inheritance-based polymorphism or subtyping.

 3. Interface-based polymorphism.

Un exemple simple de polymorphisme basé sur une interface:

interface Imobile
{
    void Move();
}

class Person :Imobile
{
    public void Move() { Console.WriteLine("I am a person and am moving in my way."); }
}

class Bird :Imobile
{
    public void Move() { Console.WriteLine("I am a bird and am moving in my way."); }
}

class Car :Imobile
{
    public void Move() { Console.WriteLine("I am a car and am moving in my way."); }
}


class Program
{

    static void Main(string[] args)
    {
        // Preparing a list of objects
        List<Imobile> mobileList = new List<Imobile>();

        mobileList.Add(new Person());
        mobileList.Add(new Bird());
        mobileList.Add(new Car());

        foreach (Imobile mobile in mobileList)
        {
            mobile.Move();
        }

        // Keep the console open
        Console.WriteLine("Press any key to exit the program:");
        Console.ReadKey();
    }
}

Sortie:

 I am a person and am moving in my way.
 I am a bird and am moving in my way.
 I am a car and am moving in my way.
 Press any key to exit the program:

Plusieurs formes d’un même objet sont appelées polymorphismes.

Le polymorphisme est la capacité d’un objet à apparaître et à se comporter différemment pour le même appel. ex: chaque animal apparaît et sonne différemment (quand vous le frappez :))

Le polymorphisme est une caractéristique des langages de programmation qui permet de traiter un objet comme une instance de son supertype.

Attribuer un nom unique à un ensemble d'opérations analogues sur différents types. Quand bien fait, l'analogie est évidente, par exemple. " ajout " numérote de manière arithmétique et "ajout de" chaînes par concaténation (qui additionnent leurs longueurs).

Polymorphisme

Différents objets peuvent répondre au même message de différentes manières et permettent aux objets d'interagir les uns avec les autres sans connaître leur type exact.

Via: http://www.agiledata.org/essays/objectOrientation101.html

Voici la définition que j'ai toujours suivie:

Deux objets sont polymorphes (par rapport à un protocole particulier) entre eux, s'ils répondent tous deux aux mêmes messages avec la même sémantique.

Le polymorphisme concerne les messages, consiste à 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.

Le polymorphisme au niveau inférieur correspond à la possibilité d'appeler des méthodes définies par les implémenteurs d'une interface à partir de l'instance d'interface.

Le polymorphisme est une fonctionnalité de programmation qui permet à un objet d’avoir de nombreux types ('formes') et vous permet de le traiter comme n’importe lequel de ces types en fonction de ce que vous devez faire sans connaître ni vous soucier de ses autres types.

Le polymorphisme est une fonctionnalité de langage permettant à un code algorithmique de haut niveau de fonctionner de manière inchangée sur plusieurs types de données. Et l'autre phrase, quelle qu'elle soit pour ... ;-P.

(Les types de supports pris en charge par C ++ sont répertoriés et mis en contraste dans ma réponse: Polymorphisme en c ++ )

Le concept de polymorphisme est devenu un phénomène ces derniers temps. Voici la dérive réelle. Le runtime définit quelle sous-méthode doit être invoquée par une référence d'une super classe. Maintenant, qu'est-ce que cela signifie dans la pratique? Cela ne signifie en réalité rien. 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 de fonctions de sous-classe. Le polymorphisme nous en sauve en pratique.

Vous pouvez définir une liste comme suit:

List list = new List();

mais si vous recherchez IList , vous pouvez bénéficier de l'interface en tant que:

IList list = new List();

et utilisez librement la référence IList . En supposant que IList soit également implémenté dans une autre classe, vous pouvez utiliser les méthodes de cette classe inconnue via la référence IList sans essayer de vous rappeler ce nom de classe. Merveilleux, n'est-ce pas?

Maintenant, des informations plus précieuses sont à venir:
Java est polymorphe par défaut, alors que .NET et C ++ ne le sont pas. Sous MS, vous devez déclarer la fonction de base virtual (et dans le mot clé .NET override ).

De plus, il existe 2 règles intégrales dans le polymorphisme. L’un est l’héritage (via une interface ou via une extension de classe) et l’autre est primordial. Sans passer outre, le polymorphisme n'existe pas. Notez que la surcharge de méthodes (qui se trouve toujours dans une seule classe) est également un type de "minimaliste". polymorphisme.

Pour une signature de méthode donnée, différentes implémentations de méthode sont exécutées pour différentes classes hiérarchiquement liées.

Le polymorphisme est la capacité d’utiliser différentes classes qui implémentent une interface commune (ou étendent une classe de base commune) d’une manière commune, sans avoir besoin maintenant d’une implémentation spécifique et en utilisant uniquement les méthodes disponibles dans l’interface commune.

Ie: En Java, ArrayList et LinkedList implémentent tous deux List, si vous déclarez une variable en tant que List, vous pouvez toujours effectuer les opérations autorisées dans List, peu importe si cette variable était instanciée en tant que ArrayList ou LinkedList.

Les entités du même type (c'est-à-dire qui implémentent la même interface ou qui dérivent de la même classe) se comportent de différentes manières (sous le même nom de méthode).

Je pense que l'implémentation de méthodes de la même signature dans différentes classes (avoir une sorte de relation d'héritage en utilisant des rallonges ou des implémentations) est une méthode prioritaire ainsi qu'un polymorphisme, car nous obtenons ainsi de nombreuses formes de la même signature de méthode.

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 une forme classique poly. Exemple.

Donc, pour laisser toutes ces choses derrière nous, appelons simplement la fonction de classe dérivée et supposons que celui de la classe dynamique sera appelé.

Vous ne voudriez pas que ce soit 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 transmis.

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 " Débordement " et obtenez "StackOverflow".

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 pendant qu'une personne marche sur la route. Ce sont deux objets qui réagissent différemment à la même route.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top