Was ist eine virtuelle Klasse?
Eine virtuelle Klasse ist eine Klasse, die nur einmal im Speicher zugewiesen wird, sodass Kinder dieser Klasse nur die eine Kopie dieser übergeordneten Klasse verwenden, die im Speicher eingerichtet ist. Eine Klasse ist eine Gruppe von Objekten, die gemeinsame Merkmale oder Attribute aufweisen. Indem Sie eine Klasse virtuell machen, können objektorientierte Programmiersprachen Mehrfachvererbung verwenden, wenn Elternklassen der zweiten oder mehreren Generationen von gemeinsamen Stammklassen abgeleitet werden. Abhängig von der referenzierten Computerprogrammiersprache implizieren das "virtuelle" Schlüsselwort, ein ähnliches Schlüsselwort oder die Syntax und Semantik einer Klasse, dass eine bestimmte Klasse als virtuell anzusehen ist.
Nicht alle objektorientierten Programmiersprachen erlauben Mehrfachvererbung. Dies ist der Fall, wenn eine untergeordnete Klasse gleichzeitig von mehreren übergeordneten Klassen abgeleitet werden kann. In einer Programmiersprache wie C ++ kann eine Klasse alle Elementdaten und Elementfunktionen von beiden übergeordneten Klassen gleichzeitig erben und Zugriff auf beide Sätze von übergeordneten Daten und Funktionen haben. Andere Sprachen, die Mehrfachvererbung unterstützen, sind Perl, Python, Tcl und Eiffel.
Ein Problem tritt bei mehreren Vererbungshierarchien auf, wenn zwei oder mehr Elternklassen, die zum Erstellen einer untergeordneten Klasse verwendet wurden, ursprünglich nur von einer oder derselben Großelternklasse abgeleitet wurden. Dies wird als Diamantproblem bezeichnet. Der Name ergibt sich aus der Art und Weise, wie die Hierarchie in dieser Situation aussehen würde. Wenn ein Compilerprogramm versucht, eine Klasse zu instanziieren, z. B. eine Enkelklasse, die aus zwei Elternklassen mit einem gemeinsamen Großelternteil besteht, werden zwei Kopien des Großelternteils im Speicher erstellt, eine für jedes Elternteil.
Aufgrund der Mehrdeutigkeit, die durch mehrere Kopien desselben Großelternteils im Speicher verursacht wird, kann der Compiler nicht ermitteln, welche Kopie des Großelternteils das Enkelkind für den Zugriff auf Daten oder Funktionen des Großelternteils verwenden soll. Um diesem Umstand abzuhelfen, wird in C ++ der Großelternteil bei der Deklaration der Eltern zu einer virtuellen Klasse. Dies führt dazu, dass der Compiler nur eine Kopie des Großelternteils im Speicher erstellt, die beide Elternteile gemeinsam nutzen. Sobald der Großelternteil zu einer virtuellen Klasse geworden ist, kann der Compiler problemlos entscheiden, wie der Enkel auf den Großelternteil zugreifen soll, da nur eine Kopie des Großelternteils vorhanden ist.
Bei der Strukturierung von Klassenhierarchien ist besondere Vorsicht geboten, insbesondere dann, wenn sie in viel größere Hierarchien einbezogen werden oder in Zukunft als Grundlage dienen werden. Durch die ordnungsgemäße Verwendung einer virtuellen Klasse erhalten Klassenhierarchien einen größeren Entwicklungsspielraum. Sie können jedoch Fehler verursachen, die schwer zu lokalisieren sind. Das Studium solider Prinzipien der Computerprogrammierung trägt dazu bei, dass unerwartete Nebenwirkungen durch eine unsachgemäße Programmorganisation vermieden werden.