Virtual vs Abstract
Virtual și Abstract sunt două cuvinte cheie utilizate în majoritatea limbajelor de programare Orientate pe obiecte (OO), cum ar fi Java și C #. Deși există mici diferențe în ceea ce înseamnă în diferite limbi, atât cuvintele cheie virtuale, cât și cele abstracte oferă un sentiment de implementare parțială entităților la care se atașează.
Abstract
De obicei, clasele abstracte, cunoscute și sub denumirea de clase de bază abstracte (ABC), nu pot fi instanțiate (nu poate fi creată o instanță a acelei clase). Deci, clasele Abstracte sunt semnificative doar dacă limbajul de programare acceptă moștenirea (capacitatea de a crea subclase din extinderea unei clase). Clasele abstracte reprezintă, de obicei, un concept abstract sau o entitate cu implementare parțială sau deloc. Prin urmare, clasele Abstracte acționează ca clase părinte din care sunt derivate clasele copil, astfel încât clasa copil va împărtăși caracteristicile incomplete ale clasei părinte și se pot adăuga funcționalități pentru a le completa. Clasele abstracte pot conține metode abstracte. Subclasele care extind o clasă abstractă pot implementa aceste metode abstracte (moștenite). Dacă clasa copil implementează toate aceste metode abstracte, aceasta este o clasă concretă. Dar dacă nu,clasa pentru copii devine, de asemenea, o clasă abstractă. Ceea ce înseamnă toate acestea este că, atunci când programatorul nominalizează o clasă ca rezumat, ea spune că clasa va fi incompletă și va avea elemente care trebuie completate de către subclasele moștenitoare. Acesta este un mod frumos de a crea un contract între doi programatori, care simplifică sarcinile în dezvoltarea de software. Programatorul, care scrie cod pentru a moșteni, trebuie să urmeze exact definițiile metodei (dar, desigur, poate avea propria implementare). În Java și C #, clasele și metodele abstracte sunt declarate folosind cuvântul cheie abstract. Acesta este un mod frumos de a crea un contract între doi programatori, care simplifică sarcinile în dezvoltarea de software. Programatorul, care scrie cod pentru a moșteni, trebuie să urmeze exact definițiile metodei (dar, desigur, poate avea propria sa implementare). În Java și C #, clasele și metodele abstracte sunt declarate folosind cuvântul cheie abstract. Acesta este un mod frumos de a crea un contract între doi programatori, care simplifică sarcinile în dezvoltarea de software. Programatorul, care scrie cod pentru a moșteni, trebuie să urmeze exact definițiile metodei (dar, desigur, poate avea propria implementare). În Java și C #, clasele și metodele abstracte sunt declarate folosind cuvântul cheie abstract.
Virtual
Metodele / funcțiile virtuale oferă posibilitatea de a suprascrie opțional comportamentul său de o clasă moștenitoare (folosind o funcție cu aceeași semnătură). Conceptul de funcție virtuală este important în următorul scenariu. Să presupunem că o clasă este derivată de o clasă copil, atunci ori de câte ori este utilizat un obiect al clasei derivate, se poate referi la un obiect al clasei de bază sau a clasei derivate. Dar, comportamentul apelului de metodă poate fi ambiguu dacă metodele claselor de bază sunt suprascrise. Deci, pentru a rezolva această ambiguitate, se folosește cuvânt cheie virtual. Dacă metoda este marcată Virtual, atunci funcția clasei derivate se numește (dacă există) sau se numește funcția clasei de bază. De exemplu, în C ++, cuvântul cheie virtual este folosit exact în acest scop. În C #, cuvântul cheie virtual este utilizat într-un mod similar, dar în plus,cuvântul cheie override trebuie utilizat pentru a modifica toate metodele suprascrise. Dar în Java, nu există un cuvânt cheie virtual explicit. Toate metodele nestatice sunt considerate virtuale. Funcțiile virtuale fără corp se numesc funcții virtuale pure. În Java și C #, metodele abstracte sunt de fapt Pure Virtual.
Diferența dintre virtual și abstract
Deși Abstract și Virtual sunt două cuvinte cheie / concepte care oferă un sens de implementare incompletă entităților sale asociate, ele au diferențele lor. Metodele abstracte (care trebuie definite în cadrul claselor abstracte) nu au deloc o implementare, în timp ce metodele virtuale pot avea o implementare. Dacă metodele abstracte sunt extinse de o clasă concretă, toate metodele abstracte moștenite trebuie implementate, în timp ce metodele virtuale moștenite pot sau nu să fie suprascrise.