Classi: progetti iniziali degli oggetti
Aggiornamento: novembre 2007
Le classi sono rappresentazioni simboliche di oggetti: descrivono le proprietà, i campi, i metodi e gli eventi che costituiscono gli oggetti, proprio come i progetti iniziali illustrano gli elementi che costituiscono gli edifici. Analogamente ai progetti iniziali, che possono essere utilizzati per la costruzione di più edifici, è possibile utilizzare una singola classe per creare tutti gli oggetti necessari. La classi consentono inoltre di controllare l'accesso utente agli elementi dell'oggetto tramite l'incapsulamento, proprio come nel progetto iniziale vengono definite le aree di un edificio accessibili alle persone.
Classi e oggetti
I termini classe e oggetto vengono talvolta utilizzati in modo intercambiabile. Di fatto, però, le classi descrivono la struttura degli oggetti, mentre gli oggetti sono istanze utilizzabili delle classi. Ogni istanza è una copia esatta ma distinta della relativa classe. Poiché un oggetto è un'istanza di una classe, la creazione di un oggetto viene definita creazione di un'istanza.
Rifacendoci all'analogia precedente, la classe corrisponde al progetto iniziale e l'oggetto all'edificio realizzato in base a tale progetto. In genere, la modifica dei dati in un oggetto non comporta alcuna modifica dei dati in altri oggetti. L'unica eccezione è costituita dai membri condivisi, ovvero membri di una classe dichiarati con il modificatore Shared, che esistono indipendentemente dalle istanze specifiche di una classe.
Incapsulamento
L'incapsulamento è la possibilità di contenere e controllare l'accesso a un gruppo di elementi associati. Le classi costituiscono una delle modalità più diffuse per l'incapsulamento di elementi. Nell'esempio riportato di seguito nella classe BankAccount sono incapsulati i metodi, i campi e le proprietà che descrivono un conto bancario.
Senza l'incapsulamento sarebbe necessario dichiarare routine e variabili distinte per memorizzare e gestire le informazioni relative al conto bancario e l'utilizzo contemporaneo di più conti risulterebbe difficoltoso. Utilizzando l'incapsulamento è possibile utilizzare i dati e le routine della classe BankAccount come se si trattasse di una singola unità. È quindi possibile utilizzare contemporaneamente più conti bancari senza alcuna confusione, poiché ogni conto è rappresentato da un'istanza univoca della classe.
Mediante l'incapsulamento è inoltre possibile controllare la modalità di utilizzo dei dati e delle routine. È possibile utilizzare modificatori di accesso, ad esempio Private o Protected, per impedire alle routine esterne di eseguire metodi della classe o di leggere e modificare i dati nelle proprietà e nei campi. Per impedire che vengano utilizzati all'esterno alla classe, è necessario dichiarare i dettagli interni di una classe come Private. Questa tecnica è denominata occultamento dei dati e viene utilizzata per proteggere le informazioni relative all'utente, ad esempio il saldo del conto.
Una delle regole fondamentali dell'incapsulamento consiste nel fatto che i dati della classe devono essere modificati e recuperati solo tramite i metodi o le routine Property. L'occultamento dei dettagli di implementazione delle classi impedisce che tali classi vengano utilizzate in modo non appropriato e consente di modificare successivamente tali elementi senza alcun rischio di causare problemi di compatibilità. Nelle versioni successive della classe BankAccount, ad esempio, è possibile modificare il tipo di dati del campo AccountBalance senza compromettere la funzionalità di altre applicazioni basate sulla presenza di uno specifico tipo di dati in questo campo.
Ereditarietà
Analogamente alle strutture Visual Basic, è possibile utilizzare le classi per definire i tipi di dati che incapsulano un gruppo di elementi correlati. A differenza delle strutture, tuttavia, le classi Visual Basic possono ereditare ed estendere le caratteristiche di altre classi. Le classi che fungono da base per nuove classi sono denominate classi base, mentre le classi derivate dalle classi base sono definite classi derivate. Le classi derivate ereditano tutti i campi, le proprietà, i metodi e gli eventi della classe base. È quindi possibile sviluppare ed eseguire il debug di una classe alla volta e riutilizzarla come base per altre classi.
Nel seguente esempio sono definite una classe base, che rappresenta un conto bancario generico, e una classe specifica, che eredita le proprietà della classe base ma è stata personalizzata per descrivere un conto corrente.
Class BankAccount
Private AccountNumber As String
Private AccountBalance As Decimal
Private HoldOnAccount As Boolean = False
Public Sub PostInterest()
' Add code to calculate the interest for this account.
End Sub
ReadOnly Property Balance() As Decimal
Get
' Return the available balance.
Return AccountBalance
End Get
End Property
End Class
Class CheckingAccount
Inherits BankAccount
Sub ProcessCheck()
' Add code to process a check drawn on this account.
End Sub
End Class
Per ulteriori informazioni sull'eredità, vedere Nozioni fondamentali sull'ereditarietà.
Membri condivisi
Per impostazione predefinita, i dati relativi alla classe sono specifici per ogni istanza della classe. Tuttavia, se si desidera condividere un singolo elemento di dati con tutti gli oggetti creati da una classe è necessario utilizzare il modificatore Shared per fare in modo che una variabile condivida lo stesso valore in tutte le istanze di una classe. In altri linguaggi di programmazione i membri condivisi vengono talvolta definiti "membri statici". È possibile chiamare direttamente i metodi condivisi utilizzando un nome di classe, senza prima creare un'istanza della classe.
Per ulteriori informazioni sui membri condivisi, vedere Membri condivisi in Visual Basic.
Shadowing
Le classi derivate consentono l'utilizzo della parola chiave Shadows per dichiarare un membro con lo stesso nome di un membro ereditato. Non è necessario che il tipo di dati dei membri nascosti corrisponda al tipo di dati del membro da nascondere. Una proprietà può ad esempio nascondere una variabile di tipo Integer.
Per ulteriori informazioni sui membri condivisi, vedere Shadowing in Visual Basic.
Vedere anche
Concetti
Nozioni fondamentali sull'ereditarietà
Membri condivisi in Visual Basic