Rozdiel medzi virtuálnym a abstraktom

Virtuálne verzus abstrakt

Virtual a Abstract sú dve kľúčové slová používané vo väčšine objektovo orientovaných (OO) programovacích jazykoch, ako sú Java a C #. Aj keď existujú malé rozdiely v tom, čo to znamená v rôznych jazykoch, virtuálne aj abstraktné kľúčové slová poskytujú pocit čiastočnej implementácie entitám, ku ktorým sa pripája..

abstraktné

Zvyčajne nie je možné vytvoriť inštancie tried abstraktov, známych tiež ako Abstraktné základné triedy (ABC) (inštanciu tejto triedy nemožno vytvoriť). Takže abstraktné triedy majú zmysel iba vtedy, ak programovací jazyk podporuje dedičnosť (schopnosť vytvárať podtriedy z rozširovania triedy). Abstraktné triedy obyčajne predstavujú abstraktný pojem alebo entitu s čiastočnou alebo žiadnou implementáciou. Z tohto dôvodu abstraktné triedy fungujú ako rodičovské triedy, z ktorých sú odvodené podriadené triedy, takže podradená trieda bude zdieľať neúplné vlastnosti rodičovskej triedy a na ich doplnenie je možné pridať funkčnosť. Abstraktné triedy môžu obsahovať abstraktné metódy. Podtriedy rozširujúce abstraktnú triedu môžu implementovať tieto (zdedené) abstraktné metódy. Ak podradená trieda implementuje všetky také abstraktné metódy, je to konkrétna trieda. Ak to tak nie je, trieda pre deti sa tiež stáva triedou abstraktov. To všetko znamená, že keď programátor nominuje triedu ako abstrakt, hovorí, že trieda bude neúplná a bude obsahovať prvky, ktoré musia byť doplnené zdedenými podtriedami. Je to pekný spôsob, ako vytvoriť zmluvu medzi dvoma programátormi, ktorá zjednodušuje úlohy pri vývoji softvéru. Programátor, ktorý píše kód, ktorý má zdediť, musí presne dodržiavať definície metód (ale samozrejme môže mať vlastnú implementáciu). V Java a C # sa triedy a metódy abstraktu deklarujú pomocou kľúčového slova Abstrakt.

virtuálne

Virtuálne metódy / funkcie poskytujú možnosť voliteľne potlačiť svoje správanie zdedenou triedou (pomocou funkcie s rovnakým podpisom). Koncept virtuálnej funkcie je dôležitý v nasledujúcom scenári. Predpokladajme, že trieda je odvodená od podradenej triedy, potom vždy, keď sa použije objekt odvodenej triedy, môže odkazovať na objekt základnej triedy alebo odvodenej triedy. Správanie volania metód však môže byť nejednoznačné, ak sú metódy základnej triedy potlačené. Na vyriešenie tejto nejednoznačnosti sa preto používa kľúčové slovo Virtual. Ak je metóda označená ako virtuálna, potom sa vyvolá funkcia odvodenej triedy (ak existuje) alebo sa nazýva funkcia základnej triedy. Napríklad v jazyku C ++ sa virtuálne kľúčové slovo používa presne na tento účel. V C # sa kľúčové slovo Virtual používa podobným spôsobom, ale navyše by sa malo použiť prepísanie kľúčového slova na úpravu všetkých prepísaných metód. Ale v Jave neexistuje žiadne explicitné virtuálne kľúčové slovo. Všetky nestatické metódy sa považujú za virtuálne. Virtuálne funkcie bez tela sa nazývajú čisté virtuálne funkcie. V Java a C # sú abstraktné metódy v skutočnosti Pure Virtual.

Rozdiel medzi virtuálnym a abstraktom

Hoci Abstrakt a Virtuálne sú dve kľúčové slová / koncepty, ktoré poskytujú význam neúplnej implementácie pridruženým entitám, majú svoje rozdiely. Abstraktné metódy (ktoré musia byť definované v abstraktných triedach) nemajú implementáciu vôbec, zatiaľ čo virtuálne metódy môžu mať implementáciu. Ak sú metódy abstraktov rozšírené o konkrétnu triedu, musia sa implementovať všetky zdedené metódy abstraktov, zatiaľ čo zdedené virtuálne metódy môžu alebo nemusia byť potlačené..