Differenza tra virtuale e astratto

Differenza tra virtuale e astratto
Differenza tra virtuale e astratto

Video: Differenza tra virtuale e astratto

Video: Differenza tra virtuale e astratto
Video: Apple iPhone 4 VS Samsung Galaxy S : Video Confronto (HD) 2024, Luglio
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 delle diverse lingue, sia le parole chiave Virtuale che Astratte forniscono un senso di implementazione parziale alle entità a cui si collega.

Astratto

In genere, le classi astratte, note anche come classi di base astratte (ABC), non possono essere istanziate (non è possibile creare un'istanza di quella classe). Quindi, le classi astratte sono significative da avere 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 un'entità astratta con implementazione parziale o assente. Pertanto, le classi Abstract fungono da classi madri da cui derivano le classi figlie, in modo che la classe figlia condivida le caratteristiche incomplete della classe genitore e le funzionalità possano essere aggiunte 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 in caso contrario, 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 ereditarie. 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 e i 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 ereditaria (usando una funzione con la stessa firma). Il concetto di funzione virtuale è importante nello scenario seguente. 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 alla 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 Virtual. 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 usata in modo simile, ma in aggiunta, la parola chiave override dovrebbe essere usata per modificare tutti i metodi sottoposti a override. Ma in Java non esiste una parola chiave Virtual esplicita. Tutti i metodi non statici sono considerati Virtuali. Le funzioni virtuali senza corpo sono chiamate funzioni virtuali pure. In Java e C, i metodi Abstract 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 sue 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 Abstract vengono estesi da una classe concreta, tutti i metodi Abstract ereditati devono essere implementati, mentre i metodi Virtual ereditati possono essere sovrascritti o meno.

Consigliato: