Pépère
L'un des principes fondamentaux en programmation par objets est l'héritage. Cette technique consiste à préciser d'une façon simple qu'une classe (d'objets) de base - regroupant des données et les fonctions ayant le droit de les manipuler - est dupliquée dans une classe dérivée qui, elle, ajoute d'autres définitions de données et/ou fonctions. Une classe de base peut avoir autant de classes dérivées que souhaité, elles-mêmes pouvant être dérivées à leur tour, etc., donnant une hiérarchie de classes. C'est une méthode très efficace pour ordonner des fonctionnalités et leur conserver une cohérence.
Parmi les fonctions d'une classe, il y en a qui sont particulières et qualifiées de virtuelles. Leur spécificité vient du fait qu'une telle fonction d'une classe de base peut être entièrement remplacée par une autre ayant la même interface dans la classe dérivée. Même les appels aux fonctions virtuelles situés dans la classe de base seront, lorsque cette dernière est incluse dans une classe dérivée, correctement orientés vers leurs substituts par une sorte de tour de passe-passe découlant du mécanisme propre à celles-ci.
On va encore un peu plus loin grâce au polymorphisme. L'idée en est qu'une référence vers une classe de base peut indifféremment être utilisée avec ses classes dérivées. Ainsi il est possible de transmettre à une fonction devant recevoir un objet de base l'un quelconque des objets de la hiérarchie dérivée (mais pas l'inverse). Seules les fonctions dont l'interface est définie dans la classe de base pourront être appelées mais, dans le cas des fonctions virtuelles, ce seront bien les substituts qui réaliseront le traitement.
Le polymorphisme permet de régler facilement des situations courantes : si des imprimantes de différents types peuvent être utilisées avec un logiciel, il suffira que celui ci choisisse un objet parmi ceux qui leur correspondent pour formater correctement des documents en y incluant des séquences spécifiques (bien que la question ne se pose plus avec Windows). C'est une solution économique en taille et en temps d'exécution car il n'y a besoin de sélectionner le bon objet qu'au moment de sa création. Il sera ensuite communiqué partout où il devra être employé sans qu'il y ait d'autres complications.