Skip to main content

Cos'è una classe virtuale?

Una classe virtuale è una classe che viene assegnata una sola volta in memoria, in modo tale che i bambini di quella classe utilizzino solo l'unica copia di quella classe genitore che viene stabilita in memoria.Una classe è un gruppo di oggetti che condividono tratti o attributi comuni.Fare una classe virtuale fornisce linguaggi di programmazione orientati agli oggetti la capacità di utilizzare l'eredità multipla quando le classi genitori di seconda o più generazione sono derivate da classi di base ancestrale comuni.A seconda del linguaggio di programmazione del computer a cui si fa riferimento, la parola chiave virtuale, la parola chiave simile o la sintassi e la semantica di una classe vengono utilizzati per implicare che una determinata classe deve essere considerata virtuale.

Non tutti i linguaggi di programmazione orientati agli oggetti consentono un'eredità multipla, cheè quando una classe figlio può essere derivata da più classi genitori contemporaneamente.In un linguaggio di programmazione come C ++, una classe può ereditare tutti i dati dei membri e le funzioni dei membri da entrambe le classi genitori e avere accesso a entrambe le serie di dati e funzioni dei genitori.Altre lingue che supportano l'eredità multipla includono Perl, Python, TCL ed Eiffel.

Si verifica un problema in gerarchie di eredità multipla quando due o più classi di genitori utilizzate per creare una classe per bambini sono originariamente derivate dalla sola o dalla stessa classe di nonni.Questo si chiama Diamond Problem, il nome derivante da come sarebbe la gerarchia in questa situazione.Quando un programma di compilatore cerca di istanziare una classe, come una lezione di nipote realizzata in due classi genitori con un nonno comune, due copie del nonno vengono realizzate in memoria, una per ogni genitore.

A causa dell'ambiguità causata da più copie dello stesso nonno in memoria, il compilatore non è in grado di accertare quale copia del nonno dovrebbe utilizzare il nipote per accedere ai dati o alle funzioni del nonno.Per porre rimedio a questa situazione, in C ++ il nonno viene trasformato in una classe virtuale quando si dichiara i genitori.Ciò fa sì che il compilatore faccia solo una copia del nonno in memoria che entrambi i genitori condividono.Una volta che il nonno è diventato una classe virtuale, il compilatore non ha problemi a decidere come il nipote dovrebbe accedere al nonno perché esiste una sola copia del nonno.

Si dovrebbe prestare molta cura durante la strutturazione delle gerarchie della classe, specialmente quando saranno inclusiin o diventa la base per gerarchie molto più grandi in futuro.L'utilizzo adeguato di una classe virtuale fornisce gerarchie di classe maggiore latitudine nello sviluppo;Tuttavia, hanno il potenziale per causare errori difficili da individuare.Lo studio dei principi di ingegneria della programmazione informatica solida aiuterà a garantire che non si verifichino effetti collaterali inaspettati dell'organizzazione del programma improprio.