Il framework .NET INTRODUZIONE Un po’ di storia Sin dalla prima versione del sistema operativo Windows (1990 circa), nacque la necessità di far comunicare gli applicativi. Vennero sviluppate, dalle maggiori società, diverse soluzioni: Microsoft presentò prima le DDE, Dynamic Data Exchange e poi le DCOM, Distributed Common Object Model, mentre altre società di grosso calibro, come Sun e IBM rispondevano con CORBA e altri sistemi. Tutti questi sistemi soddisfacevano alcune esigenze, permettevano magari di intercambiare informazioni in maniera agevole e dinamica all’interno dello stesso sistema operativo, ma difficilmente tra sistemi differenti (è il caso delle DCOM). Oppure erano progettate proprio per lo scambio di dati a prescindere dalla piattaforma, come CORBA, ma la loro programmazione era complicatissima. Microsoft ha proposto la sua risposta a questo problema con l’introduzione della piattaforma .NET (.NET Framework). Cos’è un framework Un framework (letteralmente area di lavoro) è una struttura mediante la quale è possibile progettare e realizzare software. All’interno di un framework sono presenti gli strumenti (librerie di base, programma di gestione ecc) in grado di dare un prezioso aiuto allo sviluppatore che può preoccuparsi della qualità del codice, senza dover pensare alle interazioni a basso livello tra gli oggetti. Esistono molti tipi di framework e uno tra questi è il Microsoft .NET Framework, che al suo interno comprende una serie di linguaggi (come Visual Basic .NET, C#, J# ecc). Il .NET Framework contiene al suo interno una serie di linguaggi (VB.NET, C#, J#, VC++.Net sono solo alcuni) che permettono di utilizzare tutta una serie di tecnologie (sia in ambiente Web che Desktop), tramite una serie di strumenti comuni. Il linguaggio non conta Il linguaggio nel quale scriviamo il programma non conta. Tutti i linguaggi appartenenti al .NET Framework (sia Visual Basic, C#, J# o Perl .NET) sono performanti allo stesso modo. Proprio perché il framework si basa su una serie di regole comuni, tutti i linguaggi della famiglia .NET sono interoperabili: è possibile, per esempio, scrivere una libreria di funzioni (Assembly in inglese) in Visual Basic ed utilizzarla in un programma in C#. E’ possibile, per esempio, creare un sito web utilizzando qualche pagina in C#, qualche pagina in VB.NET e qualche altra pagina ancora in Perl .NET! E il risultato sarà sempre invariato. I linguaggi Tutti i linguaggi all’interno del framework hanno le stesse caratteristiche e le stesse performance. Un programma scritto in C# è ugualmente potente (o veloce) di un programma scritto in Visual Basic .NET. E’ possibile utilizzare una DLL creata in Perl .NET da un programma creato in J#! IL – Intermediate Language Supponiamo di creare un piccolo software per la lettura della posta elettronica (un comune client come può essere Eudora o Outlook), realizzandolo in Visual Basic .NET (o C# o J#). Per poter realizzare il programma sarà possibile utilizzare dei programmi di sviluppo (come Visual Studio) oppure semplicemente notepad. Una volta creato tutto il codice sorgente, provvederemo a compilarlo nel suo linguaggio specifico (VB.NET in questo caso). A questo punto subentra una delle caratteristiche principali del framework .NET: il linguaggio intermedio. In realtà, al momento della compilazione, noi abbiamo “tradotto” il programma da un linguaggio umanamente comprensibile, come Visual Basic .NET, in un linguaggio pronto per essere utilizzato dalla macchina, il linguaggio intermedio. Qualsiasi sia il linguaggio in cui viene creato un applicativo in .NET, al momento in cui il programmatore lo compila, lo trasforma automaticamente in linguaggio intermedio. Questo linguaggio intermedio (IL – Intermediate Language) non è tuttavia, il risultato finale. JIT Prima di poter essere effettivamente utilizzato, il nostro programma subirà una ulteriore mutazione: verrà infatti compilato nuovamente, questa volta ad opera del JIT (Just In Time Activation), in linguaggio nativo (codice macchina). Questo è l’ultimo passaggio e adesso il software è pronto per essere utilizzato. Il Jit è un elemento del framework che si attiva automaticamente (e quindi provvede ad effettuare automaticamente la compilazione) la prima volta che viene eseguito il nostro applicativo. I passi della compilazione Viene creato il software utilizzando un qualsiasi linguaggio di programmazione .NET (come Visual Basic .NET o C#) Lo sviluppatore effettua la prima compilazione, trasformando dal codice sorgente al codice intermedio il suo programma. La prima volta che il programma viene eseguito, il .NET Framework compila ulteriormente il programma, trasformandolo da IL in codice nativo. Tutte le successive esecuzioni dello stesso programma non faranno più scattare la compilazione: solo nel caso che il programma venga modificato interverrà nuovamente il JIT. Tipi di dato comuni Sia che si tratti di un programma desktop (per esempio un client di posta elettronica) fatto in C#, che di un sito web creato in Visual Basic, i tipi di dati (stringhe, interi, ecc) saranno gli stessi. Tutti i dati, di tutti i linguaggi, all’interno del framework derivano da una “base” comune e sono, pertanto utilizzabili attraverso più linguaggi! Senza effettuare nessuna forma di conversione posso utilizzare un intero creato in C# da un applicativo in Visual Basic, senza rischiare mai di perdere dati o corromperli! Common Language Runtime Il Common Language Runtime raggruppa al suo interno tutti quei componenti che costituiscono la base del framework .NET, come il Garbage Collector (gestore della memoria) e il Jit. Il .NET framework è l’implementazione, ovvero la messa in pratica, di una serie di regole standard condivise a livello mondiale. L’insieme di queste regole viene definito CLI, ovvero Common Language Interface. Pertanto tutti i sistemi, anche presenti su piattaforme differenti, che si basino sulle regole sancite nel CLI, saranno compatibili tra di loro! Semplificando possiamo dire che il CLI specifica come si debba comportare una piattaforma nella gestione della memoria e degli applicativi. Sintesi Il Framework .NET è una piattaforma che si basa su delle regole standard e aperte. Queste regole indicano sostanzialmente come debba essere gestita la memoria e quali sono i tipi di dati che possono essere utilizzati. • Le regole sono descritte all’interno del CLI (Common Language Interface) e del CTS (Common Type System), mentre le loro implementazioni nel framework sono il CLR (Common Language Runtime )e il CLS. • Qualsiasi piattaforma che si basi sulle stesse regole sarà compatibile con il framework .NET e quindi sarà possibile utilizzare trasversalmente i componenti (quelli del framework nell’altra piattaforma e viceversa) a prescindere dal sistema operativo in cui si trovano. • Con il .NET Framework la deallocazione delle risorse avviene in maniera automatica, ad opera del Garbage Collector.