Warum verwenden wir das Schlüsselwort "virtual" (etymologisch)? [geschlossen]

8

Die meisten Modifikatoren sind für mich sinnvoll - abstrakt, geschützt usw. Aber "virtuell" scheint eine verwirrende willkürliche Wahl für das zu sein, was wirklich "übersteuerbar" ist.

"Virtuell" in der Computertechnik (virtuelle Maschine, virtueller Speicher) scheint eine abstrakte Darstellung von etwas zu bedeuten. Ich vermute, dass dies aus der Optik stammt, wo ein virtuelles Bild (normalerweise in * vert) selbst aus dem mittelalterlichen lateinischen virtuālis stammt, was "effektiv" bedeutet.

Es scheint mir also sinnvoller zu sein, wenn die "virtuelle" Methode in der Informatik die übergeordnete ist, nicht die zu überwindende.

Vielleicht verpasse ich etwas Grundlegendes über "virtuell", kann jemand mehr Licht auf die Gründe dafür werfen, warum es ausgewählt wurde?

    
Party Ark 15.02.2011, 09:30
quelle

3 Antworten

9
___ answer7762784 ___

Wenn Sie sagen,

  

"virtuell" scheint eine verwirrende willkürliche Wahl für das zu sein, was wirklich "übersteuerbar" ist.

Ich stimme zu, dass "überschreibbar" ein besseres Keyword sein könnte, aber ich denke nicht, dass "virtuell" willkürlich ist. Ich denke, es gibt einen guten, historisch plausiblen Grund dafür, es zu benutzen.

Ein Beispiel für C ++:

%Vor%

%code% ruft echten Code auf, daher glaube ich nicht, dass %code% das richtige Wort ist. Aber welcher Code wird es anrufen? Nur weil %code% ein Zeiger auf %code% ist, heißt es nicht konnte nicht auf etwas verweisen, das von %code% erbt.

Sehen Sie, der Aufruf ist virtualisiert. Genau wie virtuelle Speicheradressen zugeordnet sind Zu realen Speicheradressen werden virtuelle Funktionsaufrufe auf reale Funktionen abgebildet Aufrufe, über die virtuelle Methodentabelle.

Laut Google bedeutet virtuell "fast oder fast wie beschrieben, aber nicht vollständig oder nach strenger Definition". Ich denke, das ist ein ziemlich anständiges Adjektiv, wenn man bedenkt, dass ein virtueller Methodenaufruf fast wie ein realer Methodenaufruf ist, abgesehen von einigen Umleitungen.

Stellen Sie sich vor, wenn virtuelle Methodenaufrufe eine brandneue Idee sind. Du könntest dir vorstellen das in der berauschenden Aufregung, eine neue Sprache zu schaffen, die sie hat direkt in eingebaut (!!!), würde man natürlich dazu neigen, dieses Schlüsselwort zu verwenden.

Schlechte %code% ist ein unschuldiger Zuschauer in all dieser Aufregung. Verwendung der %code% keyword sagt dem Compiler, dass Aufrufe an die Methode virtualisiert werden, aber es gibt eindeutig nichts "virtuelles" oder "abstraktes" etwa %code% selbst. Es ist nur der arme Trottel, der als Standard zurückbleibt Methode in der Methodentabelle.

Nun, das ist nur Vermutung, aber vielleicht gibt es einen Grund, dass C ++ den Begriff verwendet "pure virtual" zum Beschreiben einer Methode, die überschreiben soll . Vielleicht konkret Objekte des Typs %code% verwenden keine virtuellen Methodenaufrufe, auch nicht für "virtuelle" Methoden. Reine virtuelle Methoden müssten natürlich immer durch a aufgerufen werden virtuelle Methodentabelle.

    
___ qstnhdr ___ Warum verwenden wir das Schlüsselwort "virtual" (etymologisch)? [geschlossen] ___ answer5001998 ___

Betrachten Sie die folgende Codezeile:

%Vor%

Wo base eine Instanz von Base oder einer seiner untergeordneten Klassen ist.

Wenn Methode () eine virtuelle Methode ist, rufen wir nicht direkt die Funktion Method () auf. Stattdessen werden wir auf die tatsächliche Funktion "umgeleitet", abhängig davon, welche Basis ist.

Das Wort 'virtual' versucht also nicht, die Funktion selbst zu beschreiben, die in der Basisklasse deklariert ist. Es beschreibt tatsächlich die Tatsache, dass wir den Aufruf der Funktion abstrahieren wollen.

    
___ antwort5001898 ___

Ich denke, der Begriff "virtuell" ist nicht real. Zum Beispiel im Hinblick auf den virtuellen Speicher, der zu einem bestimmten Zeitpunkt durch auf realen Speicher abbildet, aber tatsächlich ein Platzhalter ist, bis das Mapping benötigt wird.

In ähnlicher Weise ist eine virtuelle Funktion ein Platzhalter, der sich irgendwann einer reellen Funktion zuordnet.

Auch wenn Sie die (etwas kindische) "vorgetäuschte" Definition verwenden, macht es Sinn:

