Virtuelle Funktion

Virtuelle Funktion

Virtuelle Methode ist ein Begriff, der im Zusammenhang mit objektorientierten Programmiersprachen benutzt wird. Sie ist eine Methode einer Klasse, deren Einsprungadresse erst zur Laufzeit ermittelt wird. Dieses sogenannte dynamische Binden ermöglicht es, Klassen von einer Oberklasse abzuleiten und dabei Funktionen zu überschreiben bzw. zu überlagern. Das Konzept der virtuellen Methoden wird von einem Übersetzer (Compiler) z. B. mittels virtueller Tabellen umgesetzt.

Programmierer der Sprachen C++ oder Delphi müssen sich explizit mit dieser Thematik auseinandersetzen und entscheiden, welche Methoden sie als "virtuell" definieren. In anderen objektorientierten Programmiersprachen, wie z. B. Java, Smalltalk und Python sind alle Methoden automatisch virtuell.

Inhaltsverzeichnis

Ableiten von Klassen und Überschreiben von Methoden

In objektorientierten Programmiersprachen wie z. B. C++,C#, Delphi oder Java ist es nur möglich, Klassen zu erzeugen, indem man sie von anderen Klassen ableitet. Abgeleitete Klassen besitzen alle Methoden und Datenfelder der ursprünglichen Klasse und können durch weitere Felder und Methoden erweitert werden. In einigen Fällen ist es allerdings wünschenswert, bereits existierende Methoden abzuändern, d. h. sie neu zu schreiben. In diesem Fall spricht man von Überschreiben (C++,C#, Delphi, Java).

Durch das Ableiten von Klassen ergibt sich auch die so genannte Polymorphie (Vielgestaltigkeit). Jede Klasse repräsentiert einen eigenen Datentyp. Abgeleitete Klassen haben mindestens einen weiteren Datentyp, nämlich den der Originalklasse (auch als Basisklasse oder Oberklasse bezeichnet). Dadurch ist es zum Beispiel möglich, eine Liste von Objekten der Klasse A zu benutzen, obwohl in Wirklichkeit auch Objekte der Klasse B (die von A abgleitet wurde) in der Liste abgelegt sind.

Problematik für den Übersetzer

Ein Übersetzer (Compiler) versucht während der Übersetzung, für jede aufgerufene Funktion eine Adresse im Speicher festzulegen, an der eine Funktion oder Methode beginnt. Im späteren Programm wird die CPU bei einem Aufruf die entsprechende Adresse anspringen und weiterarbeiten (daneben wird noch einige administrative Arbeit notwendig, die hier nicht weiter von Bedeutung ist). Bei abgeleiteten Klassen mit überschriebenen oder überlagerten Methoden ist jedoch nicht immer zur Übersetzungszeit (Compilezeit) bekannt, welche Methode aufzurufen ist. Im Beispiel mit der Liste kann der Übersetzer zum Beispiel nicht immer wissen, wann andere Objekte als Objekte vom Typ A in der Liste auftauchen.

Lösung: Indirekte Adressierung

Eine Lösung ist die indirekte Adressierung über eine Tabelle. Kann der Übersetzer nicht festlegen, welche Methode angesprungen werden soll, wird nicht eine Einsprungadresse angegeben, sondern nur ein Verweis auf einen Eintrag in der Virtuellen Tabelle abgelegt. Darin stehen die konkreten Einsprungadressen, die während des Programmlaufs angesprungen werden sollen.

Beispiel: Eine Liste enthält Elemente des Typs A und B. A ist Oberklasse von B und B überschreibt die Methode m aus A. Nun soll für jedes Element die Methode m aufgerufen werden. Zu jeder Klasse gibt es daher eine Tabelle mit Adressen von Funktionen. Die verzeichneten Adressen der Tabelle von Objekten des Typs B sind andere als die der Tabelle von Objekten des Typs A. Im Maschinencode wird nun die CPU angewiesen, die Funktion aufzurufen, die an der Tabellenposition 'm' des aktuellen Objekts steht.

Abstrakte, virtuelle Methoden

