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: Abstrakt - Etherstorms (Playthrough) 2024, November
Anonim

Virtuelt mot abstrakt

Virtuelt og abstrakt 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 nøkkelord en følelse av delvis implementering av enhetene det knytter seg til.

Abstrakt

Vanligvis kan abstrakte klasser, også kjent som abstrakte baseklasser (ABC), ikke instantieres (en forekomst av den klassen kan ikke opprettes). Så abstrakte klasser er bare meningsfylte å ha hvis programmeringsspråket støtter arv (evne til å lage underklasser fra å utvide en klasse). Abstrakte klasser representerer vanligvis et abstrakt konsept eller enhet med delvis eller ingen implementering. Derfor fungerer abstrakte klasser som foreldreklasser der barneklasser er avledet, slik at barneklassen vil dele de ufullstendige funksjonene i foreldreklassen, og funksjonalitet kan legges til for å fullføre dem. Abstrakte klasser kan inneholde abstrakte metoder. Underklasser som utvider en abstrakt klasse kan implementere disse (arvelige) abstrakte metodene. Hvis barneklassen implementerer alle slike abstrakte metoder, er det en konkret klasse. Men hvis det ikke gjør det,barneklassen blir også en abstrakt klasse. Hva alt dette betyr er at når programmereren nominerer en klasse som et 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, 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. Dette er en fin måte å lage en kontrakt mellom to programmerere, 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. Dette er en fin måte å lage en kontrakt mellom to programmerere, 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.

Virtuell

Virtuelle metoder / funksjoner gir muligheten til å valgfritt overstyre oppførselen av en arveklasse (ved hjelp av en funksjon med samme signatur). Konseptet virtuell funksjon er viktig i følgende scenario. Anta at en klasse er avledet av en barneklasse, så når et objekt av den avledede klassen brukes, kan det referere til et objekt fra basisklassen eller den avledede klassen. Men metodeanropsatferd kan være tvetydig hvis baseklassemetodene overstyres. Så, for å løse denne tvetydigheten, brukes virtuelt nøkkelord. Hvis metoden er merket virtuell, kalles den avledede klassens funksjon (hvis noen), ellers kalles baseklassens funksjon. For eksempel, i C ++, brukes virtuelt nøkkelord nøyaktig for dette formålet. I C # brukes det virtuelle nøkkelordet på en lignende måte, men i tilleggsøkeordoverstyringen skal brukes til å endre alle overstyrte metoder. Men i Java er det ikke noe eksplisitt virtuelt nøkkelord. Alle ikke-statiske metoder regnes som virtuelle. Virtuelle funksjoner uten kropp kalles rene virtuelle 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 / begreper som gir en betydning av ufullstendig implementering av de tilknyttede enhetene, har de forskjellene. 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 arvede abstrakte metoder implementeres, mens arvede virtuelle metoder kan overstyres eller ikke.

Anbefalt: