|
IL LINGUAGGIO
Il
linguaggio da noi utilizzato è VisualBasic.net in questa
sezione verranno analizzate le caratteristiche principali di questo linguaggio
di programmazione. Innanzitutto bisogna dire che Visual Basic.net è
stato ideato dalla Microsoft e fa parte della suite di sviluppo Visual
Studio.net.
VISUAL
STUDIO.NET
Visual
Studio .NET o (7.0) è l'ultima major release in ordine di tempo di casa
Microsoft ed è la suite di tools
di sviluppo dedicata alla costruzione di applicazioni in genere.
Non si tratta di un semplice restyling ma
di una riscrittura quasi completa di tutto il codice dell'ambiente.
Nel
vecchio Visual Studio 6.0 c'erano diversi ambienti per costruire applicazioni
con i diversi linguaggi, es. Visual C++ per applicazioni ANSI C, C++, Visual
Basic, strumento per costruire applicazioni rapidamente, Visual InterDev per lo
sviluppo di applicazioni Web, Siti Web, Servizi Web Ecc.
Dalla release 7.0 il tutto è stato unificato in un unico ambiente molto
flessibile, potente e configurabile in base alle esigenze degli utenti
. Con Visual Studio .NET ora possiamo costruire qualsiasi tipo di
software utilizzando il nostro linguaggio preferito.
Ecco una prima panoramica dei tipo di applicazioni che Visual Studio mette a
disposizione:
Applicazioni
Windows (Win Forms)
In
Visual Studio.net le applicazioni windows generali cambiano nome, si chiamano
Windows Forms. Il termine Form è
stato ereditato da Visual Basic. Con Form si indica fondamentalmente una
finestra in cui possiamo inserire altri controlli come pulsanti, caselle di
testo, immagini ecc.
Un insieme di Forms e Controlli costituisce l'interfaccia della nostra
applicazione attraverso la quale l'utente interagisce. Di questa categoria fanno
parte le classiche applicazioni come Word, Excel, Access e simili, così come
anche le applicazioni "da linea di comando" (Console Applications).
Applicazioni
Web
Questa
la novità più importante introdotta con la nuova release dell'ambiente di
sviluppo targato Microsoft. Fino a poco tempo fa l'unica tecnologia a
disposizione per lo sviluppo Web era ASP (Active Server Pages) giunta ormai alla
matura versione 3.0 che con il supporto avanzato delle classi ADO (ActiveX Data
Objects) ci consentiva di accedere alle basi di dati.
Questa tecnologia ormai matura era però fonte anche di diversi problemi e
mostrava palesemente i suoi enormi limiti. Con ASP.NET si assiste ad una vera
rivoluzione dell'intero panorama dello sviluppo Web. C'è una netta apertura di
Microsoft verso gli standard aperti definiti dal W3 come XML e Soap. Non
casualmente buona parte dei file di configurazione (delle applicazioni Web,
delle policy di sistema e il metabase di IIS 6.0, per fare degli esempi) sono in
XML.
L'idea alla base di ASP.NET è quella di costruire architetture e applicazioni
complesse e veri e propri servizi (Web Services) integrati non rinunciando
all'alta produttività offerta da ASP 3.0.
La sicurezza e le performance sono state migliorate decisamente. Riguardo le
performance c'è un nuovo ed efficiente meccanismo di caching che evita continue
chiamate ai DB per recuperare gli stessi dati, e una nuova architettura di IIS
6.0 che con un nuovo driver (http.SYS) che gira a livello di kernel permette di
servire quantità elevate di richieste. In più c'è da sottolineare che è
cambiato il threading model e questo permetterà di fare funzionare più siti
web e più application pool sulla stessa macchina senza che il possibile crash
di una di queste faccia crollare l'intero IIS.
Windows
Service Applications
Il
mondo delle applicazioni è formato
anche da programmi che sono eseguiti in background, che non hanno interfaccia
con l'utente e che interagiscono con il sistema operativo. Sono i Servizi di
Windows. Per farvi un esempio rientrano in questa sezione i Web Server, i server
di posta, i server FTP, e così via.
Mentre nell'ambiente precedente (VS 6.0) costruire applicazioni di questo tipo
era un'impresa molto difficile e possibile solo a programmatori di lunga e
provata esperienza, con Visual Studio .NET abbiamo a disposizione una serie di
classi che ci facilitano enormemente la vita.
In particolare il Framework ha una classe (ServiceBase) che implementa proprio i
metodi tipici di un servizio Windows (OnStart, OnStop, OnPause, ecc.).
Visual Studio .NET infatti quando scegliamo un progetto di questo tipo si
appoggia proprio a ServiceBase creando uno scheletro di applicazione (Skeleton)
contenente il minimo delle dichiarazioni che utilizzeremo poi per aumentare le
funzionalità del nostro servizio.
La gamma di applicazioni che si
possono sviluppare con il nuovo ambiente di sviluppo di Microsoft è veramente
vasta e copre ormai qualsiasi esigenza. In più abbiamo la possibilità di
scegliere il linguaggio di sviluppo con cui ci si trova meglio e sfruttare
l'ottima gerarchia di classi messa a disposizione dal Framework.
Sicuramente l'ambiente nuovo è veramente all'altezza e offre una velocità di
sviluppo senza eguali e quindi alta produttività, anche se di contro c'è il
fatto che richiede decisamente molte risorse in termini di memoria occupata e
spazio su disco, ma visti i prezzi sempre più bassi di questo tipo di
componenti, è un problema trascurabile.
VISUAL
BASIC.NET
Il VisualBasic.net
introduce talmente tanti cambiamenti rispetto alle versioni precedenti
che da molti è considerato un
nuovo linguaggio di programmazione piuttosto che un semplice aggiornamento. Ora
Visual Basic è un linguaggio di programmazione orientato agli oggetti:
ereditarietà, polimorfismo e overloading non sono più prerogative dei
programmatori Java e C++. I tipi di dato sono stati modificati, per renderli
conformi alle definizioni usate negli altri linguaggi; ad esempio, il tipo di
dato Long è stato sostituito da Integer (il vecchio Integer ora è diventato
Short). Anche per quanto riguarda la gestione degli errori, VB si è ispirato a
Java e C++, introducendo il costrutto Try. Catch. Finally.
Un'altra importante novità è il supporto nativo per la creazione e la gestione
dei thread. La casella degli strumenti di VB, inoltre, è stata ampliata
includendo numerosi nuovi controlli utili, tra cui uno che permette di inserire
un'icona nella System Tray, vicino all'orologio. I controlli per visualizzare le
finestre di dialogo comuni e gli elementi dell'interfaccia di Windows, come la
Toolbar, la Statusbar e la Listview, fanno ora parte dei componenti standard,
cioè sono utilizzabili senza dover ricorrere a controlli OCX aggiuntivi. La
nuova versione di Visual Basic consente anche di creare applicazioni console,
cioè applicazioni eseguibili dalla riga di comando di MS-DOS.
Come conseguenza di tutte queste innovazioni i progetti realizzati con le
versioni precedenti di VB sono incompatibili con VB .NET, cioè non possono
essere aperti con quest'ultimo se non utilizzando una procedura di conversione
che, però, nella maggior parte dei casi richiede anche degli interventi
manuali. Anche il formato dei file, infatti, è stato modificato: ora tutti i
file che contengono il codice sorgente hanno estensione .vb. Per tale motivo non
è consigliabile cercare di aggiornare i propri programmi a VB .NET; al
contrario, è conveniente utilizzare questo linguaggio per la creazione dei
nuovi software.
CAMBIAMENTI NEI TIPI DI DATO RISPETTO A VISUAL BASIC 6.0
Uno dei
cambiamenti più evidenti in Visual Basic .NET, rispetto alle versioni
precedenti, riguarda i tipi di dato. Tale modifica si è resa necessaria per
rendere i tipi di dato di VB .NET formalmente uguali a quelli utilizzati in C# e
in C++ (gli altri due linguaggi "principali" di Visual Studio .NET).
Il tipo di dato Long è stato sostituito da Integer, che quindi ora è usato per
la rappresentazione di numeri interi a 32 bit; il vecchio Integer di VB6 e delle
versioni precedenti, usato per i numeri a 16 bit, è diventato Short. In VB .NET
il tipo Long serve per rappresentare i numeri a 64 bit. Comunque, per dichiarare
questi tipi di dato, è possibile utilizzare anche i nomi con cui sono
identificati all'interno del framework: invece di Short di può usare Int16,
invece di Integer Int32 e al posto di Long Int64. Riassumendo, ad esempio:
|
Visual
Basic 6
|
Visual
Basic .NET
|
|
Dim
I As Integre
|
Dim
I As Short
oppure
Dim I As Int16
|
|
Dim
L As Long
|
Dim
L As Integer
oppure
Dim L As Int32
|
|
Relativamente
alle espressioni booleane, bisogna evidenziare una importante novità
utilizzando l'operatore Or tra due espressioni logiche: ad esempio A >
0 Or B = 5, esse vengono sempre controllate entrambe, anche se, in realtà, nel
caso in cui A > 0 sia vera, non sarebbe necessario fare il controllo sulla B,
dal momento che il risultato di tutta l'espressione sarà comunque True.
Per sopperire a tale mancanza, è stato introdotto un nuovo operatore, OrElse:
utilizzando quest'ultimo, A > 0 OrElse B = 5, se la prima condizione è vera
la seconda non viene valutata.
Analogamente, per quanto riguarda l'And, l'operatore AndAlso evita il controllo
sulla seconda condizione se la prima è falsa, poiché il risultato finale sarà
sempre False.
Le stringhe a lunghezza fissa non sono più supportate nel linguaggio. Non è
quindi più possibile scrivere una dichiarazione come la seguente:
Dim S As String * 10
La nuova versione del linguaggio introduce delle novità anche per quanto
riguarda l'area di validità delle variabili: ora le variabili sono locali
rispetto alla porzione di codice in cui vengono definite. Se, ad esempio, si
dichiara una variabile all'interno di un ciclo For, essa non sarà più
utilizzabile una volta usciti dal ciclo stesso. Si verifica quindi la seguente
situazione:
Il tipo Currency è stato eliminato; al suo posto è possibile usare il nuovo
tipo Decimal per i calcoli monetari e per calcoli a virgola fissa in cui la
precisione riveste un'importanza particolare.
Il tipo di dati Variant non esiste più: al suo posto è necessario usare il
tipo Object, che comunque conserva tutte le caratteristiche del Variant, quindi
può essere utilizzato per memorizzare qualsiasi tipo di dato primitivo, nonché
Empty, Null, Nothing, oppure come puntatore ad un oggetto.
Anche la gestione degli array è cambiata: ora gli array possono essere solo a
base 0; non è quindi più possibile specificarne il limite inferiore. Un
effetto collaterale di questa modifica è che l'istruzione Option Base 1 non
esiste più.
I tipi definiti dall'utente ora non si creano più con il costrutto Type; al suo
posto è stata introdotta la parola chiave Structure. Ogni elemento all'interno
della struttura deve essere dichiarato con Dim, Event, Friend, Private, o Public
(ritorneremo su queste parole chiave più avanti, quando parleremo delle classi
in VB .NET). Ad esempio:
|
Visual
Basic 6
|
Visual
Basic .NET
|
Public
Type IMPIEGATO
Nome As String
Matricola As String
End Type
|
Public
Structure IMPIEGATO
Dim Nome As String
Dim Matricola As String
End Structure
|
|
Una novità significativa introdotta dalle Structure di VB .NET è la possibilità
di definire Sub, Function e Property all'interno di una struttura. Riprendendo
l'esempio sopra riportato, è possibile aggiungere una Sub alla struttura
IMPIEGATO che visualizzi una finestra contente le informazioni contenute nella
struttura stessa:
Public Structure IMPIEGATO
Dim Nome As String
Dim Matricola As String
Sub Informazioni()
'Visualizza una MessageBox che contiene le
informazioni contenute nella struttura.
MsgBox("Nome dell'impiegato: "
& Nome & vbCrLf & "Matricola: " & Matricola,
MsgBoxStyle.Information)
End Sub
End Structure
Un utilizzo di questa struttura è il seguente:
Dim I As IMPIEGATO
With I .Nome =
"Marco Minerva" .Matricola =
"232440"
.Informazioni()
'Richiama la Sub definita nella struttura.
End With
Altre novità importanti sono state
introdotte da VB .NET relativamente alla dichiarazione di costanti, variabili,
procedure e funzioni. Innanzi tutto, è possibile
inizializzare una variabile nella sua dichiarazione.
Nelle precedenti versioni di Visual Basic, se non diversamente specificato,
i parametri di una funzione o di una procedura venivano passati per riferimento;
in pratica, la parola chiave ByRef era predefinita. In VB .NET, invece, per
default gli argomenti sono passati ad una funzione per valore (ByVal);
utilizzando l'editor di Visual Studio .NET, se nella dichiarazione di una Sub o
di una Function non si specifica altrimenti, davanti ai nomi degli argomenti
verrà automaticamente aggiunto ByVal.
Infine, se un parametro di una funzione
è dichiarato come Optional, è obbligatorio specificare il valore che tale
parametro assumerà nel caso in cui non venga specificato quando si richiama la
funzione stessa. Ad esempio:
|
Visual
Basic 6
|
Visual
Basic .NET
|
Private
Sub DoSomething(frm As Form, Optional I As Integer)
.
End Sub
|
Private
Sub DoSomething(ByVal frm As Form, Optional ByVal I As Short = -1)
.
End Sub
|
|
Un'ultima nota riguarda il modo di restituire un valore di una Function. Nelle
precedenti versioni di Visual Basic, per restituire un valore era necessario
scrivere <nome funzione> = valore. In VB .NET, oltre a questo
metodo, è stato aggiunta la parola chiave Return, analoga a quanto già
esistente in C e in Java
Utilizzo di classi in Visual Basic.net
Alla
base di ogni linguaggio di programmazione orientato agli oggetti c'è il
concetto di classe. Nelle versioni
precedenti di Visual Basic emergeva il di modulo di classe. In effetti, le
classi di VB .NET mantengono tutte le caratteristiche dei moduli di classe, ma
ne aggiungono numerose altre. Una classe è una collezione di variabili, metodi
e proprietà; è possibile creare una classe usando il costrutto Class:
Class Test
Dim Nome As string
'Altre variabili.
Public Sub VisualizzaNome()
'...
End Sub
End Class
Una classe è anche un tipo, quindi può essere assegnata ad una variabile:
Dim Prova As New Test() 'La variabile Prova contiene un'istanza della classe
Test. E' da notare l'uso della parola chiave New,
necessaria perché la variabile che stiamo definendo si riferisce ad un oggetto
(come in Visual Basic 6, infatti, le istanze degli oggetti sono create con New).
Fatto questo, è possibile utilizzare la classe utilizzando la comune sintassi
di Visual Basic
Ereditarietà, polimorfismo e overloading
Questi
concetti stanno alla base dei linguaggi di programmazione ad oggetti che
utilizzano le classi. Si definisce ereditarietà la possibilità per una classe
(detta classe derivata) di derivare da un'altra (la classe base), in modo tale
che il tipo derivato possa utilizzare le variabili, i metodi, ecc. del tipo
base. La parola chiave utilizzata per creare una relazione di eredità è
Inherits; questa istruzione deve obbligatoriamente essere sulla prima riga di
codice dopo la definizione della classe. Il termina polimorfismo indica invece
la possibilità di definire all'interno di più classi metodi e proprietà con
lo stesso nome, in modo che, ad esempio, una classe derivata possa ridefinire un
metodo della classe base con lo stesso nome.
L'overloading, letteralmente
significa sovraccaricamento, èd
la possibilità di definire più versioni di una procedura, utilizzando
lo stesso nome ma un numero e/o un tipo diverso di argomenti: in fase di
esecuzione, sulla base degli argomenti effettivamente passati alla routine, verrà
richiamata la procedura corretta; nella guida iin linea di Visual Basic.net
sono specificati con precisione i passi che il compilatore esegue per
risolvere l'overloading, cioè per determinare qual è la routine corretta da
richiamare.
|