En programmation orientée objet, la sélection simple (ou sélection de méthode à aiguillage simple) traduit le fait qu'un seul argument est utilisé par le compilateur pour sélectionner la méthode à appeler. Exemple (donné en C++) :

class C {
public:
   void f(D* d){/*...*/}
   void f(Derived* d){/*...*/}
};

class D {};

class Derived : public D{
public:
   void g(){}
};


/* ... */
D* myD = new Derived;
C* c = new C;

c->f(myD);

On pourrait s'attendre à ce que l'expression c->f(myD) appelle la méthode C::f(Derived*). Il n'en est rien. En fait le compilateur ne s'est basé que sur le type réel de c (C*), mais n'a pas cherché à connaître le type réel de myD (Derived), dont il n'a retenu que le type apparent (D*). Ainsi, le compilateur a choisi la méthode C::f(D*). Ce comportement est implémenté en C++, Java et bien d'autres langages. Pour pallier cela, il faut utiliser le design pattern visiteur en C++, ou l'introspection en Java.

Notes et références

modifier