Qu'est-ce que le polymorphisme, à quoi sert-il et comment est-il utilisé?
oop
polymorphism
computer-science
UnkwnTech
la source
la source
Réponses:
Si vous pensez aux racines grecques du terme, cela devrait devenir évident.
Le polymorphisme est donc la capacité (en programmation) de présenter la même interface pour différentes formes sous-jacentes (types de données).
Par exemple, dans de nombreux langages, les entiers et les flottants sont implicitement polymorphes puisque vous pouvez ajouter, soustraire, multiplier et ainsi de suite, indépendamment du fait que les types sont différents. Ils sont rarement considérés comme des objets dans le terme habituel.
Mais, de la même manière, une classe comme
BigDecimal
ouRational
ouImaginary
peut également fournir ces opérations, même si elles opèrent sur différents types de données.L'exemple classique est la
Shape
classe et toutes les classes qui peuvent en hériter (carré, cercle, dodécaèdre, polygone irrégulier, splat, etc.).Avec le polymorphisme, chacune de ces classes aura des données sous-jacentes différentes. Une forme ponctuelle n'a besoin que de deux coordonnées (en supposant bien sûr qu'elle soit dans un espace à deux dimensions). Un cercle a besoin d'un centre et d'un rayon. Un carré ou un rectangle a besoin de deux coordonnées pour les coins supérieur gauche et inférieur droit et (éventuellement) d'une rotation. Un polygone irrégulier a besoin d'une série de lignes.
En rendant la classe responsable de son code ainsi que de ses données, vous pouvez obtenir un polymorphisme. Dans cet exemple, chaque classe aurait sa propre
Draw()
fonction et le code client pourrait simplement faire:pour obtenir le comportement correct pour n'importe quelle forme.
Cela contraste avec l'ancienne façon de faire les choses dans laquelle le code était séparé des données, et vous auriez eu des fonctions telles que
drawSquare()
etdrawCircle()
.L'orientation des objets, le polymorphisme et l'héritage sont tous des concepts étroitement liés et ils sont essentiels à connaître. Il y a eu beaucoup de "balles d'argent" au cours de ma longue carrière qui ont simplement échoué, mais le paradigme OO s'est avéré être bon. Apprenez-le, comprenez-le, aimez-le - vous serez content de l'avoir fait :-)
(a) J'ai écrit cela à l'origine comme une blague, mais cela s'est avéré correct et, par conséquent, pas si drôle. Le monomère styrène se trouve être fabriqué à partir de carbone et d'hydrogène , et le polystyrène est fabriqué à partir de groupes de cela , .
C8H8
(C8H8)n
J'aurais peut-être dû dire qu'un polype était à plusieurs reprises dans la lettre
p
bien que, maintenant que j'ai dû expliquer la blague, même cela ne semble pas drôle non plus.Parfois, vous devez simplement quitter pendant que vous êtes derrière :-)
la source
Poly = many and Morph = change or form
Le polymorphisme est lorsque vous pouvez traiter un objet comme une version générique de quelque chose, mais lorsque vous y accédez, le code détermine de quel type exact il s'agit et appelle le code associé.
Voici un exemple en C #. Créez quatre classes dans une application console:
Créez maintenant ce qui suit dans le Main () du module pour l'application console:
Dans cet exemple, nous créons une liste de la classe de base Véhicule, qui ne sait pas combien de roues chacune de ses sous-classes possède, mais sait que chaque sous-classe est responsable de savoir combien de roues elle possède.
Nous ajoutons ensuite un vélo, une voiture et un camion à la liste.
Ensuite, nous pouvons parcourir chaque véhicule de la liste et les traiter tous de manière identique, mais lorsque nous accédons à la propriété Wheels de chaque véhicule, la classe Vehicle délègue l'exécution de ce code à la sous-classe appropriée.
Ce code est dit polymorphe, car le code exact qui est exécuté est déterminé par la sous-classe référencée au moment de l'exécution.
J'espère que cela vous aide.
la source
Class_Excel
,Class_CSV
être appelé, ou uneReader
classe appelée. De toute façon, une sorte d'itération si / alors / else va devoir être stocké quelque part.De Comprendre et appliquer le polymorphisme en PHP , merci Steve Guidetti.
la source
Si quelqu'un dit CUT à ces gens
Que va-t-il se passer?
La représentation ci-dessus montre ce qu'est le polymorphisme (même nom, comportement différent) dans la POO.
Si vous allez pour une interview et que l'intervieweur vous demande de dire / montrer un exemple en direct de polymorphisme dans la même pièce où nous sommes assis, dites-
Réponse - Porte / Fenêtres
Vous vous demandez comment?
Par la porte / fenêtre - une personne peut venir, l'air peut venir, la lumière peut venir, la pluie peut venir, etc.
Pour mieux le comprendre et de manière simple, j'ai utilisé l'exemple ci-dessus. Si vous avez besoin d'une référence pour le code, suivez les réponses ci-dessus.
la source
.foo()
méthode, alors elles devraient partager une interface commune. Cependant, ce n'est pas vrai et conduit à des abstractions incorrectes. Une interface doit définir un rôle à jouer, qui peut avoir de nombreuses implémentations différentes, mais qui tirent toutes du même ensemble d'entrées et renvoient quelque chose du même ensemble de sorties. L'entrée dans unx.cut(...)
pour un chirurgien, un styliste ou un acteur n'est pas la même, ni la sortie.Explication simple par analogie
Le président des États-Unis emploie le polymorphisme. Comment? Eh bien, il a de nombreux conseillers:
Tout le monde ne devrait être responsable que d'une chose: Exemple:
Le président n'est pas un expert en revêtement de zinc ou en physique quantique. Il ne sait pas beaucoup de choses - mais il ne sait qu'une chose: comment diriger le pays.
C'est un peu la même chose avec le code: les préoccupations et les responsabilités doivent être séparées pour les classes / personnes concernées. Sinon, vous auriez le président sachant littéralement tout dans le monde - l'ensemble de Wikipedia. Imaginez avoir tout le wikipedia dans une classe de votre code: ce serait un cauchemar à maintenir.
Pourquoi est-ce une mauvaise idée pour un président de connaître toutes ces choses spécifiques?
Si le président devait spécifiquement dire aux gens quoi faire, cela signifierait que le président doit savoir exactement quoi faire. Si le président a besoin de connaître des choses spécifiques lui-même, cela signifie que lorsque vous devez effectuer un changement, vous devrez le faire à deux endroits, pas à un seul.
Par exemple, si l'EPA modifie les lois sur la pollution, alors quand cela se produit: vous devez modifier la classe EPA et également la classe President. Changer le code à deux endroits plutôt qu'à un seul peut être dangereux - car il est beaucoup plus difficile à maintenir.
Est-ce qu'il y a une meilleure approche?
Il y a une meilleure approche: le président n'a pas besoin de connaître les détails de quoi que ce soit - il peut exiger les meilleurs conseils de personnes spécifiquement chargées de faire ces choses.
Exemple - d'utilisation d'une approche polymorphe:
Tout ce que le président fait, c'est demander aux gens de le conseiller - et c'est ce qu'il fait réellement dans la vie réelle - et c'est ce qu'un bon président devrait faire. ses conseillers réagissent tous différemment, mais ils savent tous ce que le président entend par: Conseiller (). Il a des centaines de personnes qui entrent dans son bureau. Peu importe qui ils sont. Tout ce que le président sait, c'est que lorsqu'il leur demande de "conseiller", ils savent comment réagir en conséquence :
Cette approche permet au président de diriger le pays littéralement sans rien savoir des affaires militaires, des soins de santé ou de la diplomatie internationale: les détails sont laissés aux experts. La seule chose que le président doit savoir est la suivante: "Advise ()".
Ce que vous ne voulez pas:
NON! NON! NON! Dans le scénario ci-dessus, le président fait tout le travail: il connaît l'augmentation du nombre de troupes et les conditions préexistantes. Cela signifie que si les politiques du Moyen-Orient changent, le président devra alors changer ses commandes, ainsi que la classe Petraeus. Nous devrions seulement avoir à changer la classe Petraeus, parce que le président ne devrait pas avoir à s'enliser dans ce genre de détails. Il n'a pas besoin de connaître les détails. Tout ce qu'il doit savoir, c'est que s'il passe une commande, tout sera pris en charge. Tous les détails doivent être laissés aux experts.
Cela permet au président de faire ce qu'il fait le mieux: définir la politique générale, bien paraître et jouer au golf: P.
Comment est-il réellement implémenté - via une classe de base ou une interface commune
En fait, c'est le polymorphisme, en bref. Comment cela se fait-il exactement? En "implémentant une interface commune" ou en utilisant une classe de base (héritage) - voir les réponses ci-dessus qui détaillent cela plus clairement. (Pour mieux comprendre ce concept, vous devez savoir ce qu'est une interface et vous devez comprendre ce qu'est l'héritage. Sans cela, vous pourriez avoir du mal.)
En d' autres termes, le général Petraeus, Condi et HealthOfficials seraient toutes les classes qui « mettent en œuvre une interface » - l'appel de let il l'
IAdvisor
interface qui contient une seule méthode:Advise()
. Mais maintenant, nous entrons dans les détails.Ce serait idéal
Sommaire
Tout ce que vous devez vraiment savoir, c'est ceci:
J'espère vraiment que cela vous aidera. Si vous ne comprenez rien, postez un commentaire et je vais réessayer.
la source
if healthAdvisor? then do this:
etif petraus then do that etc.
ce modèle devra être répété et c'est inutile et compliqué. voir ci-dessus modifier.Le polymorphisme est la capacité de traiter une classe d'objets comme s'il s'agissait de la classe parente.
Par exemple, supposons qu'il existe une classe appelée Animal et une classe appelée Dog qui hérite d'Animal. Le polymorphisme est la capacité de traiter n'importe quel objet chien comme un objet animal comme ceci:
la source
classes have different functionality while sharing a common interface
Polymorphisme:
C'est le concept de la programmation orientée objet. La capacité de différents objets à répondre, chacun à sa manière, à des messages identiques s'appelle le polymorphisme.
Le polymorphisme résulte du fait que chaque classe vit dans son propre espace de noms. Les noms attribués dans une définition de classe n'entrent pas en conflit avec les noms attribués à l'extérieur de celle-ci. Cela est vrai à la fois des variables d'instance dans la structure de données d'un objet et des méthodes de l'objet:
Tout comme les champs d'une structure C se trouvent dans un espace de noms protégé, les variables d'instance d'un objet le sont également.
Les noms de méthode sont également protégés. Contrairement aux noms des fonctions C, les noms de méthode ne sont pas des symboles globaux. Le nom d'une méthode dans une classe ne peut pas entrer en conflit avec les noms de méthode dans d'autres classes; deux classes très différentes peuvent implémenter des méthodes nommées de manière identique.
Les noms de méthode font partie de l'interface d'un objet. Lorsqu'un message est envoyé demandant qu'un objet fasse quelque chose, le message nomme la méthode que l'objet doit exécuter. Étant donné que différents objets peuvent avoir des méthodes portant le même nom, la signification d'un message doit être comprise par rapport à l'objet particulier qui reçoit le message. Le même message envoyé à deux objets différents peut invoquer deux méthodes distinctes.
Le principal avantage du polymorphisme est qu'il simplifie l'interface de programmation. Il permet d'établir des conventions qui peuvent être réutilisées classe après classe. Au lieu d'inventer un nouveau nom pour chaque nouvelle fonction que vous ajoutez à un programme, les mêmes noms peuvent être réutilisés. L'interface de programmation peut être décrite comme un ensemble de comportements abstraits, indépendamment des classes qui les implémentent.
Exemples:
Exemple 1: Voici un exemple simple , écrit en Python 2.x .
Exemple 2: le polymorphisme est implémenté en Java à l' aide de la surcharge de méthode et des concepts de substitution de méthode .
Prenons l'exemple de Car pour discuter du polymorphisme. Prenez n'importe quelle marque comme Ford, Honda, Toyota, BMW, Benz etc., tout est de type voiture.
Mais chacun a ses propres fonctionnalités avancées et une technologie plus avancée impliquées dans son comportement de déplacement.
Créons maintenant une voiture de base
Car.java
Implémentons l'exemple de Ford Car.
Ford étend le type Car pour hériter de tous ses membres (propriétés et méthodes).
Ford.java
La classe Ford ci-dessus étend la classe Car et implémente également la méthode move (). Même si la méthode de déplacement est déjà disponible pour Ford via l'héritage, Ford a toujours mis en œuvre la méthode à sa manière. C'est ce qu'on appelle la substitution de méthode.
Honda.java
Tout comme Ford, Honda étend également le type de voiture et a mis en œuvre la méthode de déplacement à sa manière.
La substitution de méthode est une caractéristique importante pour activer le polymorphisme. À l'aide de la substitution de méthode, les sous-types peuvent modifier le mode de fonctionnement des méthodes disponibles via l'héritage.
PolymorphismExample.java
Exemple de sortie de polymorphisme:
Dans la méthode principale de la classe PolymorphismExample, j'ai créé trois objets: Car, Ford et Honda. Les trois objets sont référencés par le type de voiture.
Veuillez noter un point important ici qu'un type de super classe peut faire référence à un type d'objet de sous-classe mais le vice-verset n'est pas possible. La raison en est que tous les membres de la super classe sont disponibles pour la sous-classe en utilisant l'héritage et pendant le temps de compilation, le compilateur essaie d'évaluer si le type de référence que nous utilisons a la méthode à laquelle il essaie d'accéder.
Ainsi, pour les références car, f et h dans le PolymorphismExample, la méthode de déplacement existe à partir du type Car. Ainsi, le compilateur passe le processus de compilation sans aucun problème.
Mais en ce qui concerne l'exécution au moment de l'exécution, la machine virtuelle appelle les méthodes sur les objets qui sont des sous-types. Ainsi, la méthode move () est invoquée à partir de leurs implémentations respectives.
Ainsi, tous les objets sont de type Car, mais pendant l'exécution, l'exécution dépend de l'objet sur lequel l'invocation se produit. C'est ce qu'on appelle le polymorphisme.
la source
Habituellement, cela fait référence à la capacité d'un objet de type A à se comporter comme un objet de type B. Dans la programmation orientée objet, cela est généralement obtenu par héritage. Quelques liens wikipedia pour en savoir plus:
EDIT: liens rompus fixes.
la source
classes have different functionality while sharing a common interface
Le polymorphisme est le suivant:
vous pouvez passer juste une coupe au lieu d'une instance spécifique. Cela aide en général car vous n'avez pas à fournir une instance de mesure () spécifique pour chaque type de tasse
la source
Je sais que c'est une question plus ancienne avec beaucoup de bonnes réponses, mais j'aimerais inclure une réponse d'une phrase:
Il existe de nombreux exemples ci-dessus qui montrent cela en action, mais je pense que c'est une bonne réponse concise.
la source
(Je parcourais un autre article sur quelque chose de complètement différent .. et le polymorphisme est apparu ... Maintenant, je pensais que je savais ce qu'était le polymorphisme .... mais apparemment pas de cette belle manière expliqué .. Je voulais l'écrire quelque part .. mieux encore le partagera ...)
http://www.eioba.com/a/1htn/how-i-explained-rest-to-my-wife
lire la suite de cette partie:
..... polymorphisme. C'est une façon geek de dire que différents noms peuvent avoir le même verbe appliqué à eux.
la source
De manière générale, c'est la capacité d'interfacer un certain nombre de types d'objets différents en utilisant la même API ou une API superficiellement similaire. Il existe différentes formes:
Surcharge de fonction: définir plusieurs fonctions avec le même nom et différents types de paramètres, tels que sqrt (float), sqrt (double) et sqrt (complex). Dans la plupart des langues qui le permettent, le compilateur sélectionne automatiquement le bon pour le type d'argument qui lui est transmis, il s'agit donc d'un polymorphisme à la compilation.
Méthodes virtuelles en POO: une méthode d'une classe peut avoir différentes implémentations adaptées aux spécificités de ses sous-classes; chacun de ceux-ci remplacerait l'implémentation donnée dans la classe de base. Étant donné un objet qui peut appartenir à la classe de base ou à l'une de ses sous-classes, l'implémentation correcte est sélectionnée à la volée, il s'agit donc d'un polymorphisme d'exécution.
Modèles: une fonctionnalité de certains langages OO par laquelle une fonction, une classe, etc. peut être paramétrée par un type. Par exemple, vous pouvez définir une classe de modèle générique "liste", puis l'instancier comme "liste d'entiers", "liste de chaînes", peut-être même "liste de listes de chaînes" ou similaires. Généralement, vous écrivez le code une fois pour une structure de données de type d'élément arbitraire et le compilateur en génère des versions pour les différents types d'élément.
la source
Le terme polymorphisme vient de:
poly = plusieurs
morphisme = la capacité de changer
En programmation, le polymorphisme est une "technique" qui vous permet de "regarder" un objet comme étant plus d'un type de chose. Par exemple:
Un objet étudiant est également un objet personne. Si vous "regardez" (c.-à-d. Le casting) vers l'étudiant, vous pouvez probablement demander la carte d'étudiant. Vous ne pouvez pas toujours faire ça avec une personne, non? (une personne n'est pas nécessairement un étudiant, donc pourrait ne pas avoir de carte d'étudiant). Cependant, une personne a probablement un nom. Un étudiant aussi.
En bout de ligne, «regarder» le même objet sous différents «angles» peut vous donner différentes «perspectives» (c.-à-d. Différentes propriétés ou méthodes)
Cette technique vous permet donc de créer des éléments qui peuvent être «examinés» sous différents angles.
Pourquoi utilisons-nous le polymorphisme? Pour commencer ... l'abstraction. À ce stade, il devrait y avoir suffisamment d'informations :)
la source
Prenons une analogie. Pour un scénario musical donné, chaque musicien qui le joue donne sa touche personnelle à l'interprétation.
Le musicien peut être abstrait avec des interfaces, le genre auquel appartient le musicien peut être une classe abstrac qui définit certaines règles globales d'interprétation et chaque musicien qui joue peut être modélisé avec une classe concrète.
Si vous êtes un auditeur de l'œuvre musicale, vous avez une référence au script, par exemple, 'Fuga et Tocata' de Bach et chaque musicien qui l'exécute le fait polymorphiquement à sa manière.
Ceci est juste un exemple d'une conception possible (en Java):
la source
AnnHalloway
et seVictorBorga
sentir comme ils devraient être des objets plutôt que des classes - votre exemple serait mieux lu avec par exemple.public class Pianist implements Musician
etvictorBorge = new Pianist();
etc.J'ai fourni un aperçu de haut niveau du polymorphisme pour une autre question:
Polymorphisme en c ++
J'espère que cela aide. Un extrait...
(suite à Polymorphism en c ++ )
la source
Le polymorphisme est une capacité d'objet qui peut être prise sous de nombreuses formes. Par exemple, dans la classe humaine, un homme peut agir sous plusieurs formes lorsque nous parlons de relations. EX: Un homme est le père de son fils et il est le mari de sa femme et il enseigne à ses élèves.
la source
Le polymorphisme est la capacité d'un objet à prendre de nombreuses formes. L'utilisation la plus courante du polymorphisme dans la POO se produit lorsqu'une référence de classe parent est utilisée pour faire référence à un objet de classe enfant. Dans cet exemple écrit en Java, nous avons trois types de véhicules. Nous créons trois objets différents et essayons d'exécuter leur méthode de roues:
Le résultat est:
Pour plus d'informations, veuillez visiter https://github.com/m-vahidalizadeh/java_advanced/blob/master/src/files/PolymorphismExample.java . J'espère que ça aide.
la source
Le polymorphisme est la capacité du programmeur à écrire des méthodes du même nom qui font des choses différentes pour différents types d'objets, selon les besoins de ces objets. Par exemple, si vous développiez une classe appelée
Fraction
et une classe appeléeComplexNumber
, les deux pourraient inclure une méthode appeléedisplay()
, mais chacune implémenterait cette méthode différemment. En PHP, par exemple, vous pouvez l'implémenter comme ceci:Les sorties:
Certaines des autres réponses semblent impliquer que le polymorphisme n'est utilisé qu'en conjonction avec l'héritage; par exemple, peut
Fraction
- être et lesComplexNumber
deux implémentent une classe abstraite appeléeNumber
qui a une méthodedisplay()
, que Fraction et ComplexNumber sont alors tous deux obligés d'implémenter. Mais vous n'avez pas besoin d' héritage pour profiter du polymorphisme.Au moins dans les langages à typage dynamique comme PHP (je ne connais pas C ++ ou Java), le polymorphisme permet au développeur d'appeler une méthode sans nécessairement connaître le type d'objet à l'avance, et en ayant confiance que la mise en œuvre correcte de la méthode être appelé. Par exemple, supposons que l'utilisateur choisisse le type de
Number
création:Dans ce cas, la
display()
méthode appropriée sera appelée, même si le développeur ne peut pas savoir à l'avance si l'utilisateur choisira une fraction ou un nombre complexe.la source
Dans la programmation orientée objet, le polymorphisme fait référence à la capacité d'un langage de programmation à traiter les objets différemment selon leur type ou classe de données . Plus précisément, c'est la possibilité de redéfinir les méthodes des classes dérivées.
la source
Le polymorphisme signifie littéralement plusieurs formes. (ou plusieurs formes): objet de différentes classes et méthode du même nom, mais les workflows sont différents. Un exemple simple serait:
Considérons une personne X.
Il n'est qu'une seule personne mais il en agit autant. Vous pouvez demander comment:
Il est le fils de sa mère. Un ami pour ses amis. Un frère pour sa sœur.
la source
Le polymorphisme dans la POO signifie qu'une classe peut avoir différents types, l'héritage est une façon d'implémenter le polymorphisme.
par exemple, Shape est une interface, il a des sous-types Square , Circle , Diamond . maintenant que vous avez un objet Square, vous pouvez convertir automatiquement Square en forme, car Square est une forme. Mais lorsque vous essayez de downcasting Shape to Square, vous devez faire un transtypage de type explicite, car vous ne pouvez pas dire que Shape est Square, il peut également s'agir de Circle. vous devez donc le convertir manuellement avec du code comme
Square s = (Square)shape
, si la forme est Circle, vous obtiendrezjava.lang.ClassCastException
, car Circle n'est pas Square.la source
Polymorphisme:
Une variable de référence de type d'interface peut faire référence à n'importe quelle instance de classe qui implémente cette interface.
la source
Le polymorphisme est la capacité d'utiliser un objet dans une classe donnée, où tous les composants qui composent l'objet sont hérités par des sous-classes de la classe donnée. Cela signifie qu'une fois cet objet déclaré par une classe, toutes les sous-classes en dessous (et leurs sous-classes, et ainsi de suite jusqu'à ce que vous atteigniez la sous-classe la plus éloignée / la plus basse) héritent de l'objet et de ses composants (maquillage).
N'oubliez pas que chaque classe doit être enregistrée dans des fichiers séparés.
Le code suivant illustre le polymorphisme:
La SuperClasse:
Le père, une sous-classe:
L'enfant, une autre sous-classe:
La méthode d'exécution fait référence à la classe Parent pour démarrer:
Notez que chaque classe doit être déclarée dans des fichiers * .java distincts. Le code devrait compiler. Notez également que vous pouvez continuellement utiliser maidenName et familyTree plus bas. C'est le concept du polymorphisme. Le concept d'héritage est également exploré ici, où une classe peut être utilisée ou est définie par une sous-classe.
J'espère que cela aide et rend clair. Je publierai les résultats lorsque je trouverai un ordinateur que je pourrai utiliser pour vérifier le code. Merci pour la patience!
la source
Le polymorphisme permet à la même routine (fonction, méthode) d'agir sur différents types.
Étant donné que de nombreuses réponses existantes confondent le sous-typage avec le polymorphisme, voici trois façons (y compris le sous-typage) d'implémenter le polymorphisme.
Voir également:
http://wiki.c2.com/?CategoryPolymorphism
https://en.wikipedia.org/wiki/Polymorphism_(computer_science)
la source
Dans les langages orientés objet, le polymorphisme permet de traiter et de gérer différents types de données via la même interface. Par exemple, considérons l'héritage en C ++: la classe B est dérivée de la classe A. Un pointeur de type A * (pointeur vers la classe A) peut être utilisé pour gérer à la fois un objet de classe A ET un objet de classe B.
la source
Le polymorphisme en termes de codage, c'est quand votre objet peut exister en plusieurs types par héritage, etc. Si vous créez une classe nommée "Shape" qui définit le nombre de côtés de votre objet, vous pouvez alors créer une nouvelle classe qui en hérite comme "Square" ". Lorsque vous créez par la suite une instance de "Square", vous pouvez ensuite la lancer en avant et en arrière de "Shape" à "Square" selon les besoins.
la source
Le polymorphisme vous donne la possibilité de créer un module appelant un autre, tout en ayant le point de dépendance temporelle de compilation par rapport au flux de contrôle plutôt qu'avec le flux de contrôle.
En utilisant le polymorphisme, un module de haut niveau ne dépend pas d'un module de bas niveau. Les deux dépendent des abstractions. Cela nous aide à appliquer le principe d'inversion de dépendance ( https://en.wikipedia.org/wiki/Dependency_inversion_principle ).
C'est là que j'ai trouvé la définition ci-dessus. Environ 50 minutes après le début de la vidéo, l'instructeur explique ce qui précède. https://www.youtube.com/watch?v=TMuno5RZNeE
la source
Qu'est-ce que le polymorphisme?
Le polymorphisme est la capacité de:
Invoquer une opération sur une instance d'un type spécialisé en ne connaissant que son type généralisé en appelant la méthode du type spécialisé et non celle du type généralisé: c'est du polymorphisme dynamique .
Définissez plusieurs méthodes ayant le nom de sauvegarde mais ayant des paramètres différents: c'est le polymorphisme statique .
Le premier si la définition historique et le plus important.
À quoi sert le polymorphisme?
Il permet de créer une cohérence fortement typée de la hiérarchie des classes et de faire des choses magiques comme gérer des listes d'objets de différents types sans connaître leurs types mais un seul de leur type parent, ainsi que des liaisons de données.
Typage fort et faible
Échantillon
Voici quelques formes comme Point, Line, Rectangle et Circle dont l'opération Draw () ne prend rien ou un paramètre pour définir un délai d'expiration pour l'effacer.
Ici, la classe Shape et les méthodes Shape.Draw () doivent être marquées comme abstraites.
Ils ne sont pas là pour faire comprendre.
Explication
Sans polymorphisme, en utilisant abstract-virtual-override, lors de l'analyse des formes, seule la méthode Spahe.Draw () est appelée car le CLR ne sait pas quelle méthode appeler. Il appelle donc la méthode du type sur lequel nous agissons, et ici le type est Shape en raison de la déclaration de liste. Le code ne fait donc rien du tout.
Avec le polymorphisme, le CLR est capable d' inférer le type réel de l'objet sur lequel nous agissons en utilisant ce qu'on appelle une table virtuelle. Il appelle donc la bonne méthode, et ici appeler Shape.Draw () si Shape est Point appelle Point.Draw (). Le code dessine donc les formes.
Plus de lectures
C # - Polymorphisme (niveau 1)
Polymorphisme en Java (niveau 2)
Polymorphisme (Guide de programmation C #)
Table de méthode virtuelle
la source