Forskel mellem virtuelle og abstrakte

Anonim

Virtual vs Abstract

Virtual og Abstract er to søgeord, der anvendes i de fleste objektorienterede programmeringssprog som Java og C #. Selvom der er små forskelle i, hvad det betyder på forskellige sprog, giver både virtuelle og abstrakte søgeord en følelse af delvis implementering til de enheder, den tillægger.

Abstrakt

Typisk kan abstrakte klasser, også kendt som abstrakte basisklasser (ABC), ikke instantieres (en forekomst af denne klasse kan ikke oprettes). Så, abstrakte klasser er kun meningsfulde at have, hvis programmeringssproget understøtter arv (evnen til at oprette undergrupper fra at udvide en klasse). Abstrakte klasser repræsenterer normalt et abstrakt begreb eller enhed med delvis eller ingen implementering. Derfor fungerer Abstrakte klasser som forældrenes klasser, hvorfra børnesklasserne er afledt, så barneklassen deler de ufuldstændige træk i forældrenes klasse, og funktionaliteten kan tilføjes for at fuldføre dem. Abstrakte klasser kan indeholde abstrakte metoder. Underklasser, der udvider en abstrakt klasse, kan implementere disse (arvede) abstrakte metoder. Hvis barneklassen gennemfører alle sådanne abstrakte metoder, er det en konkret klasse. Men hvis det ikke gør det, bliver barneklassen også en abstrakt klasse. Hvad alt dette betyder er, at når programmøren nominerer en klasse som et abstrakt, siger hun at klassen vil være ufuldstændig, og den vil have elementer, der skal udfyldes af de arvelige underklasser. Dette er en god måde at skabe en kontrakt mellem to programmører, hvilket forenkler opgaver i softwareudvikling. Programmøren, der skriver kode for at arve, skal følge metoden definitionerne nøjagtigt (men selvfølgelig kan have sin egen implementering). I Java og C # er abstrakte klasser og metoder erklæret ved hjælp af abstrakt søgeord.

Virtuelle metoder / funktioner giver mulighed for eventuelt at tilsidesætte dens adfærd ved en arvelig klasse (ved hjælp af en funktion med samme signatur). Begrebet Virtual funktion er vigtig i det følgende scenario. Antag, at en klasse er afledt af en klasse for børn, så når der anvendes et objekt af den afledte klasse, kan det referere til et objekt fra basisklassen eller den afledte klasse. Men metodeopførsel adfærd kan være tvetydig, hvis basisklassemetoderne overskrides. Så for at løse denne tvetydighed bruges virtuelt søgeord. Hvis metoden er markeret Virtuel, kaldes den afledte klasses funktion (hvis nogen) ellers bliver basklassens funktion kaldet. For eksempel anvendes i C ++ virtuelt søgeord præcist til dette formål. I C # anvendes det virtuelle søgeord på en lignende måde, men desuden bør overordnet søgeord bruges til at ændre alle override-metoder.Men i Java er der ikke noget eksplicit virtuelt søgeord. Alle ikke-statiske metoder betragtes som virtuelle. Virtuelle funktioner uden kroppen kaldes rene virtuelle funktioner. I Java og C # er abstrakte metoder rent faktisk rene virtuelle.

Forskel mellem Virtual og Abstract

Selvom Abstrakt og Virtual er to søgeord / begreber, der giver en mening om ufuldstændig implementering til de tilhørende enheder, har de deres forskelle. Abstrakte metoder (som skal defineres inden for abstrakte klasser) har slet ingen implementering, mens virtuelle metoder kan have en implementering. Hvis abstrakte metoder forlænges af en konkret klasse, skal alle arvede abstrakte metoder implementeres, mens de arves. Virtuelle metoder kan eller måske ikke tilsidesættes.