9
votes

Pourquoi utilisons-nous le mot-clé «Virtual» (Etymologiquement)?

La plupart des modificateurs ont un sens pour moi - abstrait, protégé, etc. mais "virtuel" semble un choix arbitraire déroutant pour ce qui est vraiment "excessival".

'virtuel' en informatique (machine virtuelle, mémoire virtuelle) semble signifier une représentation abstraite de quelque chose. Je suppose que cela provient de l'optique, où une image virtuelle (généralement dans * em> vert * ED) est issue de virtuālis latin médiévaux, ce qui signifie "efficace".

Donc, il me semble que cela aurait plus de sens si la méthode "virtuelle" en informatique était la primordiale, pas la nervure unique.

Peut-être que je manque quelque chose de fondamental sur "virtuel", quelqu'un peut-il perdre de plus de lumière pourquoi il a été choisi?


4 commentaires

+1 C'est une excellente question. Je suis vraiment curieux d'apprendre le résultat.


Cela ne serait-il pas plus approprié sur les programmeurs.se?


Une note pour le curieux: la racine de virtuelle (virtūs, vertu) n'a rien à voir avec Inverser (Vertere, à tour de rôle).


Je vote pour fermer cette question comme hors-sujet car cette question ne concerne pas un problème de programmation pratique, comme disposé dans le centre d'aide .


3 Réponses :


9
votes

J'ai tendance à penser au terme "virtuel" comme signifiant non réel. Tels que, en termes de mémoire virtuelle, il est à travers à la mémoire réelle à un moment donné, mais est vraiment un espace réservé jusqu'à ce que le mappage soit nécessaire.

De même, une fonction virtuelle est un espace réservé qui passe à travers à une fonction réelle à un moment donné.

Même si vous utilisez la définition (un peu enfantine) «prétendre», cela a du sens: xxx

dans tout Ces cas, le "virtuel" est quelque chose qui n'est pas réel. L'utilisation d'eux est traduite dans quelque chose de réel (émulant la machine, cartographiant les adresses de mémoire via un MMU, appelant une fonction spécifique à une classe plutôt que le virtuel, et ainsi de suite).


2 commentaires

Merci. Mais cela n'a aucun sens que si vous voyez virtuel de la même manière que le résumé; C'est-à-dire quelque chose que vous attendez-vous être remplacé. Dans ce cas, vous le feriez abstrait de commencer! Dans votre exemple avec mémoire, l'analogie avec la programmation serait que la mémoire virtuelle "remplace" la mémoire réelle. Mais dans la programmation, nous appelons la "chose" i> vraie "virtuelle", qui est le opposé de ce que j'attendrais.


Permettez-moi de clarifier ce que je voulais dire. Je pense que votre description a raison mais, de mon pov, vous avez le véritable / virtuel mélangé. Mon point de vue est que la fonction de la classe base est virtuelle car, quand il vient le temps de l'appeler, il fera tomber en réalité la fonction réelle, celle de la classe dérivée (en supposant que la classe a été dérivé de, bien sûr).



0
votes

Considérez la ligne de code suivante:

base.Method();


1 commentaires

Sûrement si nous voulions abstrumer l'appel de la fonction, nous le décririons comme abstrait en premier lieu? L'utilisation de ce mot clé donne un sens pour moi. Mais en la décrivant comme «virtuel», cela implique le contraire de ce que c'est, lequel est la fonction réelle disponible pour être abstraite si vous le souhaitez. Donc, il serait plus logique d'appeler la méthode dérivée virtuelle.



1
votes

Quand vous dites,

"virtuel" semble un choix arbitraire déroutant pour ce qui est vraiment "ultérieur" p> BlockQuote>

Je suis d'accord que "Nurshable" pourrait être un meilleur mot-clé, mais je ne pense pas que "virtuel" est arbitraire. Je pense qu'il y a une bonne raison historiquement plausible de l'utiliser. P>

Quelques exemple C ++: P>

class C {
    virtual int x() { ... }
    ...
}

C *cp;

...

cp->x();


0 commentaires