Diferența dintre virtual și abstract

Diferența dintre virtual și abstract
Diferența dintre virtual și abstract

Video: Diferența dintre virtual și abstract

Video: Diferența dintre virtual și abstract
Video: The main DIFFERENCES between IaaS, SaaS and PaaS explained... 2024, Iulie
Anonim

Virtual vs abstract

Virtual și Abstract sunt două cuvinte cheie utilizate în majoritatea limbajelor de programare orientate pe obiecte (OO) precum 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ă.

Rezumat

De obicei, clasele abstracte, cunoscute și sub denumirea de clase de bază abstracte (ABC), nu pot fi instanțiate (o instanță a acelei clase nu poate fi creată). 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 fără implementare. 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 pot fi adăugate 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, este o clasă concretă. Dar dacă nu, clasa copil devine și o clasă Abstract. Toate acestea înseamnă că, atunci când programatorul nominalizează o clasă ca Abstract, ea spune că clasa va fi incompletă și va avea elemente care trebuie completate de 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 sa 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-și suprascrie opțional comportamentul de către 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 al clasei derivate. Dar, comportamentul apelului de metodă poate fi ambiguu dacă metodele clasei de bază sunt suprascrise. Deci, pentru a rezolva această ambiguitate, este folosit cuvântul cheie Virtual. Dacă metoda este marcată Virtual, atunci funcția clasei derivate este numită (dacă există) sau, altfel, funcția clasei de bază este apelată. De exemplu, în C++, cuvântul cheie Virtual este folosit exact în acest scop. În C, cuvântul cheie Virtual este folosit într-un mod similar, dar în plus, cuvântul cheie suprascris ar trebui să fie folosit pentru a modifica toate metodele suprascrise. Dar în Java, nu există un cuvânt cheie virtual explicit. Toate metodele non-statice sunt considerate Virtuale. Funcțiile virtuale fără corp sunt numite 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 asociate, ele au diferențele lor. Metodele abstracte (care trebuie definite în cadrul claselor Abstract) nu au deloc o implementare, în timp ce metodele virtuale pot avea o implementare. Dacă metodele abstracte sunt extinse cu o clasă concretă, toate metodele abstracte moștenite trebuie implementate, în timp ce metodele virtuale moștenite pot fi sau nu suprascrise.

Recomandat: