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 overordnede klassen 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 hvilket dataprogrammeringsspråk det er referert til, brukes det "virtuelle" nøkkelordet, lignende nøkkelord eller syntaks og semantikk for 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 avledes fra flere foreldreklasser samtidig. På et programmeringsspråk som C ++ kan en klasse arve alle medlemsdataene og medlemsfunksjonene fra begge foreldreklassene samtidig og ha tilgang til begge sett med foreldredata 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 brukes til å opprette en barneklasse opprinnelig er avledet fra 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 å sette i gang en klasse, for eksempel en barnebarnsklasse laget av to foreldreklasser med en felles besteforelder, lages to eksemplarer av besteforelderen i minnet, ett for hver forelder.

På grunn av tvetydigheten forårsaket av flere kopier av samme besteforelder i minnet, klarer ikke kompilatoren å finne ut hvilken kopi av besteforeldre barnebarnet skal bruke for å få tilgang til besteforeldres data eller funksjoner. For å bøte på denne situasjonen blir besteforeldre i C ++ gjort til en virtuell klasse når de erklærer foreldrene. Dette fører til at kompilatoren bare lager en kopi av besteforelderen til minne som begge foreldrene deler. Når besteforeldren har blitt en virtuell klasse, har ikke kompilatoren noe problem med å bestemme hvordan barnebarnet skal få tilgang til besteforeldre fordi det bare er en kopi av besteforeldre.

Stor forsiktighet bør tas når du strukturerer klassehierarkier, spesielt når de vil bli inkludert i eller bli base for mye større hierarkier i fremtiden. Riktig utnyttelse av en virtuell klasse gir klassehierarkier større breddegrad i utvikling; de kan imidlertid forårsake feil som er vanskelige å finne. Studiet av solide prinsipper for dataprogrammeringsteknikk vil bidra til å sikre at uventede bivirkninger fra feil programorganisasjon ikke forekommer.

ANDRE SPRÅK

Hjalp denne artikkelen deg? Takk for tilbakemeldingen Takk for tilbakemeldingen

Hvordan kan vi hjelpe? Hvordan kan vi hjelpe?