Virtuelle Methoden können zusätzlich auch noch abstrakt sein. In der Klasse, in der die Methode deklariert wird, bleibt die Methode leer und kann daher auch nicht aufgerufen werden. Erst in einer abgeleiteten Klasse, wird die abstrakte Methode überschrieben und kann dann benutzt werden.

Wenn eine Klasse eine oder mehrere abstrakte Methoden enthält, wird sie als abstrakte Klasse bezeichnet. In C++ und Java ist es nicht möglich, ein Objekt einer abstrakten Klasse zu erzeugen. Borland Delphi lässt dies zu, allerdings wird bei dem Aufruf einer abstrakten Methoden eine Exception ausgelöst.


Wikimedia Foundation.

Игры ⚽ Поможем сделать НИР

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Virtuelle Methode — ist ein Begriff, der im Zusammenhang mit objektorientierten Programmiersprachen benutzt wird. Sie ist eine Methode einer Klasse, deren Einsprungadresse erst zur Laufzeit ermittelt wird. Dieses sogenannte dynamische Binden ermöglicht es, Klassen… …   Deutsch Wikipedia

  • Virtuelle Arbeit — ist ein Begriff der Analytischen Mechanik bzw. der Technischen Mechanik und bezeichnet die Arbeit, die die eingeprägten Kräfte an einem System bei einer virtuellen Verrückung leisten. Unter einer virtuellen Verrückung versteht man eine Gestalt… …   Deutsch Wikipedia

  • Virtuelle Parteigliederung — Als Virtuelle Ortsvereine, Virtuelle Landesverbände, Internet Landesverbände oder „17. Landesverband“ bezeichnet man Projekte verschiedener Parteien, über das Internet unterhaltene Gliederungen zu betreiben und so Menschen einzubinden, die an… …   Deutsch Wikipedia

  • Virtuelle Rekonstruktion vorvernichteter Stasi-Akten — Als Stasi Schnipselmaschine wird umgangssprachlich ein Computerprogramm bezeichnet, das die virtuelle Rekonstruktion zerrissener Stasi Unterlagen ermöglichen soll. Die Software wird im Auftrag der Stasi Unterlagen Behörde („Birthler Behörde“) vom …   Deutsch Wikipedia

  • Virtuelle IP-Adresse — Die Virtuelle IP Adresse (virtual IP address, gelegentlich auch VIP) bezeichnet die dynamische IP Adresse eines Aktiv/Passiv Clusters, unter der das momentan aktive Primärsystem adressiert ist. Dabei haben alle Rechner des Verbundes individuelle… …   Deutsch Wikipedia

  • Virtuelle Gesellschaft — Cybergesellschaft (engl. Cybersociety) ist in der Soziologie die Bezeichnung für die soziale Ordnung in den virtuellen Räumen moderner Computernetze, insbesondere im Internet. Es handelt sich um eine Erweiterung der menschlichen Gesellschaft. Die …   Deutsch Wikipedia

  • Lagrange-Funktion — Die Lagrange Funktion (nach Joseph Louis Lagrange) ist ein zentrales Element zur Beschreibung von physikalischen Systemen im Lagrange Formalismus der Klassischen Mechanik. Für konservative Systeme sowie für nicht konservative Systeme mit einem… …   Deutsch Wikipedia

  • Industrieroboter: Funktion und Einsatzgebiete —   Nichts ist so beständig wie der Wandel. Für kaum einen Bereich ist diese Aussage zutreffender als für unsere Industriegesellschaft. Dabei geht es weniger um neue Produkte und Produktionsverfahren. Es geht um völlig veränderte… …   Universal-Lexikon

  • Mehrspieler-Funktion — Bei Computerspielen bezeichnet Mehrspieler (engl. Multiplayer) einen Modus, bei dem man mit oder gegen andere Menschen spielt. Üblicherweise geschieht dies in einem Netzwerk (Internet, LAN Party) von mehreren separaten Computern bzw.… …   Deutsch Wikipedia

  • C-Plusplus — C++ Paradigmen: imperativ, strukturiert, objektorientiert, generisch Erscheinungsjahr: 1983 Entwickler: Bjarne Stroustrup …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”