Faisons un exemple simple. Supposons que j'ai une collection d'objets Number
, qui peut alors être même ou impaire. Supposons que je souhaite parcourir cette collection et traiter chaque élément. Le processus dépend du type d'élément: même ou impair.Comportement différent en fonction des données
Exemple: Imprimer chaque élément, tel que:
si
Number
est encore, je "Ceci est un nombre pair."Si
Number
est impair, j'ai "Ceci est un nombre impair."
Cependant, je peux décider plus tard que je veux pour seulement les nombres pairs d'imprimer « un nombre pair. »
Alors, comme nous le voyons, cela pourrait être résolu avec héritage et Polymorphisme, grâce à l'utilisation de fonctions virtuelles:
class Number {/*...*/}; // base class
class Even : public Number {/*...*/} // derived class
class Odd : public Number {/*...*/} // derived class
Cependant, comment puis-je fournir la flexibilité dans le processus de exécuter un comportement différent plus tard, comme indiqué dans l'exemple ci-dessus? Aussi, y a-t-il une alternative à l'héritage et au polymorphisme? Parce que je n'ai pas voulu créer d'arbre d'héritage uniquement à cause d'un calcul/processus spécifique. Le problème original consiste à exécuter un modèle mathématique différent en fonction du type d'objet, et le modèle mathématique n'est pas unique pour un type donné d'objet (la façon dont je peux imprimer le nombre pair n'est pas unique).
Edit: Il est drôle que ce poste a été fermé avec l'argument selon lequel il est difficile de dire ce qui est demandé. Les auteurs des plusieurs réponses ci-dessous ne semblent pas d'accord avec cela, puisque tous pourraient le comprendre et répondre à ce que je cherchais.
On ne sait pas ce que vous demandez. L'exemple n'a pas de sens. 'Even' et' Odd' ne sont pas de très bons types ou sous-classes de données. Personne ne créerait ces classes pour résoudre ce problème (print "Ceci est un nombre (pair/impair)"). Vous devez également spécifier quel type de flexibilité vous souhaitez exécuter différemment "plus tard". –
Certains pourraient le faire s'ils essayaient de sous-estimer les stratégies. –