|
IL .NET FRAMEWORK
In questa sezione tratteremo un argomento di
fondamentale importanza per tutte le applicazioni Visual Basic.net : il .NET
FRAMEWORK.
Il
Framework e' una piattaforma di
sviluppo grazie alla quale e' possibile sviluppare soluzioni desktop, client/server,
internet/intranet,smart device(per dispositivi mobili come palmari)
Questo rende possibile per gli sviluppatori avere un ambiente unificato per
sviluppare le loro soluzioni senza dover adottare diversi linguaggi e ambienti
di sviluppo come invece era richiesto prima dell'avvento del .NET (ad esempio
Visual Basic per applicativi desktop, client/server, C++ per le critical
application, ASP per applicazioni web).
Sostanzialmente il .NET Framework e' composto principalmente da due blocchi
distinti:
- Common Language
Runtime
- Libreria di classi
.NET
Il
Common Language Runtime,
noto come CLR, e'
l'ambiente nel quale tutti gli applicativi .NET girano. Fornisce diversi servizi
come la gestione dei thread e la gestione della memoria e del Garbage Collector
(sistema che si occupa della cancellazione della memoria non piu` utilizzata)
nonche` l'esecuzione del codice nativo generata dal compilatore
JIT (Just In Time) . Il JIT inoltre ha il compito di ottimizzare il
codice in base alla macchina su cui gira, quindi non dobbiamo preoccuparci di
utilizzare istruzioni particolari per sfruttare il Pentium4 piuttosto che l'Athlon,
nel limite del possibile ci pensera` infatti il JIT.
Tecnicamente e' anche possibile precompilare il codice per evitare che venga
utilizzato il JIT ad ogni esecuzione del programma, questo e` possibile grazie
all'utility ngen.exe, disponibile nel framework,
magari utilizzata in fase di installazione, per far si che l'applicazione venga
ottimizzata per il sistema su cui gira, pero' questa pratica non e` molto
consigliata in quanto si perdono diversi vantaggi.
La libreria di classi invece, e' un insieme di classi che si occupano delle piu`
svariate funzionalita`sia di base che avanzate e che compongono il nucleo sul
quale vengono poi sviluppate tutte le applicazioni .NET.
Queste classi, dato il numero imponente, sono organizzate in Namespace,
una sorta di contenitori logici che ci aiutano a suddividere e ad individuare le
classi in base al lavoro che svolgono. Tanto per fare un esempio se vogliamo
utilizzare una classe che si occupa di Crittografia, la potremo sicuramente
trovare nel namespace System.Security.Cryptografy.
Come si può notare, il namespace indicato e' composto da parole separate
da punti, ogni parola rappresenta un Namespace dentro il quale possono esserci
altri Namespace annidiati o classi. Infatti il Namespace Cryptografy che a noi
interessa, e' contenuto nel Namespace Security che a sua volta e' contenuto nel
Namespace System.
Visual Studio .NET
grazie alla funzionalita' IntelliSense, simile a quella utilizzata in
VB6, semplicemente scrivendo il nome di una classe o di un namespace, seguito
dal punto, ci elenchera' i metodi (nel caso di classe) o i namespace e le classi
(nel caso di Namespace) a disposizione.
Tutte queste classi sono contenute in assembly
(una sorta di DLL) conservate nella GAC
(Global Assembly Cache), una directory creata al momento
dell'installazione del framework, che contiene, come il nome puo` suggerire, gli
assembly utilizzati comunemente da tutti gli applicativi.
Oltre a questo Visual Studio .NET mette a disposizione anche un tool per il
setup, tool tra l'altro necessario se si devono compiere modifiche nel registry,
accedere a cartelle di sistema, registrare assembly nella GAC, etc... senza
doversi fare da soli il programma di installazione.
Compilazione
e Integrazione tra linguaggi
Un'altra
cosa molto importante e` l'integrazione
tra i vari linguaggi,
infatti ora sara` possibile scrivere assembly con qualsiasi linguaggio Managed
(gestito dal framework) che sara` poi possibile riutilizzare richiamando le
classi con un'altro linguaggio, al giorno d'oggi esistono, oltre a VB.NET, C#,
C++ Managed e J#, anche molti altri linguaggi dotati di compilatore che genera
per l'appunto codice MSIL.
Per fare un esempio, possiamo crearci (o farci realizzare) le classi che
compongono la parte di elaborazione in C# e salvarla in una libreria di classi
(un assembly) e poi richiamare questo assembly in VB.NET con il quale possiamo
poi realizzarne l'interfaccia grafica.
Questo e` dovuto al fatto che ora
il codice compilato non sara` piu` in codice nativo, ma sara` in MSIL
(Microsoft Intermediate Language),
una sorta di linguaggio intermedio insomma.
Facendo un confronto con
Java, il concetto di MSIL e` paragonabile al ByteCode e il CLR e`
paragonabile alla Java Virtual Machine.
Per far si che i vari linguaggi possano interagire correttamente, devono seguire
uno standard per la definizione dei tipi, perche' un linguaggio potrebbe non
conoscere un tipo di dato o potrebbe averlo di dimensioni diverse o memorizzati
diversamente, basti pensare a come Visual Basic e C++ gestiscono diversamente le
stringhe, si rende quindi necessario uno standard, ed e` per questo che esiste
il CTS
(Common Type System)
che permette appunto di avere delle regole da seguire nell'implementazioni dei
linguaggi Managed e definisce un insieme di tipi comuni che i vari linguaggi
devono utilizzare internamente (il programmatore potra` utilizzare i tipi di
dati a lui famigliari, il compilatore dovrà
convertirli).
I programmatori affinché possano
sfruttare l'interoperabilita dovranno seguire delle regole dettate dal CLS
(Common Language Specification).
Ad esempio nel caso volessimo avere
del codice CLS Compliant in C#, queste regole si possono riassumere cosi:
- I
tipi unsigned (senza segno) non dovrebbero far parte dell'interfaccia
pubblica delle classi.
In poche parole nessun metodo pubblico e nessuna proprieta` pubblica
dovrebbero utilizzare, come parametri o valori di ritorno, dei tipi di dato
unsigned. Nonostante questo possiamo utilizzarli a livello di scope della
funzione oppure utilizzarli liberamente in proprieta` o metodi privati.
- Tipi
di dato Unsafe come i puntatori non dovrebbero essere utilizzati con i
membri pubblici.
Anche in questo caso si possono liberamente utilizzare nei membri privati.
- I
nomi delle classi, dei membri e delle proprieta' non dovrebbero differire
solo in base al maiuscolo/minuscolo.
Quindi non dovremmo dichiarare due metodi diversi come metodo1 e MeToDo1,
questo perche` linguaggi come Visual Basic non sono case sensitive e quindi
non riuscirebbero a risolvere il nome del metodo.
- Solo
proprieta' e metodi possono subire l'overloading, non gli operatori.
Linguaggi come il C# permettono di fare l'overloading degli operatori ma
altri come il Visual Basic non lo riescono a sfruttare, quindi per mantenere
la compatibilita` con questi linguaggi, questa capacita` e` stata rimossa
dalle specifiche CLS. Questo ovviamente riguarda le classi che esponete
pubblicamente, se avete classi private potete fare quel che volete.
|