Rozdiel Medzi Virtuálnym A Abstraktným

Rozdiel Medzi Virtuálnym A Abstraktným
Rozdiel Medzi Virtuálnym A Abstraktným

Video: Rozdiel Medzi Virtuálnym A Abstraktným

Video: Rozdiel Medzi Virtuálnym A Abstraktným
Video: Сознание и Личность. От заведомо мёртвого к вечно Живому 2024, Smieť
Anonim

Virtuálne vs Abstraktné

Virtuálne a abstraktné sú dve kľúčové slová používané vo väčšine objektovo orientovaných programovacích jazykov, ako sú Java a C #. Aj keď existujú nepatrné rozdiely v tom, čo to znamená v rôznych jazykoch, kľúčové slová Virtual aj Abstract poskytujú zmysel pre čiastočnú implementáciu entít, ku ktorým sa viaže.

Abstrakt

Zvyčajne nie je možné vytvárať inštancie abstraktných tried, známych tiež ako abstraktné základné triedy (ABC) (nemožno vytvoriť inštanciu tejto triedy). Abstraktné triedy teda majú zmysel, iba ak programovací jazyk podporuje dedenie (schopnosť vytvárať podtriedy z rozšírenia triedy). Abstraktné triedy zvyčajne predstavujú abstraktný koncept alebo entitu s čiastočnou alebo žiadnou implementáciou. Preto abstraktné triedy fungujú ako nadradené triedy, od ktorých sa odvodzujú podradené triedy, takže podradená trieda bude zdieľať neúplné vlastnosti nadradenej triedy a na ich dokončenie 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. Ale ak nie,trieda dieťaťa sa tiež stane triedou abstraktnou. Čo to znamená, je to, že keď programátor nominuje triedu ako abstrakt, hovorí, že trieda bude neúplná a bude obsahovať prvky, ktoré je potrebné doplniť dediacimi podtriedami. Toto je pekný spôsob vytvorenia zmluvy medzi dvoma programátormi, čo zjednodušuje úlohy pri vývoji softvéru. Programátorka, ktorá píše kód na zdedenie, musí presne dodržiavať definície metódy (samozrejme môže mať vlastnú implementáciu). V jazykoch Java a C # sa abstraktné triedy a metódy deklarujú pomocou kľúčového slova Abstract. Toto je pekný spôsob vytvorenia zmluvy medzi dvoma programátormi, čo zjednodušuje úlohy pri vývoji softvéru. Programátorka, ktorá píše kód na zdedenie, musí presne dodržiavať definície metód (samozrejme môže mať vlastnú implementáciu). V jazykoch Java a C # sa abstraktné triedy a metódy deklarujú pomocou kľúčového slova Abstract. Toto je pekný spôsob vytvorenia zmluvy medzi dvoma programátormi, čo zjednodušuje úlohy pri vývoji softvéru. Programátorka, ktorá píše kód na zdedenie, musí presne dodržiavať definície metód (samozrejme môže mať vlastnú implementáciu). V jazykoch Java a C # sa abstraktné triedy a metódy deklarujú pomocou kľúčového slova Abstract.

Virtuálne

Virtuálne metódy / funkcie poskytujú možnosť voliteľne prepísať svoje správanie dediacou 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á podradenou triedou, potom kedykoľvek sa použije objekt odvodenej triedy, môže odkazovať na objekt základnej triedy alebo odvodenej triedy. Chovanie hovoru metódou však môže byť nejednoznačné, ak sú prepísané metódy základnej triedy. Na vyriešenie tejto nejasnosti sa teda používa kľúčové slovo Virtual. Ak je metóda označená ako Virtual, potom sa volá funkcia odvodenej triedy (ak existuje) alebo sa volá funkcia základnej triedy. Napríklad v C ++ sa kľúčové slovo Virtual používa presne na tento účel. V C # sa kľúčové slovo Virtual používa podobným spôsobom, ale navyšeprepísanie kľúčového slova by sa malo použiť na úpravu všetkých prepísaných metód. Ale v Jave neexistuje výslovné virtuálne kľúčové slovo. Všetky nestatické metódy sa považujú za virtuálne. Virtuálne funkcie bez tela sa nazývajú Pure Virtual functions. V jazykoch Java a C # sú abstraktné metódy v skutočnosti Pure Virtual.

Rozdiel medzi virtuálnym a abstraktným

Hoci abstraktné a virtuálne sú dve kľúčové slová / pojmy, ktoré svojim pridruženým entitám poskytujú význam neúplnej implementácie, majú svoje rozdiely. Abstraktné metódy (ktoré musia byť definované vo vnútri abstraktných tried) nemajú implementáciu vôbec, zatiaľ čo virtuálne metódy môžu mať implementáciu. Ak sú abstraktné metódy rozšírené o konkrétnu triedu, musia byť implementované všetky zdedené abstraktné metódy, zatiaľ čo zdedené virtuálne metódy môžu alebo nemusia byť prepísané.

Odporúčaná: