Forskjellen mellom virtuell og abstrakt

Forskjellen mellom virtuell og abstrakt
Forskjellen mellom virtuell og abstrakt

Video: Forskjellen mellom virtuell og abstrakt

Video: Forskjellen mellom virtuell og abstrakt
Video: SAAS ONESK 2024, Juli
Anonim

Virtual vs Abstract

Virtual and Abstract er to nøkkelord som brukes i de fleste objektorienterte (OO) programmeringsspråk som Java og C. Selv om det er små forskjeller i hva det betyr på forskjellige språk, gir både virtuelle og abstrakte søkeord en følelse av delvis implementering til enhetene de knytter seg til.

Abstract

Vanligvis kan abstrakte klasser, også kjent som Abstrakte Base Classes (ABC), ikke instansieres (en forekomst av den klassen kan ikke opprettes). Så abstrakte klasser er bare meningsfulle å ha hvis programmeringsspråket støtter arv (evne til å lage underklasser fra å utvide en klasse). Abstrakte klasser representerer vanligvis et abstrakt konsept eller entitet med delvis eller ingen implementering. Derfor fungerer abstrakte klasser som overordnede klasser som barneklasser er avledet fra, slik at barneklassen vil dele de ufullstendige funksjonene til overordnet klasse og funksjonalitet kan legges til for å fullføre dem. Abstrakte klasser kan inneholde abstrakte metoder. Underklasser som utvider en abstrakt klasse kan implementere disse (arvede) abstrakte metodene. Hvis barneklassen implementerer alle slike abstrakte metoder, er det en konkret klasse. Men hvis den ikke gjør det, blir barneklassen også en abstrakt klasse. Hva alt dette betyr er at når programmereren nominerer en klasse som en abstrakt, sier hun at klassen vil være ufullstendig og den vil ha elementer som må fullføres av de arvende underklassene. Dette er en fin måte å lage en kontrakt mellom to programmerere på, som forenkler oppgaver innen programvareutvikling. Programmereren, som skriver kode for å arve, må følge metodedefinisjonene nøyaktig (men kan selvfølgelig ha sin egen implementering). I Java og C blir abstrakte klasser og metoder erklært ved hjelp av abstrakt nøkkelord.

Virtual

Virtuelle metoder/funksjoner gir muligheten til valgfritt å overstyre oppførselen med en arvende klasse (ved å bruke en funksjon med samme signatur). Konseptet med virtuell funksjon er viktig i følgende scenario. Anta at en klasse er avledet av en barneklasse, så hver gang et objekt av den avledede klassen brukes, kan det referere til et objekt av basisklassen eller den avledede klassen. Men metodeanropsadferd kan være tvetydig hvis basisklassemetodene overstyres. Så, for å løse denne tvetydigheten, brukes Virtuelt nøkkelord. Hvis metoden er merket Virtual, kalles den avledede klassens funksjon (hvis noen), ellers kalles basisklassens funksjon. For eksempel, i C++, brukes virtuelle nøkkelord akkurat til dette formålet. I C brukes det virtuelle nøkkelordet på lignende måte, men i tillegg bør nøkkelordet overstyring brukes til å modifisere alle overstyrte metoder. Men i Java er det ikke noe eksplisitt virtuelt nøkkelord. Alle ikke-statiske metoder anses som virtuelle. Virtuelle funksjoner uten kropp kalles Pure Virtual-funksjoner. I Java og C er abstrakte metoder faktisk Pure Virtual.

Forskjellen mellom virtuell og abstrakt

Selv om abstrakt og virtuelt er to nøkkelord/konsepter som gir en betydning av ufullstendig implementering til de tilknyttede enhetene, har de sine forskjeller. Abstrakte metoder (som må defineres i abstrakte klasser) har ikke en implementering i det hele tatt, mens virtuelle metoder kan ha en implementering. Hvis abstrakte metoder utvides med en konkret klasse, må alle nedarvede abstrakte metoder implementeres, mens nedarvede virtuelle metoder kan overstyres eller ikke.

Anbefalt: