In questo capitolo si presuppone che il lettore abbia delle conoscenza di programmazione ad oggetti, per cui eventualmente rimando il lettore meno esperto al manuale di ingegneria del software in cui parlo di programmazione ad oggetti.
Quando si definisce una classe, si definisce una struttura per un tipo di dati.
Questo in realtà non definisce alcun dato ma, come sarà composto un oggetto di una classe e quali operazioni potranno essere effettuate su di esso.
Gli oggetti sono istanze di una classe. I metodi e le variabili che costituiscono una classe sono detti membri della classe.
Una definizione di classe inizia con la parola chiave Class seguita dal nome della classe; quindi c'è corpo della classe, infine l'istruzione End Class
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ MustInherit | NotInheritable ] [ Partial ]
Class name [ ( Of typelist ) ]
[ Inherits classname ]
[ Implements interfacenames ]
[ statements ]
End Class
Dove:
Module esempioClassi
Class Rettangolo
Public lunghezza As Double
Public altezza As Double
End Class
Sub Main()
Dim rect As Rettangolo = New Rettangolo()
rect.lunghezza = 2.0
rect.altezza = 3.0
Console.WriteLine("Area del rettangolo : {0}", rect.lunghezza * rect.altezza )
End Sub
End Module
Abbiamo definito una classe rettangolo contenente le proprietà altezza e larghezza.
Successivamente questa è stata istanziata, sono state impostate le due proprietà e quindi utilizzate
Una funzione membro di una classe è una funzione che ha la sua definizione o il suo prototipo all'interno della definizione di classe come qualsiasi altra variabile. Funziona su qualsiasi oggetto della classe di cui è membro e ha accesso a tutti i membri di una classe per quell'oggetto.
Le variabili membro sono attributi di un oggetto. Queste variabili sono accessibili solo utilizzando le funzioni membro pubbliche.
Utilizziamo i due concetti espressi sopra per modificare la classe rettangolo.
Module esempioClassi
Class Rettangolo
Private lunghezza As Double
Private altezza As Double
Public Sub impostaLunghezza(ByVal lung As Double)
lunghezza = lung
End Sub
Public Sub impostaAltezza(ByVal alte As Double)
altezza = alte
End Sub
Public Function calcolaArea() As Double
Return lunghezza * altezza
End Function
End Class
Sub Main()
Dim rect As Rettangolo = New Rettangolo()
rect.impostaLunghezza(2.0)
rect.impostaAltezza(3.0)
Console.WriteLine("Area del rettangolo : {0}", rect.calcolaArea() )
End Sub
End Module
Una costruttore è una speciale Sub membro di una classe che viene eseguito ogni volta che viene creato un oggetto della classe.
Il costruttore si dichiara con la parola chiave "New" e non ha ripi di ritorno.
Un costruttore di default non ha alcun parametro, ma si possono creare overload con parametri. In questo modo è possibile inizializzare un oggetto al momento della sua creazione.
Un distruttore è una speciale Sub che viene eseguito ogni volta che un oggetto della classe esce dallo scope.
Il distruttore si dichiara con la parola chiave "Finalize"
Mettiamo in pratica quanto appreso modificando la classe creata precedentemente
Module esempioClassi
Class Rettangolo
Private lunghezza As Double
Private altezza As Double
Public Sub New(ByVal lung As Double, ByVal alte As Double)
Console.WriteLine("Creo l'oggetto")
lunghezza = lung
altezza = alte
End Sub
Public Sub impostaLunghezza(ByVal lung As Double)
lunghezza = lung
End Sub
Public Sub impostaAltezza(ByVal alte As Double)
altezza = alte
End Sub
Public Function calcolaArea() As Double
Return lunghezza * altezza
End Function
Protected Overrides Sub Finalize()
Console.WriteLine("Distruggo l'oggetto")
End Sub
End Class
Sub Main()
Dim rect As Rettangolo = New Rettangolo(2.0, 3.0)
Console.WriteLine("Area del rettangolo : {0}", rect.calcolaArea() )
End Sub
End Module