Che cos’è una variabile di istanza?

Una variabile di istanza è un dato nella programmazione orientata agli oggetti che ha il proprio valore univoco per ogni oggetto in cui risiede. Le variabili di istanza possono anche essere chiamate membri di istanza, campi non statici e membri di dati. Sono una parte importante della maggior parte degli oggetti, poiché contengono dati specifici che l’oggetto utilizza per il calcolo.
Ad esempio, se esistono due oggetti, A e B, dove l’oggetto A ha una variabile di istanza chiamata “blah” e l’oggetto B ha anche una variabile di istanza chiamata “blah”, le due variabili “blah” sono entità distinte. Ogni variabile è associata all’oggetto che la incapsula. Il nome completo della variabile “blah” associata all’oggetto A è “A.blah”, mentre il nome completo della variabile “blah” associata all’oggetto B è “B.blah”. Ciascuno se queste variabili possono avere il proprio valore. Se gli oggetti A e B sono dello stesso tipo e viene creato un altro oggetto di quel tipo, C, e l’oggetto C avrà anche una variabile di istanza “bla”, che può avere un proprio valore univoco.

Le variabili di istanza sono spesso confuse con le variabili statiche, ma le due sono significativamente diverse. A differenza delle variabili di istanza, di cui ogni oggetto di un particolare tipo ha il proprio, le variabili statiche hanno un solo valore e questo valore è lo stesso per ogni oggetto del tipo appropriato. Le variabili statiche sono spesso chiamate variabili di classe, che non sono le stesse variabili di istanza.

A seconda delle proprietà di visibilità loro assegnate, le variabili di istanza possono essere visibili solo all’interno di un particolare oggetto, a un oggetto e alle sue sottoclassi, o all’oggetto in cui risiede così come a qualsiasi altro oggetto. Quest’ultimo tipo di visibilità, chiamato visibilità pubblica, è spesso considerato una cattiva pratica, ad esempio le variabili, perché è facile violare i principi di incapsulamento nella programmazione orientata agli oggetti. Nonostante questo tabù, ci sono momenti in cui le variabili di istanza pubblica sono utili. Ad esempio, molte classi standard in Java hanno variabili di istanza pubbliche, che a volte consentono una facile modifica delle proprietà.

La visibilità di una variabile di istanza entra in gioco anche con l’ereditarietà. Se una classe eredita da un’altra, questo non dà immediatamente a entrambe le classi l’accesso alle variabili di istanza dell’altra. Le variabili di istanza private nella superclasse e nella sottoclasse rimangono limitate solo a quelle classi, quindi una variabile privata nella sottoclasse non può essere vista dalla superclasse e viceversa. Le uniche variabili di istanza che possono vedere sia la superclasse che la sottoclasse sono le variabili protette nella superclasse.