Che cos'è una variabile di istanza?
Una variabile di istanza è un dato nella programmazione orientata agli oggetti che ha il suo 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, che contengono specifici pezzi di dati che l'oggetto utilizza per il calcolo.
Ad esempio, se esistono due oggetti, A e B, in cui 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" associato all'oggetto A è "A.blah", mentre il nome completo della variabile "blah" associato all'oggetto B è "B.blah". Ognuno 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 "blah", che può avere il suo valore univoco.
Le variabili di istanza sono spesso confuse con variabili statiche, ma le due sono significativamente diverse. A differenza delle variabili di istanza, di cui ogni oggetto di un determinato 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 delle variabili di istanza.
A seconda delle proprietà di visibilità assegnate ad esse, le variabili di istanza possono essere visibili solo all'interno di un oggetto particolare, a un oggetto e alle sue sottoclassi o all'oggetto in cui risiede, nonché a qualsiasi altro oggetto. Quel tipo di visibilità finale, chiamato visibilità pubblica, è spesso considerato una cattiva pratica per le variabili di istanza, poiché è 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 pubblica, che a volte consentono una facile modifica delle proprietà.
Anche la visibilità di una variabile di istanza entra in gioco con l'ereditarietà. Se una classe eredita da un'altra, ciò non consente immediatamente a entrambe le classi di accedere alle reciproche variabili di istanza. Le variabili di istanza private nella superclasse e nella sottoclasse rimangono limitate solo a quelle classi, quindi una superclasse non può essere vista da una classe privata e viceversa. Le uniche variabili di istanza visibili sia alla superclasse che alla sottoclasse sono le variabili protette nella superclasse.