Forskellen Mellem Virtuelt Og Abstrakt

Forskellen Mellem Virtuelt Og Abstrakt
Forskellen Mellem Virtuelt Og Abstrakt

Video: Forskellen Mellem Virtuelt Og Abstrakt

Video: Forskellen Mellem Virtuelt Og Abstrakt
Video: Produktion af insulin i virtuelt laboratorie 2024, April
Anonim

Virtuelt vs abstrakt

Virtuelt og abstrakt er to nøgleord, der bruges i de fleste objektorienterede (OO) programmeringssprog såsom Java og C #. Selv om der er små forskelle i, hvad det betyder på forskellige sprog, giver både virtuelle og abstrakte nøgleord en følelse af delvis implementering af de enheder, det er knyttet til.

Abstrakt

Typisk kan abstrakte klasser, også kendt som abstrakte baseklasser (ABC), ikke instantieres (en forekomst af denne klasse kan ikke oprettes). Så abstrakte klasser er kun meningsfulde at have, hvis programmeringssproget understøtter arv (evne til at oprette underklasser fra at udvide en klasse). Abstrakte klasser repræsenterer normalt et abstrakt koncept eller enhed med delvis eller ingen implementering. Derfor fungerer abstrakte klasser som overordnede klasser, hvorfra barneklasser stammer, så barneklassen deler de ufuldstændige funktioner i overordnede klassen, og funktionalitet kan tilføjes for at fuldføre dem. Abstrakte klasser kan indeholde abstrakte metoder. Underklasser, der udvider en abstrakt klasse, kan implementere disse (nedarvede) abstrakte metoder. Hvis børneklassen implementerer alle sådanne abstrakte metoder, er det en konkret klasse. Men hvis det ikke gør det,børneklassen bliver også en abstrakt klasse. Hvad alt dette betyder er, at når programmøren udnævner en klasse til et abstrakt, siger hun, at klassen vil være ufuldstændig, og at den vil have elementer, der skal udfyldes med de arvende underklasser. Dette er en god måde at oprette en kontrakt mellem to programmører på, hvilket forenkler opgaver i softwareudvikling. Programmøren, der skriver kode for at arve, skal følge metodedefinitionerne nøjagtigt (men kan selvfølgelig have sin egen implementering). I Java og C # erklæres abstrakte klasser og metoder ved hjælp af abstrakt nøgleord. Dette er en god måde at oprette en kontrakt mellem to programmører på, hvilket forenkler opgaver inden for softwareudvikling. Programmøren, der skriver kode for at arve, skal følge metodedefinitionerne nøjagtigt (men kan selvfølgelig have sin egen implementering). I Java og C # erklæres abstrakte klasser og metoder ved hjælp af abstrakt nøgleord. Dette er en god måde at oprette en kontrakt mellem to programmører på, hvilket forenkler opgaver inden for softwareudvikling. Programmøren, der skriver kode for at arve, skal følge metodedefinitionerne nøjagtigt (men kan selvfølgelig have sin egen implementering). I Java og C # erklæres abstrakte klasser og metoder ved hjælp af abstrakt nøgleord.

Virtuelt

Virtuelle metoder / funktioner giver mulighed for valgfrit at tilsidesætte sin adfærd af en arvelig klasse (ved hjælp af en funktion med samme signatur). Begrebet virtuel funktion er vigtigt i det følgende scenarie. Antag, at en klasse er afledt af en underordnet klasse, så når et objekt fra den afledte klasse bruges, kan det henvise til et objekt fra basisklassen eller den afledte klasse. Men metodeopkaldsadfærd kan være tvetydig, hvis baseklassemetoderne tilsidesættes. Så for at løse denne tvetydighed bruges virtuelt nøgleord. Hvis metoden er markeret virtuel, kaldes den afledte klasses funktion (hvis nogen), ellers kaldes baseklassens funktion. For eksempel bruges virtuelt nøgleord i C ++ nøjagtigt til dette formål. I C # bruges det virtuelle nøgleord på en lignende måde, men derudovernøgleordets tilsidesættelse skal bruges til at ændre alle tilsidesatte metoder. Men i Java er der intet eksplicit virtuelt nøgleord. Alle ikke-statiske metoder betragtes som virtuelle. Virtuelle funktioner uden krop kaldes rene virtuelle funktioner. I Java og C # er abstrakte metoder rent faktisk virtuelle.

Forskel mellem virtuel og abstrakt

Selvom abstrakt og virtuelt er to nøgleord / begreber, der giver en betydning af ufuldstændig implementering af dets tilknyttede enheder, har de deres forskelle. Abstrakte metoder (som skal defineres i abstrakte klasser) har slet ikke en implementering, mens virtuelle metoder muligvis har en implementering. Hvis abstrakte metoder udvides med en konkret klasse, skal alle nedarvede abstrakte metoder implementeres, mens arvede virtuelle metoder måske tilsidesættes.

Anbefalet: