Hva er en virtuell klasse?
En virtuell klasse er en klasse som bare tildeles en gang i minnet, slik at barn i den klassen bare bruker den ene kopien av den foreldreklassen som er etablert i minnet. En klasse er en gruppe objekter som deler vanlige egenskaper eller attributter. Å lage en virtuell klasse gir objektorienterte programmeringsspråk muligheten til å bruke flere arv når andre eller flere generasjons foreldreklasser er avledet fra vanlige forfedres baseklasser. Avhengig av dataprogrammeringsspråket som er referert til, brukes det "virtuelle" nøkkelordet, lignende nøkkelord eller syntaks og semantikk i en klasse for å antyde at en bestemt klasse skal betraktes som virtuell.
Ikke alle objektorienterte programmeringsspråk tillater flere arv, som er når en barneklasse kan være stammet fra flere foreldreklasser på det samme. På et programmeringsspråk som C ++ kan en klasse arve alle medlemsdata og medlemsfunksjoner fra begge foreldreklasser samtidig og ha tilgang til begge sett med parent data og funksjoner. Andre språk som støtter flere arv inkluderer Perl, Python, TCL og Eiffel.
Et problem oppstår i flere arvehierarkier når to eller flere foreldreklasser som ble brukt til å lage en barneklasse opprinnelig er avledet fra bare en eller samme besteforeldreklasse. Dette kalles diamantproblemet, navnet som stammer fra hvordan hierarkiet ville se ut i denne situasjonen. Når et kompilatorprogram prøver å instantisere en klasse, for eksempel en barnebarnsklasse laget av to foreldreklasser med en felles besteforeldre, er to eksemplarer av besteforeldre laget i minnet, en for hver av foreldrene.
På grunn av tvetydigheten forårsaket av flere kopier av samme besteforelder i minnet, er kompilatoren ikke i stand til å finne ut hvilken kopi av besteforeldrene barnebarnet skal bruke for å få tilgang til besteforeldre data eller funksjoner. For å avhjelpe denne situasjonen, i C ++, blir besteforelderen gjort til en virtUAL -klasse når de erklærer foreldrene. Dette fører til at kompilatoren bare lager en kopi av besteforeldrene i minnet som begge foreldrene deler. Når besteforelderen har blitt en virtuell klasse, har kompilatoren ingen problemer med å avgjøre hvordan barnebarnet skal få tilgang til besteforeldrene fordi det bare er en kopi av besteforeldrene.
Det bør tas stor forsiktighet når du strukturerer klassehierarkier, spesielt når de vil bli inkludert i eller bli basen for mye større hierarkier i fremtiden. Riktig utnyttelse av en virtuell klasse gir klassehierarkier større breddegrad i utviklingen; Imidlertid har de potensial til å forårsake feil som er vanskelige å finne. Studien av solide dataprogrammeringstekniske prinsipper vil bidra til å sikre at uventede bivirkninger fra feil programorganisasjon ikke oppstår.