Question

Salut je suis moi-même éduque oop principes. Je voudrais savoir si cela est un exemple correct de la définition Cardellis de paramétrique polymorphisme . S'il vous plaît me éclairer.
L'exemple est dans la syntaxe à base de script de CFML.

<cfscript>
Parent = createobject("component","webapp.model.Parent").init();
Child = createobject("component","webapp.model.Child").init();
GrandChild = createobject("component","webapp.model.GrandChild").init();
Test = createobject("component","webapp.model.DealWithObject");
dump(Test.getNumberOfParents(Parent));
dump(Test.getNumberOfParents(Child));
dump(Test.getNumberOfParents(GrandChild));
</cfscript>

<cfcomponent>
<cfscript>
// should deal with an infinte number of abstract data types (because of common structure)
public numeric function getNumberOfParents(component arg){
  return -1 + arraylen(structfindkey(getmetadata(arguments.arg),"extends","all"));
}
</cfscript>
</cfcomponent>
Était-ce utile?

La solution

Non, tout simplement pas.

Polymorphisme signifie que vous ne disposez pas de vérifier quel type est quelque chose, vous utilisez juste.

Un exemple serait (C #):

public Boolean AreEqual(Object o1, Object o2)
{
  return o1.Equals(o2);
}

La méthode peut accepter tout type d'objet qui hérite de l'objet (en C # presque tout) et met en œuvre equals, de sorte que vous pouvez l'utiliser pour faire le chèque et ne pas vérifier le type d'un paramètre.
Habituellement, vous acceptez une sorte d'interface pour vous assurer que les supports d'objet l'opération que vous souhaitez effectuer.

Autres conseils

Je ne crois pas p puisque la fonction est explicitement affaire avec le type de l'argument any. Le point de p est que la fonction fonctionne sans tenir compte du type de l'objet.

Si je présente un nouveau type dans le système, cette fonction se brisera car il ne dispose pas d'un traitement spécial pour elle.

EDIT: Je pense que votre exemple mis à jour est le polymorphisme de sous-type, puisque la fonction traitera objet et tout cela de sous-types, en vertu de cet objet poignées getMetadata (. Et par principe de substitution, il est sous-types)

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