Virtual vs Abstract
Virtual og Abstract er to søkeord som brukes i de fleste Objektorientert (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 den legger 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 meningsfulle å ha hvis programmeringsspråket støtter arv (evne til å lage undergrupper fra å utvide en klasse). Abstrakte klasser representerer vanligvis et abstrakt konsept eller enhet med delvis eller ingen implementering. Derfor fungerer Abstrakte klasser som foreldreklasser fra hvilke barneklasser er avledet, slik at barneklassen vil dele de ufullstendige egenskapene til foreldreklassen og funksjonaliteten kan legges til for å fullføre dem. Abstrakte klasser kan inneholde abstrakte metoder. Underklasser som utvider en abstrakt klasse, kan implementere disse (arvede) abstrakte metoder. Hvis barnklassen implementerer alle slike abstrakte metoder, er det en konkret klasse. Men hvis det ikke blir barnklassen også en abstrakt klasse. Hva dette betyr er at når programmøren nominerer en klasse som et abstrakt, sier hun at klassen vil være ufullstendig og den vil ha elementer som må fylles ut av arvelige underklasser. Dette er en fin måte å skape en kontrakt mellom to programmører, noe som forenkler oppgavene i programvareutvikling. Programmøren, som skriver kode for å arve, må følge metoden definisjonene nøyaktig (men selvfølgelig kan hun selv gjennomføre). I Java og C # er abstrakte klasser og metoder deklarert ved hjelp av abstrakt søkeord.
Virtuell
Virtuelle metoder / funksjoner gir muligheten til å eventuelt overstyre sin oppførsel ved en arvelig klasse (ved hjelp av 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å når en gjenstand av den avledede klassen blir brukt, kan den referere til en gjenstand fra grunnklassen eller den avledede klassen. Men metodeoppførsel kan være tvetydig dersom basisklassemetodene overskrides. Så, for å løse denne tvetydigheten, brukes virtuelt søkeord. Hvis metoden er merket Virtual, kalles den avledede klassens funksjon (hvis noen), ellers kalles baseklassens funksjon. For eksempel, i C + +, brukes virtuelt søkeord nøyaktig for dette formålet. I C # brukes det virtuelle søkeordet på en lignende måte, men i tillegg bør overordnet søkeord brukes til å endre alle overstyrte metoder. Men i Java er det ikke noe eksplisitt virtuelt søkeord. Alle ikke-statiske metoder betraktes som virtuelle. Virtuelle funksjoner uten kropp kalles rene virtuelle funksjoner. I Java og C # er abstrakte metoder faktisk rene virtuelle.
Forskjellen mellom virtuelt og abstrakt
Selv om Abstract and Virtual er to søkeord / begreper som gir en mening om ufullstendig implementering til de tilknyttede enhetene, har de forskjeller. Abstrakte metoder (som må defineres inne i abstrakte klasser) har ingen gjennomføring i det hele tatt, mens virtuelle metoder kan ha en implementering. Hvis abstrakte metoder utvides av en konkret klasse, må alle arvede abstrakte metoder implementeres, mens de er arvet. Virtuelle metoder kan eller ikke overstyres.