Differenza Tra Virtuale E Astratto

Differenza Tra Virtuale E Astratto
Differenza Tra Virtuale E Astratto
Anonim

Virtuale vs astratto

Virtual e Abstract sono due parole chiave utilizzate nella maggior parte dei linguaggi di programmazione Object Oriented (OO) come Java e C #. Sebbene ci siano lievi differenze nel significato in lingue diverse, sia le parole chiave virtuali che quelle astratte forniscono un senso di implementazione parziale alle entità a cui si collega.

Astratto

In genere, le classi astratte, note anche come ABC (Abstract Base Classes), non possono essere istanziate (non è possibile creare un'istanza di quella classe). Quindi, le classi astratte hanno senso solo se il linguaggio di programmazione supporta l'ereditarietà (capacità di creare sottoclassi dall'estensione di una classe). Le classi astratte di solito rappresentano un concetto o entità astratta con implementazione parziale o nulla. Pertanto, le classi astratte agiscono come classi genitore da cui derivano le classi figlie, in modo che la classe figlia condivida le caratteristiche incomplete della classe genitrice e la funzionalità possa essere aggiunta per completarle. Le classi astratte possono contenere metodi astratti. Le sottoclassi che estendono una classe astratta possono implementare questi metodi astratti (ereditati). Se la classe figlia implementa tutti questi metodi Abstract, è una classe concreta. Ma se non lo fa,anche la classe figlia diventa una classe astratta. Tutto ciò significa che, quando il programmatore nomina una classe come Abstract, sta dicendo che la classe sarà incompleta e avrà elementi che devono essere completati dalle sottoclassi che ereditano. Questo è un bel modo per creare un contratto tra due programmatori, che semplifica le attività nello sviluppo del software. Il programmatore, che scrive il codice da ereditare, deve seguire esattamente le definizioni del metodo (ma ovviamente può avere la propria implementazione). In Java e C #, le classi ei metodi Abstract vengono dichiarati utilizzando la parola chiave Abstract. Questo è un bel modo per creare un contratto tra due programmatori, che semplifica le attività nello sviluppo del software. Il programmatore, che scrive il codice da ereditare, deve seguire esattamente le definizioni del metodo (ma ovviamente può avere la propria implementazione). In Java e C #, le classi ei metodi Abstract vengono dichiarati utilizzando la parola chiave Abstract. Questo è un bel modo per creare un contratto tra due programmatori, che semplifica le attività nello sviluppo del software. Il programmatore, che scrive il codice da ereditare, deve seguire esattamente le definizioni del metodo (ma ovviamente può avere la propria implementazione). In Java e C #, le classi ei metodi Abstract vengono dichiarati utilizzando la parola chiave Abstract.

Virtuale

I metodi / funzioni virtuali forniscono la possibilità di sovrascrivere facoltativamente il suo comportamento da una classe che eredita (utilizzando una funzione con la stessa firma). Il concetto di funzione virtuale è importante nel seguente scenario. Supponiamo che una classe sia derivata da una classe figlia, quindi ogni volta che viene utilizzato un oggetto della classe derivata, può fare riferimento a un oggetto della classe base o della classe derivata. Tuttavia, il comportamento della chiamata al metodo può essere ambiguo se i metodi della classe base vengono sovrascritti. Quindi, per risolvere questa ambiguità, viene utilizzata la parola chiave virtuale. Se il metodo è contrassegnato come Virtual, viene chiamata la funzione della classe derivata (se presente) oppure viene chiamata la funzione della classe base. Ad esempio, in C ++, la parola chiave Virtual viene utilizzata esattamente per questo scopo. In C #, la parola chiave Virtual viene utilizzata in modo simile, ma in aggiunta,la parola chiave override dovrebbe essere utilizzata per modificare tutti i metodi sovrascritti. Ma in Java, non esiste una parola chiave virtuale esplicita. Tutti i metodi non statici sono considerati virtuali. Le funzioni virtuali senza corpo sono chiamate funzioni Pure Virtual. In Java e C #, i metodi astratti sono in effetti Pure Virtual.

Differenza tra virtuale e astratto

Sebbene Abstract e Virtual siano due parole chiave / concetti che forniscono un significato di implementazione incompleta alle entità associate, hanno le loro differenze. I metodi astratti (che devono essere definiti all'interno delle classi astratte) non hanno affatto un'implementazione, mentre i metodi virtuali possono avere un'implementazione. Se i metodi astratti vengono estesi da una classe concreta, tutti i metodi astratti ereditati devono essere implementati, mentre i metodi virtuali ereditati possono o non possono essere sovrascritti.

Raccomandato: