Wat is een virtuele klasse?

Een virtuele klasse is een klasse die slechts eenmaal in het geheugen wordt toegewezen, zodat kinderen van die klasse alleen de ene kopie van die ouderklasse gebruiken die in het geheugen is vastgesteld. Een klasse is een groep objecten die gemeenschappelijke eigenschappen of attributen delen. Het maken van een klassenvirtueel 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, worden het "virtuele" trefwoord, soortgelijke trefwoord of syntaxis en semantiek van een klasse gebruikt om te impliceren dat een bepaalde klasse als virtueel moet worden beschouwd.

Niet alle objectgeoriënteerde programmeertalen staan ​​meerdere erfenis toe, wat is wanneer een kindklasse kan worden afgeleid uit meerdere ouderklassen in dezelfde tijd. In een programmeertaal zoals C ++ kan een klasse alle ledengegevens en ledenfuncties van beide bovenliggende klassen in één keer erven en toegang hebben tot beide sets parENT -gegevens en functies. Andere talen die meerdere erfenis ondersteunen, zijn Perl, Python, TCL en Eiffel.

Een probleem treedt op in meerdere overervinghiërarchieën wanneer twee of meer ouderklassen die worden gebruikt om een ​​kindklasse te maken, oorspronkelijk zijn afgeleid van slechts één of dezelfde grootouderklasse. Dit wordt het diamantprobleem genoemd, de naam die voortkomt uit hoe de hiërarchie eruit zou zien in deze situatie. Wanneer een compilerprogramma een klasse probeert te instantiëren, zoals een kleinkind -klasse gemaakt van twee ouderklassen met een gemeenschappelijke grootouder, worden twee exemplaren 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 zou moeten gebruiken om toegang te krijgen tot grootoudergegevens of functies. Om deze situatie te verhelpen, wordt in C ++ de grootouder tot een deugd gemaaktual -klasse bij het verklaren van de ouders. Dit zorgt ervoor dat de compiler slechts één kopie van de grootouder in het geheugen maakt 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 maar één exemplaar van de grootouder is.

Er moet veel zorg worden besteed bij het structureren van klassenhiërarchieën, vooral wanneer ze in de toekomst in de basis worden opgenomen of de basis worden voor veel grotere hiërarchieën. Het juiste gebruik van een virtuele klasse geeft klassenhiërarchieën een grotere breedtegraad in ontwikkeling; Ze hebben echter het potentieel om fouten te veroorzaken die moeilijk te vinden zijn. De studie van solide computerprogrammeer engineeringprincipes zal helpen ervoor te zorgen dat onverwachte bijwerkingen van de onjuiste programma -organisatie niet optreden.

ANDERE TALEN