Wat is een virtuele klasse?
Een virtuele klasse is een klasse die slechts eenmaal in het geheugen wordt toegewezen, zodat kinderen van die klasse slechts één exemplaar van die bovenliggende klasse gebruiken dat in het geheugen is vastgelegd. Een klasse is een groep objecten die gemeenschappelijke kenmerken of kenmerken delen. Het maken van een klasse virtueel geeft objectgeoriënteerde programmeertalen de mogelijkheid om meerdere overerving te gebruiken wanneer tweede of meer generatie ouderklassen zijn afgeleid van gemeenschappelijke voorouderlijke basisklassen. Afhankelijk van de computerprogrammeertaal waarnaar wordt verwezen, wordt het "virtuele" trefwoord, het vergelijkbare trefwoord of de syntaxis en semantiek van een klasse gebruikt om aan te geven dat een bepaalde klasse als virtueel moet worden beschouwd.
Niet alle objectgeoriënteerde programmeertalen staan meerdere overerving toe, wat betekent dat een onderliggende klasse tegelijkertijd uit meerdere bovenliggende klassen kan worden afgeleid. In een programmeertaal zoals C ++ kan een klasse alle lidgegevens en lidfuncties van beide bovenliggende klassen tegelijk overnemen en toegang hebben tot beide sets bovenliggende gegevens en functies. Andere talen die meervoudige overerving ondersteunen, zijn Perl, Python, Tcl en Eiffel.
Er treedt een probleem op in meerdere overervingshiërarchieën wanneer twee of meer ouderklassen die worden gebruikt om een kinderklasse te maken, oorspronkelijk zijn afgeleid van slechts een of dezelfde grootouderklasse. Dit wordt het diamantprobleem genoemd, de naam die voortvloeit uit hoe de hiërarchie eruit zou zien in deze situatie. Wanneer een compilerprogramma een klasse probeert te instantiëren, zoals een kleinkindklasse gemaakt van twee ouderklassen met een gemeenschappelijke grootouder, worden twee kopieën van de grootouder in het geheugen gemaakt, één voor elke ouder.
Vanwege de dubbelzinnigheid veroorzaakt door meerdere kopieën van dezelfde grootouder in het geheugen, kan de compiler niet vaststellen welke kopie van de grootouder het kleinkind moet gebruiken om toegang te krijgen tot gegevens of functies van de grootouder. Om deze situatie te verhelpen, wordt de grootouder in C ++ tot een virtuele klas gemaakt bij het aangeven van de ouders. Hierdoor maakt de compiler slechts één kopie van de grootouder in het geheugen die beide ouders delen. Zodra de grootouder een virtuele klasse is geworden, heeft de compiler geen probleem om te beslissen hoe het kleinkind toegang moet krijgen tot de grootouder omdat er slechts één exemplaar van de grootouder is.
Grote zorg moet worden besteed bij het structureren van klassehiërarchieën, vooral wanneer deze in de toekomst worden opgenomen in of de basis worden voor veel grotere hiërarchieën. Het juiste gebruik van een virtuele klasse geeft klassenhiërarchieën meer speelruimte bij de ontwikkeling; ze kunnen echter fouten veroorzaken die moeilijk te vinden zijn. De studie van solide principes van computerprogrammeertechnieken zal helpen ervoor te zorgen dat onverwachte bijwerkingen van een onjuiste programma-organisatie niet optreden.