nous pouvons trouver beaucoup d'informations sur le sujet sur Internet et des livres
http://en.wikipedia.org/wiki/Type_polymorphism
mais essayons de le rendre aussi simple que possible.
nous pouvons trouver beaucoup d'informations sur le sujet sur Internet et des livres
http://en.wikipedia.org/wiki/Type_polymorphism
mais essayons de le rendre aussi simple que possible.
Tout est possible avec un simple pop couvercle s'ouvre de la même manière.
Comme un homme, vous savez que vous pouvez Ouvrir() pouvez-vous trouver.
Lorsqu'il est ouvert, pas tous les canettes se comportent de la même manière.
Certains contiennent des noix, certains contiennent de faux serpents qui sort de la pop.
Le résultat dépend du TYPE de la can, si la boîte était un "CanOfNuts" ou un "CanOfSnakes", mais cela n'a aucune influence sur la FAÇON dont vous l'ouvrez. Vous savez que vous pouvez ouvrir n'importe quel Peut et doit obtenir une sorte de suite qui est décidé en fonction du type de la can, il a été ouvert.
pUnlabledCan->Open(); //peut donner des noix, pourrait donner des serpents. Nous ne savons pas jusqu'à ce que nous appelons
Open() a un générique de type de retour de "Contenu" (ou nous pourrions décider pas de type de retour), ainsi que de l'ouvrir a toujours la même fonction de signature.
Vous, les humains, sont à l'utilisateur/de l'appelant.
Open() est le virtuel/fonction polymorphe.
"Peut" est la classe de base abstraite.
CanOfNuts et CanOfSnakes sont polymorphes enfants de la classe.
Chaque boîte peut être ouverte, mais que il ne et quels tye de contenu , il renvoie sont définis par ce genre de peut il est.
Tout ce que vous savez quand vous voyez pUnlabledCan est que vous pouvez l'Ouvrir (), et il sera de retour le contenu. Tout autre comportement (telles que l'affichage des serpents dans votre visage) sont décidés par le Peut.
Ceci est tiré de ma réponse d'une question similaire. Voici un exemple de polymorphisme en pseudo-C # / Java:
class Animal
{
abstract string MakeNoise ();
}
class Cat : Animal {
string MakeNoise () {
return "Meow";
}
}
class Dog : Animal {
string MakeNoise () {
return "Bark";
}
}
Main () {
Animal animal = Zoo.GetAnimal ();
Console.WriteLine (animal.MakeNoise ());
}
La méthode Main () ne connaît pas le type de l'animal et dépend du comportement de la méthode MakeNoise () dans une implémentation particulière.
La description la plus simple de polymorphisme, c'est que c'est une façon de réduire si/instructions de commutation.
Il a également l'avantage de vous permettre d'étendre votre si/instructions de commutation (ou autres) sans modifier les classes existantes.
Par exemple, considérons l' Stream
classe .NET. Sans polymorphisme ce serait un seul massive de la classe où chaque méthode met en œuvre une instruction switch quelque chose comme:
public class Stream
{
public int Read(byte[] buffer, int offset, int count)
{
if (this.mode == "file")
{
// behave like a file stream
}
else if (this.mode == "network")
{
// behave like a network stream
}
else // etc.
}
}
Au lieu de nous permettre l'exécution pour faire la commutation pour nous d'une façon plus efficace, en choisissant automatiquement la mise en œuvre, basé sur le type de béton (FileStream
, NetworkStream
), par ex.
public class FileStream : Stream
{
public override int Read(byte[] buffer, int offset, int count)
{
// behave like a file stream
}
}
public class NetworkStream : Stream
{
public override int Read(byte[] buffer, int offset, int count)
{
// behave like a network stream
}
}
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.