Skillnaden Mellan Virtuell Och Abstrakt

Skillnaden Mellan Virtuell Och Abstrakt
Skillnaden Mellan Virtuell Och Abstrakt

Video: Skillnaden Mellan Virtuell Och Abstrakt

Video: Skillnaden Mellan Virtuell Och Abstrakt
Video: Abstract: The Art of Design | Christoph Niemann: Illustration | FULL EPISODE | Netflix 2024, November
Anonim

Virtuellt kontra abstrakt

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 av de enheter som de knyter till.

Abstrakt

Vanligtvis kan abstrakta klasser, även kända som abstrakta basklasser (ABC), inte initieras (en instans 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 utvidga en klass). Abstraktklasser representerar vanligtvis ett abstrakt begrepp eller en enhet med delvis eller ingen implementering. Därför fungerar abstraktklasser som föräldraklasser från vilka barnklasser härrör, så att barnklassen delar de ofullständiga funktionerna i föräldraklassen och funktionalitet kan läggas till för att slutföra dem. Abstrakta klasser kan innehålla abstrakta metoder. Underklasser som utvidgar en abstrakt klass kan implementera dessa (ärvda) abstrakta metoder. Om barnklassen implementerar alla sådana abstrakta metoder är det en konkret klass. Men om det inte gör det,barnklassen blir också en abstraktklass. 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 att den kommer att ha element som måste kompletteras med de ärvande underklasserna. Detta är ett trevligt sätt att skapa ett kontrakt mellan två programmerare, vilket förenklar uppgifter inom programvaruutveckling. Programmeraren, som skriver kod för att ärva, måste följa metoddefinitionerna exakt (men kan naturligtvis ha sin egen implementering). I Java och C # deklareras abstrakta klasser och metoder med abstrakt nyckelord. Detta är ett trevligt sätt att skapa ett kontrakt mellan två programmerare, vilket förenklar uppgifter inom programutveckling. Programmeraren, som skriver kod för att ärva, måste följa metoddefinitionerna exakt (men kan naturligtvis ha sin egen implementering). I Java och C #, deklareras abstrakta klasser och metoder med abstrakt nyckelord. Detta är ett trevligt sätt att skapa ett kontrakt mellan två programmerare, vilket förenklar uppgifterna i programvaruutveckling. Programmeraren, som skriver kod för att ärva, måste följa metoddefinitionerna exakt (men kan naturligtvis ha sin egen implementering). I Java och C # deklareras abstrakta klasser och metoder med abstrakt nyckelord.

Virtuell

Virtuella metoder / funktioner ger möjlighet att valfritt åsidosätta sitt beteende av en ärvsklass (med en funktion med samma signatur). Begreppet virtuell funktion är viktigt i följande scenario. Antag att en klass härleds av en underordnad klass, och när ett objekt i den härledda klassen används kan det referera till ett objekt i basklassen eller den härledda klassen. Men metodanropsbeteende kan vara tvetydigt om basklassmetoderna åsidosätts. Så, för att lösa denna tvetydighet används virtuellt nyckelord. Om metoden är markerad virtuell kallas den härledda klassens funktion (om någon) eller annars kallas basklassens funktion. Till exempel i C ++ används virtuellt nyckelord exakt för detta ändamål. I C # används det virtuella nyckelordet på ett liknande sätt, men dessutomnyckelordet åsidosättande bör användas för att ändra alla åsidosatta metoder. Men i Java finns det inget uttryckligt virtuellt nyckelord. Alla icke-statiska metoder anses vara virtuella. Virtuella funktioner utan kropp kallas rena virtuella funktioner. I Java och C # är abstrakta metoder faktiskt rena virtuella.

Skillnad mellan virtuellt och abstrakt

Även om abstrakt och virtuellt är två nyckelord / begrepp som ger en betydelse av ofullständig implementering av dess associerade enheter, har de skillnader. Abstrakta metoder (som måste definieras i abstrakta klasser) har ingen implementering alls, medan virtuella metoder kan ha en implementering. Om abstrakta metoder utökas med en konkret klass, måste alla ärvda abstraktmetoder implementeras, medan ärvda virtuella metoder kan åsidosättas eller inte.

Rekommenderas: