Skillnad mellan virtuell och abstrakt

Virtual vs Abstract

Virtuellt och abstrakt är två nyckelord som används i de flesta objektorienterade (OO) programmeringsspråk som Java och C #. Även om det finns små skillnader i vad det betyder på olika språk, ger både virtuella och abstrakta nyckelord en känsla av partiell implementering till de enheter som den ansluter till.

Abstrakt

Vanligtvis kan abstrakta klasser, även kända som abstrakta basklasser (ABC), inte instantieras (en förekomst av den klassen kan inte skapas). Så, abstrakta klasser är bara meningsfulla att ha om programmeringsspråket stöder arv (förmåga att skapa underklasser från att utöka en klass). Abstrakta klasser representerar vanligtvis ett abstrakt begrepp eller enhet med partiell eller ingen implementering. Därför fungerar abstrakta klasser som föräldrakurser från vilka barnklasser härleds, så att barnklassen kommer att dela de ofullständiga funktionerna i förälderklassen och funktionaliteten kan läggas till för att komplettera dem. Abstrakta klasser kan innehålla abstrakta metoder. Underklasser som omfattar en abstrakt klass kan implementera dessa (ärftliga) abstrakta metoder. Om barnklassen genomför alla sådana abstrakta metoder är det en konkret klass. Men om det inte gör, blir barnklassen också en abstrakt klass. Vad allt detta betyder är att när programmeraren nominerar en klass som en abstrakt, säger hon att klassen kommer att vara ofullständig och det kommer att ha element som måste fyllas i av de arvande underklassen. Det här är ett trevligt sätt att skapa ett kontrakt mellan två programmerare, vilket förenklar uppgifterna i mjukvaruutveckling. Programmeraren, som skriver kod för att ärva, måste följa metoddefinitionerna exakt (men självklart kan ha sin egen implementering). I Java och C # deklareras abstrakta klasser och metoder med hjälp av abstrakt nyckelord.

Virtuell

Virtuella metoder / funktioner ger möjlighet att eventuellt åsidosätta sitt beteende genom en ärftlig klass (med en funktion med samma signatur). Konceptet virtuell funktion är viktigt i följande scenario. Antag att en klass är avledad av en barnklass, då kan det hänvisas till ett objekt från basklassen eller den härledda klassen när ett objekt från den härledda klassen används. Men metodanropsbeteendet kan vara tvetydigt om basklassmetoderna överskrids. Så, för att lösa denna tvetydighet används Virtual Keyword. Om metoden är markerad Virtuellt, kallas den härledda klassens funktion (om någon), annars kallas basklassens funktion. Exempelvis används i C ++ virtuellt nyckelord exakt för detta ändamål. I C # används det virtuella sökordet på ett liknande sätt, men dessutom bör överskridandet av nyckelord användas för att ändra alla överdrivna metoder. Men i Java finns det inget explicit virtuellt sökord. Alla icke-statiska metoder anses vara virtuella. Virtuella funktioner utan kropp kallas ren virtuella funktioner. I Java och C # är abstrakta metoder faktiskt rena virtuella.

Skillnad mellan virtuellt och abstrakt

Även om abstrakta och virtuella är två nyckelord / begrepp som ger en betydelse av ofullständigt genomförande till dess associerade enheter, har de sina skillnader. Abstrakta metoder (som måste definieras i abstrakta klasser) har inte någon implementering alls, medan virtuella metoder kan ha en implementering. Om abstrakta metoder utökas av en konkret klass, måste alla ärftliga abstrakta metoder genomföras, medan de är ärvda. Virtuella metoder kan eller inte övervägas.