Sélection simple
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.