Classi ed Oggetti: La programmazione ad oggetti con VBScript
Classi ed Oggetti
Introduzione
In questo capitolo vedremo come creare ed utilizzare le classi VBScript.
Classi
Una classe è un modo per incapsulare i dati, una classe può contenere proprietà (le variabili) e metodi (le funzioni).
Mediante le classi possiamo costruire dei tipi complessi riutilizzabili nelle nostre applicazioni.
Supponiamo di voler rappresentare una persona (ad esempio per l'inserimento in un'anagrafica). Supponiamo di voler memorizzare nome, cognome ed email.
Possiamo utilizzare una classe.
Class Persona
Public Nome
Public Cognome
Public Email
End Class
Così facendo diciamo che una persona è fatta da un nume, un cognome ed una e-mail.
Se però vogliamo rappresentare una persona in particolare, ad esempio Paolino Paperino, cha ha come mail paolino.paperino@topolinia.dys, quello che ci serve è un "oggetto" di tipo persona, quello che si chiama una "istanza" della classe
La mia prima classe VBScript
La dichiarazione di una classe va fatta mediante la parola chiave "Class", Tutto il contenuto della classe starà all'interno di "Class" ed "End Class"
<% Class clPersona Public Nome Public Cognome Public Email End Class %>
All'interno dala classe avremo le Proprietà ed i Metodi per manipolare la classe.
Per creare un'oggetto di tipo persona occorre "Istanziare" la classe, questa operazione viene fatta mediante la parola chiave New.
<% Dim persona Set persona = New clPersona %>
La parola chiave Set, esegue l'operazione di assegnamento alla variabile persona.
Per distruggere l'oggetto una volta utilizzato e liberare le risorse, possiamo utilizzare la seguente sintassi:
<% Set persona = Nothing %>
Proprietà Private e Public
Nell'esempio precedente abbiamo visto che una persona può avere un nome, un cognome ed una mail. Senza saperlo abbiamo definito tre "proprietà" della classe clPersona.
Le proprietà sono delle variabili degli oggetti della nostra classe, e come tali possono essere lette oppure scritte.
Una delle principali caratteristiche della programmazione ad oggetti è l'incapsulamento dei dati, ovvero la possibilità di definire delle proprietà della classe non manipolabili dall'esterno se non attraverso dei metodi della classe stessa. L'incapsulamento di effettua tramite i modificatori di accesso: una proprietà può avere un modificatore di accesso che può essere impostato a Public oppure Private.
Con Public, le proprietà possono essere lette e scritte al di fuori della classe, con Private invece le proprietà sono interne alla classe e possono essere accedute esclusivamente da metodi della classe.
Vediamo un esempio
<% Class clPersona Public Nome Public Cognome Public Email End Class %>
Così facendo abbiamo definito la classe clPersona, con tre proprietà Public, le quali possono essere accedute dall'esterno tramite la notazione puntata
variabile = istanza.proprietà 'in lettura
istanza.proprietà = variabile 'in scrittura
Costruttore
Il costruttore di una classe è un metodo che viene richiamato quando creiamo una istanza di una classe. Può essere utilizzato per inizializzare la classe, impostandone i valori di default.
In VBScript occorre creare una procadura chiamata Class_Initialize()
Definizione
Private Sub Class_Initialize() 'corpo del metodo End Sub
Esempio
<% Class clPersona
'Proprietà Public Nome Public Cognome Public Email
'Costruttore Private Sub Class_Initialize() Response.Write"Sto creando un istanza dell'oggetto<br>"
Nome = "Paolino"
Cognome = "Paperino"
Email = "paolino.paperino@paperopoli.dys" End Sub
End Class
'Istanzio la classe Set persona = New clPersona Response.Write"Nome: " & persona.Nome & "<br>" Response.Write"Cognome: " & persona.Cognome & "<br>" Response.Write"Email: " & persona.Email & "<br>" Set persona = Nothing %>
Otterremo come output:
Sto creando un istanza dell'oggetto
Nome: Paolino
Cognome: Paperino
Email: paolino.paperino@paperopoli.dys
Nota:Non è possibile creare dei costruttori con argomenti.
Distruttore
Il distruttore di una classe, è un matodo che viene eseguito quando distruggiamo una classe tramite Set istanzaClasse = Nothing
Possiamo utilizzarlo per liberare le risorse ed eseguire le operazioni di finalizzazione.
Definizione
Private Sub Class_ Terminate() 'corpo del metodo End Sub
Esempio
<% Class clPersona
'Proprietà Public Nome Public Cognome Public Email
'Costruttore Private Sub Class_Initialize() Response.Write"Sto creando un istanza dell'oggetto<br>"
Nome = "Paolino"
Cognome = "Paperino"
Email = "paolino.paperino@paperopoli.dys" End Sub
'distruttore Private Sub Class_Terminate() Response.Write"Sto distruggendo l'istanza dell'oggetto<br>" End Sub
End Class
'Istanzio la classe Set persona = New clPersona Response.Write"Nome: " & persona.Nome & "<br>" Response.Write"Cognome: " & persona.Cognome & "<br>" Response.Write"Email: " & persona.Email & "<br>" Set persona = Nothing
%>
Otterremo come output:
Sto creando un istanza dell'oggetto
Nome: Paolino
Cognome: Paperino
Email: paolino.paperino@paperopoli.dys
Sto distruggendo l'istanza dell'oggetto
I metodi di accesso
I metodi di accesso sono delle funzioni particolari che permettono di accedere alle proprietà protette di una classe.
Il VBScript abbiamo la proprietà Let e Get
Proprietà Let
Consente di assegnare dei valori alle proprietà private di una classe
[Public | Private] Property Let nome ([argomenti,] valore) 'istruzioni End Property
Proprietà Get
Consente di leggere i valori alle proprietà private di una classe
[Public | Private] Property Get nome [(argomenti)]
[istruzioni]
[[Set] nome = espressione] End Property
E' possibile interrompere l'esecuzione del codice all'interno di una Proprietà tramite l'istruzione Exit Property
Esempio
<% Class clPersona
'Proprietà Private prNome Public Property Let Nome(strNome)
prNome = strNome End Property
Public Property Get Nome()
Nome = prNome End Property
Private prCognome Public Property Let Cognome(strCognome)
prCognome = strCognome End Property
Public Property Get Cognome()
Cognome = prCognome End Property
Private prEmail Public Property Let Email(strEmail)
prEmail = strEmail End Property
Public Property Get Email()
Email = prEmail End Property
'Costruttore Private Sub Class_Initialize() Response.Write"Sto creando un istanza dell'oggetto<br>"
Nome = "Paolino"
Cognome = "Paperino"
Email = "paolino.paperino@paperopoli.dys" End Sub
'distruttore
Private Sub Class_Terminate() Response.Write "Sto distruggendo l'istanza dell'oggetto<br>" End Sub
Abbiamo due tipi di metodi, Funzioni (che hanno un valore di ritorno) e le procedure (che processano i dati senza restituire un valore di ritorno).
Anche i metodi possono essere pubblici o privati, i metodi privati sono interni alla classe e non possono essere eseguiti dall'esterno, mentre quelli pubblici possono essere richiamati all'esterno.
Funzioni
[Public | Private] Sub nomeProcedura [(argomenti)]
[istruzioni] End Sub
Procedure
[Public | Private] Function nomeFunzione [(argomenti)]
[istruzioni]
nomeFunzione = valore End Property
Esempio
<% Class clPersona
'Proprietà Private prNome Public Property Let Nome(strNome)
prNome = strNome End Property
Public Property Get Nome()
Nome = prNome End Property
Private prCognome Public Property Let Cognome(strCognome)
prCognome = strCognome End Property
Public Property Get Cognome()
Cognome = prCognome End Property
Private prEmail Public Property Let Email(strEmail)
prEmail = strEmail End Property
Public Property Get Email()
Email = prEmail End Property
'Costruttore Private Sub Class_Initialize() Response.Write"Sto creando un istanza dell'oggetto<br>"
Nome = "Paolino"
Cognome = "Paperino"
Email = "paolino.paperino@paperopoli.dys" End Sub
'distruttore
Private Sub Class_Terminate() Response.Write "Sto distruggendo l'istanza dell'oggetto<br>" End Sub
Public Sub StampaPersona() Response.Write"Nome: " & Nome & ", Cognome:" & Cognome & "<br>" End Sub
Public Function dettaglioPersona()
dettaglioPersona = "Nome: " & Nome & ", Cognome:" & Cognome & "<br>" End Function