La méthode de
substitution est utilisé dans la programmation orientée objet dans une
hiérarchie d'héritage, et il se produit lorsque une méthode définie dans une
superclasse est redéfinie dans une sous-classe. Habituellement, la méthode de
la sous-classe ne quelque chose de différent que la méthode de superclasse ou
étend sur une capacité de la superclasse, mais cela ne doit pas être le cas.
Méthode de substitution se produit chaque fois une méthode de classe est
redéfinie dans une sous-classe, quel que soit le contenu de la méthode
redéfinie. Les signatures de méthode redéfinies doivent être exactement les
mêmes.
Par exemple, une
classe A peut contenir une méthode appelée "faireQuelqueChose," et
cette méthode ne prend pas de paramètres d'entrée. En outre, les classes B et C
des sous-classes de la classe A. Classe B peut contenir une méthode appelée
"faireQuelqueChose," qui ne prend pas de paramètres d'entrée, et la
classe C peut contenir une méthode "faireQuelqueChose" qui prend un
nombre comme un paramètre d'entrée. Dans cet exemple, seule classe B
démontrerait méthode de substitution, parce que sa méthode
"faireQuelqueChose" a la même signature de méthode que sa
superclasse, classe A. La méthode "faireQuelqueChose" dans la classe
C, d'autre part, démontre la surcharge de méthode, car elle crée une méthode
entièrement nouvelle.
L'héritage
virtuel en C + + est un autre exemple de méthode de substitution. Les méthodes
virtuelles dans des super pourraient ou ne pourraient pas être mises en œuvre,
mais aucune définition de la sous-classe d'entre eux est un exemple de méthode
de substitution. Lorsqu'une méthode est substituée dans une sous-classe, le
procédé de la super-classe n'est pas appelé à moins qu'il soit demandé
explicitement. De cette façon spécifique de l'appel d'une méthode substituée
est souvent dit à «cacher» la mise en œuvre de la superclasse.
Bien que méthode
de substitution est très flexible, toutes les méthodes peuvent être remplacées,
et il y a des moments où cette rigidité peut être préférable. En Java et C + +,
des mots clés spécifiques peuvent être appliquées dans les signatures de
méthode pour éviter une méthode d'être de substitution dans une sous-classe.
Pour ce faire, Java utilise la "finale" mot-clé , et C + + utilise la
"const" mot-clé. Prévention méthode de substitution peut être bénéfique
si une fonction particulière doit toujours être inchangée pendant un arbre
d'héritage.
En général, les
méthodes simples qui obtiennent de petits morceaux de données ne devraient pas
avoir à être redéfinie. Les cas qui ont tendance à bénéficier le plus de la
substitution sont quand une sous-classe vise à ajouter des fonctionnalités à
une méthode de classe sans créer une méthode entièrement nouvelle pour le
faire. Cas exceptionnels où une méthode a besoin d'être entièrement refaite
pour un type spécifique d'objet peuvent également bénéficier de cette
technique. Chaque fois qu'une méthode est substituée, il est important pour le
programmeur de commenter de manière adéquate à la fois la superclasse et les
méthodes de sous-classes. Idéalement, ces commentaires devraient préciser ce
que chaque variante de la méthode fait, ainsi que comment et pourquoi elles
diffèrent.