Qu'est-ce qu'une classe virtuelle?
Une classe virtuelle est une classe allouée une seule fois en mémoire, de sorte que les enfants de cette classe n'utilisent que la copie de cette classe parente établie en mémoire. Une classe est un groupe d'objets partageant des traits ou des attributs communs. Rendre une classe virtuelle donne aux langages de programmation orientés objet la possibilité d'utiliser plusieurs héritages lorsque des classes mères de deuxième génération ou plus sont dérivées de classes de base ancestrales communes. En fonction du langage de programmation informatique référencé, le mot clé "virtual", un mot clé similaire ou la syntaxe et la sémantique d'une classe sont utilisés pour impliquer qu'une classe particulière doit être considérée comme virtuelle.
Tous les langages de programmation orientés objet ne permettent pas l'héritage multiple, c'est-à-dire lorsqu'une classe enfant peut être dérivée de plusieurs classes parent en même temps. Dans un langage de programmation tel que C ++, une classe peut hériter simultanément de toutes les données membres et de toutes les fonctions membres des deux classes parents et avoir accès aux deux ensembles de données et fonctions parents. Les autres langues prenant en charge l'héritage multiple incluent Perl, Python, Tcl et Eiffel.
Un problème survient dans plusieurs hiérarchies d'héritage lorsque deux ou plusieurs classes parent utilisées pour créer une classe enfant sont dérivées à l'origine d'une seule ou de la même classe de grands-parents. C'est ce qu'on appelle le problème des diamants, le nom provenant de l'apparence de la hiérarchie dans cette situation. Lorsqu'un programme de compilateur tente d'instancier une classe, telle qu'une classe de petits-enfants constituée de deux classes parent avec un grand-parent commun, deux copies du grand-parent sont créées en mémoire, une pour chaque parent.
En raison de l'ambiguïté causée par plusieurs copies du même grand-parent en mémoire, le compilateur n'est pas en mesure de déterminer quelle copie du grand-parent devrait être utilisée par le petit-enfant pour accéder aux données ou fonctions des grands-parents. Pour remédier à cette situation, en C ++, le grand-parent est transformé en classe virtuelle lors de la déclaration des parents. Cela oblige le compilateur à ne créer qu'une seule copie du grand-parent en mémoire que les deux parents partagent. Une fois que le grand-parent est devenu une classe virtuelle, le compilateur n'a aucun problème à décider de la manière dont le petit-enfant doit accéder au grand-parent car il n'y a qu'un seul exemplaire du grand-parent.
Il convient de faire très attention lors de la structuration des hiérarchies de classes, en particulier lorsqu'elles seront incluses ou deviendront la base de hiérarchies beaucoup plus vastes dans le futur. L'utilisation correcte d'une classe virtuelle donne aux hiérarchies de classes une plus grande latitude dans le développement; Cependant, ils peuvent potentiellement provoquer des erreurs difficiles à localiser. L'étude de principes d'ingénierie de programmation informatique solides aidera à garantir que des effets secondaires inattendus résultant d'une organisation inappropriée du programme ne se produisent pas.