Virtual method table (original) (raw)

About DBpedia

Tabulka virtuálních metod, zkráceně TVM, je implementační mechanizmus používaný v programovacích jazycích pro podporu dynamického výběru (dynamic dispatch) funkcí za běhu. Kdykoli třída (z OOP) definuje virtuální funkci (nebo metodu), kompilátor většinou přidá schovanou členskou proměnnou do třídy, která ukazuje na tabulku virtuálních metod. Tato TVM je v principu pole ukazatelů na virtuální funkce. Při běhu (při inicializaci run-time) budou tyto pointery ukazovat na správné funkce, protože při kompilaci není známo, zda má být virtuální funkce volána z předka nebo z potomka, jako při statické deklaraci.

Property Value
dbo:abstract Tabulka virtuálních metod, zkráceně TVM, je implementační mechanizmus používaný v programovacích jazycích pro podporu dynamického výběru (dynamic dispatch) funkcí za běhu. Kdykoli třída (z OOP) definuje virtuální funkci (nebo metodu), kompilátor většinou přidá schovanou členskou proměnnou do třídy, která ukazuje na tabulku virtuálních metod. Tato TVM je v principu pole ukazatelů na virtuální funkce. Při běhu (při inicializaci run-time) budou tyto pointery ukazovat na správné funkce, protože při kompilaci není známo, zda má být virtuální funkce volána z předka nebo z potomka, jako při statické deklaraci. Je několik různých způsobů, jak implementovat dynamický výběr. Tabulka virtuálních metod je populární řešení v C++ a příbuzných jazycích (např. D a C#). (cs) Die Tabelle virtueller Methoden (englisch virtual method table oder virtual function table, kurz VMT, VFT, vtbl oder vtable) ist ein Ansatz von Compilern objektorientierter Programmiersprachen, um dynamisches Binden umzusetzen. Das ist unter anderem Grundvoraussetzung für Vererbung und Polymorphie. Eine Tabelle virtueller Methoden ist eine Datenstruktur, die Methoden auf konkrete Realisierungen (Implementierung dieser Methode) abbildet. Anstatt die Realisierungen direkt anzusprechen, werden sie mit Hilfe der Tabelle indirekt adressiert. Jeder Klasse ist eine Tabelle zugeordnet, die den virtuellen Methoden die Adresse der entsprechenden Implementierung zuordnet. In den Sprachen Java, Smalltalk und Python sind dies alle Methoden einer Klasse, in C++, den .NET-Sprachen und Object Pascal nur die als „virtuell“ gekennzeichneten. Jedes Objekt besitzt einen versteckten Zeiger auf die Tabelle der Klasse, nach deren Vorgabe es erzeugt wurde. Der Aufruf einer nicht-virtuellen Methode wird vom Compiler durch den direkten Aufruf der Implementierung übersetzt. Diese wird anhand des beim Aufruf angenommenen Typs des Objektes ermittelt. Tritt demnach ein polymorphes Objekt in der Gestalt eines seiner Vorfahren auf, so hat es den Typ des Vorfahren und es wird somit dessen Implementierung genutzt. Wird stattdessen eine virtuelle Methode aufgerufen, so übersetzt der Compiler dies in einen indirekten Aufruf der in der Tabelle adressierten Implementierung. Diese hängt nicht von dem in der Referenz auf das Objekt angenommenen Typ des Objektes ab, sondern jeweils vom ursprünglichen Typ des Objektes selbst. Implementierung der Klassen in C++: class Hund{private: string name_;public: Hund (string name) : name_(name) {} virtual ~Hund {}; virtual void sitz const =0; virtual void gibLaut const {cout << "wuff" << endl;} virtual void getName const {cout << name_ << endl;}};class Dackel: public Hund{public: Dackel (string name) : Hund(name) {} void sitz const {cout << "platz" << endl;} void gibLaut const {cout << "wau" << endl;}}; Ergibt folgende VFT, gewonnen mit: g++ -fdump-class-hierarchy hund.cpp Vtable for Hund Hund::_ZTV4Hund: 7u entries 0 (int (*)(...))0 8 (int (*)(...))(& _ZTI4Hund) 16 Hund::~Hund 24 Hund::~Hund 32 __cxa_pure_virtual 40 Hund::gibLaut 48 Hund::getName Vtable for Dackel Dackel::_ZTV6Dackel: 7u entries 0 (int (*)(...))0 8 (int (*)(...))(& _ZTI6Dackel) 16 Dackel::~Dackel 24 Dackel::~Dackel 32 Dackel::sitz 40 Dackel::gibLaut 48 Hund::getName Verwendet werden kann das dann, indem man Funktionen oder Methoden schreibt, die allgemein für einen Hund implementiert sind. void belle(const Hund &h){ h.sitz; h.gibLaut;} Übergeben werden kann dann aber ein Dackel oder eine beliebige andere Hunderasse, die vielleicht später hinzugefügt wird: int main{ Dackel d("Bello"); belle (d); return 0;} Das Beispiel soll das Konzept zeigen: An der Verwendungsstelle soll/darf zur Kompilierzeit die konkrete Ausprägung eines Objektes nicht bekannt sein. Das Objekt ist über den Typ einer Basisklasse bekannt. Der Aufruf einer Klassenfunktion führt aber immer zum Aufruf der Funktion, die dem Typ der tatsächlichen Instanz zugehört. (de) In computer programming, a virtual method table (VMT), virtual function table, virtual call table, dispatch table, vtable, or vftable is a mechanism used in a programming language to support dynamic dispatch (or run-time method binding). Whenever a class defines a virtual function (or method), most compilers add a hidden member variable to the class that points to an array of pointers to (virtual) functions called the virtual method table. These pointers are used at runtime to invoke the appropriate function implementations, because at compile time it may not yet be known if the base function is to be called or a derived one implemented by a class that inherits from the base class. There are many different ways to implement such dynamic dispatch, but use of virtual method tables is especially common among C++ and related languages (such as D and C#). Languages that separate the programmatic interface of objects from the implementation, like Visual Basic and Delphi, also tend to use this approach, because it allows objects to use a different implementation simply by using a different set of method pointers. Suppose a program contains three classes in an inheritance hierarchy: a superclass, Cat, and two subclasses, HouseCat and Lion. Class Cat defines a virtual function named speak, so its subclasses may provide an appropriate implementation (e.g. either meow or roar). When the program calls the speak function on a Cat reference (which can refer to an instance of Cat, or an instance of HouseCat or Lion), the code must be able to determine which implementation of the function the call should be dispatched to. This depends on the actual class of the object, not the class of the reference to it (Cat). The class cannot generally be determined statically (that is, at compile time), so neither can the compiler decide which function to call at that time. The call must be dispatched to the right function dynamically (that is, at run time) instead. (en) 仮想関数テーブル(かそうかんすうテーブル、英: virtual method table)あるいはvtableは、プログラミング言語の実装においてなポリモーフィズム、すなわち実行時のメソッドの束縛を実現するために用いられる機構である。 あるプログラムが、継承関係にある複数のクラス(データ型)を持っているとする。たとえばスーパークラス Cat と二つのサブクラス HouseCat と Lion において、クラス Cat が speak という仮想関数(仮想メソッド)を定義しており、サブクラスは適切な実装(鳴く、吠えるといった)を行うものとする。 プログラムがspeakメソッドをCatへのポインタp(Cat クラスおよび Cat の任意のサブクラスを指すことができる)に対して呼び出すと、実行環境は、pが指す実際のオブジェクトの種類(型)に応じてどの実装を呼び出すかを決定しなければならない。 このような動的な割り当てを実現するには様々な方法があるが、C++および関連するプログラミング言語(D言語、Java、C#など)では、vtableによる方法が一般的である。 オブジェクトのインターフェイスを実装から分離する言語(Visual Basic や Delphi など)でも、異なるメソッドポインタの集合を用いるだけで、異なる実装をオブジェクトが使用できるため、vtable による方法を採用する傾向にある。 C言語はオブジェクト指向プログラミングの機能を言語仕様としてサポートしないが、関数ポインタを利用することで仮想関数を模倣することができる。 (ja) 가상 메소드 테이블({{{2}}}, 디스패치 테이블, vtable, 또는 vftable)은 동적 디스패치(또는 런타임 메소드 바인딩)를 지원하기 위해 프로그래밍 언어에서 사용되는 메커니즘이다. 클래스가 가상 함수(또는 가상 메소드)을 정의할 때마다, 대부분의 컴파일러들은 클래스에 숨겨진 멤버 변수를 추가하는데, 이것은 (가상) 함수들에 대한 포인터들의 배열들(가상 메소드 테이블(VMT 또는 Vtable)라고 불리는)을 가리킨다. 이 포인터들은 실행 기간 도중에 정확한 함수를 가리키게 되는데, 왜냐하면 컴파일 타임에는 베이스 함수가 호출될 것인지 또는 베이스 클래스를 상속한 클래스에 의해서 구현될 지 알려져 있지 않기 때문이다. 프로그램이 상속 계층 구조의 여러 클래스들을 포함한다고 가정해보자. superclass인 Cat, 그리고 두 개의 인 HouseCat 그리고 Lion이 그것이다. Cat 클래스는 가상 함수의 이름을 speak로 정의하고, 이것의 하위 클래스들은 적절한 구현을 제공할 것이다. (예를 들면 meow 나 roar). 프로그램이 Cat 포인터의 speak 메소드를 호출한 경우 (이것은 Cat 클래스나 또는 Cat 하위 클래스를 가리킬 수 있다.), 호출하는 코드는 반드시 어떤 것을 구현할지를 결정해야 한다. (이것은 가리켜지는 객체의 실제 타입에 달려있다.) Cat 포인터에 의해 가리켜지는 객체의 타입이 컴파일 타임에 결정되지 않기 때문에, 어떤 것을 세팅할지는 컴파일 타임에 결정될 수 없다. 이러한 동적 디스패치를 구현하는 여러 다른 방법들이 있지만, vtable (virtual table) 솔루션은 특히 C++과 관련된 언어들에서 흔하다. 비주얼 베이직 또는 델파이처럼 구현 시 객체들의 프로그래매틱 인터페이스를 분리하는 언어들은 또한 vtable 접근을 사용하는 경향이 있다. 왜냐하면 이것은 단순히 다른 메소드 포인터들의 집합을 사용함으로써 객체들에게 다른 구현을 사용할 수 있게 하기 때문이다. (ko) Таблица виртуальных методов (англ. virtual method table, VMT) — или vtable — механизм, используемый в языках программирования для поддержки динамического соответствия (или метода позднего связывания). Допустим, программа содержит несколько классов в иерархии наследования: базовый класс Cat и два подкласса DomesticCat и Lion. Класс Cat определяет виртуальную функцию speak, так что его подклассы могут обеспечивать соответствующую реализацию (т.е. «мяу» или «рык»). Когда программа вызывает метод speak по указателю Cat (который может указывать на класс Cat или любой подкласс Cat), контекстное окружение (среда запуска) должна уметь определять, какая именно реализация вызывается, в зависимости от текущего типа указываемого объекта. Существует множество различных способов реализации подобного динамического связывания, но решение при помощи виртуальной таблицы весьма распространено в C++ и родственных языках (как например, D и C#). Языки, в которых есть разделение на программный интерфейс объектов и их реализацию, как Visual Basic и Delphi, также склоняются к использованию аналогов виртуальной таблицы, так как это позволяет объектам использовать другую реализацию просто используя другой набор указателей метода. (ru) Віртуальна таблиця функцій, віртуальна таблиця методів (англ. virtual method table, VMT, vtable) — механізм, що використовується реалізаціями мов програмування для підтримки динамічної диспетчеризації (або зв'язування методів під час виконання). Припустимо, програма містить декілька класів в ієрархії спадкування: суперклас, Кіт, і два підкласи, ДомашнійКіт і Лев. Нехай клас Кіт визначає віртуальний метод з назвою звучати, тоді вже його підкласи можуть забезпечити підходящу реалізацію (нявкання або ревіння). Коли програма викликає метод звучати у вказівника на Кіт (що вказує на об'єкт класу Кіт, або будь-якого його підкласу Кіт), середовище виконання має бути в змозі через дійсний тип об'єкта, на який вказує вказівник, визначити, яку саме реалізацію він має викликати. Існує багато шляхів здійснення такої динамічної диспетчеризації, але рішення за допомогою віртуальної таблиці особливо вживане серед C++ і споріднених мов (таких як D і C#). Мови, в яких відділяють програмний інтерфейс об'єкта від реалізації, такі як Visual Basic і Delphi, також тяжіють до використання аналогів віртуальних таблиць. (uk)
dbo:wikiPageID 930080 (xsd:integer)
dbo:wikiPageLength 14521 (xsd:nonNegativeInteger)
dbo:wikiPageRevisionID 1105200646 (xsd:integer)
dbo:wikiPageWikiLink dbr:Python_(programming_language) dbr:Member_variable dbr:Method_(computer_programming) dbr:Memory_address dbr:C++_syntax dbr:Bjarne_Stroustrup dbr:Delphi_(programming_language) dbr:Julia_(programming_language) dbr:Default_constructor dbr:Dynamic_dispatch dbr:Inline_expansion dbr:Compiler dbr:Run_time_(program_lifecycle_phase) dbr:Class_(computer_programming) dbr:GNU_Compiler_Collection dbr:Branch_predictor dbr:Branch_table dbr:Constructor_(object-oriented_programming) dbr:Smalltalk dbr:Subclass_(computer_science) dbr:Common_Lisp_Object_System dbr:Compile_time dbr:Computer_programming dbr:Pointer_(computer_programming) dbr:C++ dbr:C_Sharp_(programming_language) dbr:Type_conversion dbr:Dispatch_table dbr:Duck_typing dbr:Just-in-time_compilation dbr:D_(programming_language) dbr:Dylan_(programming_language) dbr:Hash_table dbr:JavaScript dbc:Articles_with_example_C++_code dbc:Method_(computer_programming) dbr:Superclass_(computer_science) dbr:Inheritance_(object-oriented_programming) dbr:Name_binding dbr:Multiple_inheritance dbr:Virtual_function dbr:Visual_Basic dbr:Programming_language dbr:Multiple_dispatch dbr:Virtual_inheritance dbr:String_interning dbr:G++ dbr:Single_dispatch dbr:Thunk_(programming) dbr:This_(computer_science) dbr:Binary_tree_dispatch
dbp:wikiPageUsesTemplate dbt:Abbr dbt:ISBN dbt:Mono dbt:Redirect dbt:Reflist dbt:Short_description dbt:Use_dmy_dates dbt:Application_binary_interface
dcterms:subject dbc:Articles_with_example_C++_code dbc:Method_(computer_programming)
gold:hypernym dbr:Mechanism
rdf:type dbo:Organisation
rdfs:comment Tabulka virtuálních metod, zkráceně TVM, je implementační mechanizmus používaný v programovacích jazycích pro podporu dynamického výběru (dynamic dispatch) funkcí za běhu. Kdykoli třída (z OOP) definuje virtuální funkci (nebo metodu), kompilátor většinou přidá schovanou členskou proměnnou do třídy, která ukazuje na tabulku virtuálních metod. Tato TVM je v principu pole ukazatelů na virtuální funkce. Při běhu (při inicializaci run-time) budou tyto pointery ukazovat na správné funkce, protože při kompilaci není známo, zda má být virtuální funkce volána z předka nebo z potomka, jako při statické deklaraci. (cs) Die Tabelle virtueller Methoden (englisch virtual method table oder virtual function table, kurz VMT, VFT, vtbl oder vtable) ist ein Ansatz von Compilern objektorientierter Programmiersprachen, um dynamisches Binden umzusetzen. Das ist unter anderem Grundvoraussetzung für Vererbung und Polymorphie. Eine Tabelle virtueller Methoden ist eine Datenstruktur, die Methoden auf konkrete Realisierungen (Implementierung dieser Methode) abbildet. Anstatt die Realisierungen direkt anzusprechen, werden sie mit Hilfe der Tabelle indirekt adressiert. Implementierung der Klassen in C++: (de) In computer programming, a virtual method table (VMT), virtual function table, virtual call table, dispatch table, vtable, or vftable is a mechanism used in a programming language to support dynamic dispatch (or run-time method binding). (en) 가상 메소드 테이블({{{2}}}, 디스패치 테이블, vtable, 또는 vftable)은 동적 디스패치(또는 런타임 메소드 바인딩)를 지원하기 위해 프로그래밍 언어에서 사용되는 메커니즘이다. 클래스가 가상 함수(또는 가상 메소드)을 정의할 때마다, 대부분의 컴파일러들은 클래스에 숨겨진 멤버 변수를 추가하는데, 이것은 (가상) 함수들에 대한 포인터들의 배열들(가상 메소드 테이블(VMT 또는 Vtable)라고 불리는)을 가리킨다. 이 포인터들은 실행 기간 도중에 정확한 함수를 가리키게 되는데, 왜냐하면 컴파일 타임에는 베이스 함수가 호출될 것인지 또는 베이스 클래스를 상속한 클래스에 의해서 구현될 지 알려져 있지 않기 때문이다. 프로그램이 상속 계층 구조의 여러 클래스들을 포함한다고 가정해보자. superclass인 Cat, 그리고 두 개의 인 HouseCat 그리고 Lion이 그것이다. Cat 클래스는 가상 함수의 이름을 speak로 정의하고, 이것의 하위 클래스들은 적절한 구현을 제공할 것이다. (예를 들면 meow 나 roar). (ko) 仮想関数テーブル(かそうかんすうテーブル、英: virtual method table)あるいはvtableは、プログラミング言語の実装においてなポリモーフィズム、すなわち実行時のメソッドの束縛を実現するために用いられる機構である。 あるプログラムが、継承関係にある複数のクラス(データ型)を持っているとする。たとえばスーパークラス Cat と二つのサブクラス HouseCat と Lion において、クラス Cat が speak という仮想関数(仮想メソッド)を定義しており、サブクラスは適切な実装(鳴く、吠えるといった)を行うものとする。 プログラムがspeakメソッドをCatへのポインタp(Cat クラスおよび Cat の任意のサブクラスを指すことができる)に対して呼び出すと、実行環境は、pが指す実際のオブジェクトの種類(型)に応じてどの実装を呼び出すかを決定しなければならない。 このような動的な割り当てを実現するには様々な方法があるが、C++および関連するプログラミング言語(D言語、Java、C#など)では、vtableによる方法が一般的である。 C言語はオブジェクト指向プログラミングの機能を言語仕様としてサポートしないが、関数ポインタを利用することで仮想関数を模倣することができる。 (ja) Віртуальна таблиця функцій, віртуальна таблиця методів (англ. virtual method table, VMT, vtable) — механізм, що використовується реалізаціями мов програмування для підтримки динамічної диспетчеризації (або зв'язування методів під час виконання). Припустимо, програма містить декілька класів в ієрархії спадкування: суперклас, Кіт, і два підкласи, ДомашнійКіт і Лев. Нехай клас Кіт визначає віртуальний метод з назвою звучати, тоді вже його підкласи можуть забезпечити підходящу реалізацію (нявкання або ревіння). (uk) Таблица виртуальных методов (англ. virtual method table, VMT) — или vtable — механизм, используемый в языках программирования для поддержки динамического соответствия (или метода позднего связывания). Допустим, программа содержит несколько классов в иерархии наследования: базовый класс Cat и два подкласса DomesticCat и Lion. Класс Cat определяет виртуальную функцию speak, так что его подклассы могут обеспечивать соответствующую реализацию (т.е. «мяу» или «рык»). (ru)
rdfs:label Tabulka virtuálních metod (cs) Tabelle virtueller Methoden (de) 가상 메소드 테이블 (ko) 仮想関数テーブル (ja) Таблица виртуальных методов (ru) Virtual method table (en) Таблиця віртуальних методів (uk)
owl:sameAs freebase:Virtual method table wikidata:Virtual method table dbpedia-cs:Virtual method table dbpedia-de:Virtual method table dbpedia-he:Virtual method table dbpedia-ja:Virtual method table dbpedia-ko:Virtual method table dbpedia-ru:Virtual method table dbpedia-simple:Virtual method table dbpedia-uk:Virtual method table https://global.dbpedia.org/id/iGqE
prov:wasDerivedFrom wikipedia-en:Virtual_method_table?oldid=1105200646&ns=0
foaf:isPrimaryTopicOf wikipedia-en:Virtual_method_table
is dbo:wikiPageDisambiguates of dbr:VMT
is dbo:wikiPageRedirects of dbr:De-virtualization dbr:Vtable dbr:Vtables dbr:Virtual_function_pointer dbr:Vftable dbr:Devirtualization dbr:VTBL dbr:Virtual_Function_Table dbr:Virtual_function_table dbr:Virtual_table dbr:Vpointer
is dbo:wikiPageWikiLink of dbr:Bjarne_Stroustrup dbr:De-virtualization dbr:Algorithmic_efficiency dbr:Double_dispatch dbr:Dynamic_dispatch dbr:Index_of_object-oriented_programming_articles dbr:Inline_caching dbr:Comparison_of_C_Sharp_and_Java dbr:Component_Object_Model dbr:Branch_table dbr:Control-flow_integrity dbr:Control_flow dbr:Dangling_pointer dbr:Smart_Pascal dbr:Host-based_intrusion_detection_system dbr:Pointer_(computer_programming) dbr:Static_variable dbr:Vtable dbr:Vtables dbr:Windows_Runtime dbr:Dispatch_table dbr:Late_binding dbr:Fragile_binary_interface_problem dbr:Hooking dbr:Threaded_code dbr:C++/CX dbr:Inheritance_(object-oriented_programming) dbr:Object_Pascal dbr:VFT dbr:VMT dbr:Virtual_function dbr:IUnknown dbr:Virtual_function_pointer dbr:Variant_type_(COM) dbr:Tagged_union dbr:Vftable dbr:Devirtualization dbr:VTBL dbr:Virtual_Function_Table dbr:Virtual_function_table dbr:Virtual_table dbr:Vpointer
is foaf:primaryTopic of wikipedia-en:Virtual_method_table