%Vor%

In all diesen Fällen ist das "Virtuelle" etwas, das nicht real ist. Ihre Verwendung wird in etwas Wirkliches übersetzt (Emulation der Maschine, Zuordnung der Speicheradressen durch eine MMU, Aufruf einer klassenspezifischen tatsächlichen -Funktion anstelle der virtuellen usw.).

>     
___ qstntxt ___

Die meisten Modifikatoren sind für mich sinnvoll - abstrakt, geschützt usw. Aber "virtuell" scheint eine verwirrende willkürliche Wahl für das zu sein, was wirklich "übersteuerbar" ist.

"Virtuell" in der Computertechnik (virtuelle Maschine, virtueller Speicher) scheint eine abstrakte Darstellung von etwas zu bedeuten. Ich vermute, dass dies aus der Optik stammt, wo ein virtuelles Bild (normalerweise in * vert) selbst aus dem mittelalterlichen lateinischen virtuālis stammt, was "effektiv" bedeutet.

Es scheint mir also sinnvoller zu sein, wenn die "virtuelle" Methode in der Informatik die übergeordnete ist, nicht die zu überwindende.

Vielleicht verpasse ich etwas Grundlegendes über "virtuell", kann jemand mehr Licht auf die Gründe dafür werfen, warum es ausgewählt wurde?

    
___ tag123languageagnostic ___ Verwenden Sie dieses Tag zum PROGRAMMIEREN VON FRAGEN, die unabhängig von einer bestimmten Programmiersprache sind. ___ tag123virtual ___ Ein erweiterbares oder simuliertes Artefakt ___
paxdiablo 15.02.2011, 09:34
quelle
1

Wenn Sie sagen,

  

"virtuell" scheint eine verwirrende willkürliche Wahl für das zu sein, was wirklich "übersteuerbar" ist.

Ich stimme zu, dass "überschreibbar" ein besseres Keyword sein könnte, aber ich denke nicht, dass "virtuell" willkürlich ist. Ich denke, es gibt einen guten, historisch plausiblen Grund dafür, es zu benutzen.

Ein Beispiel für C ++:

%Vor%

cp->x() ruft echten Code auf, daher glaube ich nicht, dass abstract das richtige Wort ist. Aber welcher Code wird es anrufen? Nur weil cp ein Zeiger auf C ist, heißt es nicht konnte nicht auf etwas verweisen, das von C erbt.

Sehen Sie, der Aufruf ist virtualisiert. Genau wie virtuelle Speicheradressen zugeordnet sind Zu realen Speicheradressen werden virtuelle Funktionsaufrufe auf reale Funktionen abgebildet Aufrufe, über die virtuelle Methodentabelle.

Laut Google bedeutet virtuell "fast oder fast wie beschrieben, aber nicht vollständig oder nach strenger Definition". Ich denke, das ist ein ziemlich anständiges Adjektiv, wenn man bedenkt, dass ein virtueller Methodenaufruf fast wie ein realer Methodenaufruf ist, abgesehen von einigen Umleitungen.

Stellen Sie sich vor, wenn virtuelle Methodenaufrufe eine brandneue Idee sind. Du könntest dir vorstellen das in der berauschenden Aufregung, eine neue Sprache zu schaffen, die sie hat direkt in eingebaut (!!!), würde man natürlich dazu neigen, dieses Schlüsselwort zu verwenden.

Schlechte C::x() ist ein unschuldiger Zuschauer in all dieser Aufregung. Verwendung der virtual keyword sagt dem Compiler, dass Aufrufe an die Methode virtualisiert werden, aber es gibt eindeutig nichts "virtuelles" oder "abstraktes" etwa C::x() selbst. Es ist nur der arme Trottel, der als Standard zurückbleibt Methode in der Methodentabelle.

Nun, das ist nur Vermutung, aber vielleicht gibt es einen Grund, dass C ++ den Begriff verwendet "pure virtual" zum Beschreiben einer Methode, die überschreiben soll . Vielleicht konkret Objekte des Typs C verwenden keine virtuellen Methodenaufrufe, auch nicht für "virtuelle" Methoden. Reine virtuelle Methoden müssten natürlich immer durch a aufgerufen werden virtuelle Methodentabelle.

    
chreekat 14.10.2011 03:36
quelle
0

Betrachten Sie die folgende Codezeile:

%Vor%

Wo base eine Instanz von Base oder einer seiner untergeordneten Klassen ist.

Wenn Methode () eine virtuelle Methode ist, rufen wir nicht direkt die Funktion Method () auf. Stattdessen werden wir auf die tatsächliche Funktion "umgeleitet", abhängig davon, welche Basis ist.

Das Wort 'virtual' versucht also nicht, die Funktion selbst zu beschreiben, die in der Basisklasse deklariert ist. Es beschreibt tatsächlich die Tatsache, dass wir den Aufruf der Funktion abstrahieren wollen.

    
Ken Wayne VanderLinde 15.02.2011 09:45
quelle

Tags und Links