Introduzione al .NET Framework Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: marco@devleap.it Italian blog: http://blogs.devleap.com/marco.blog
DevLeap? Che roba è? www.DevLeap.it Un gruppo di 5 persone con tanta voglia di Studiare a fondo le tecnologie Capire il “behind the scenes” Implementare soluzioni reali Confrontarsi con le problematiche reali Sperimentare nuove idee Facciamo Corsi, Conferenze, Training Scriviamo libri http://www.devleap.it/fullcontact www.devleap.it
Chi siete ? Chi conosce Java? Chi conosce Visual Basic? Chi conosce C++? Chi conosce COM? www.devleap.it
Agenda Perché .NET Common Language Runtime Semplificazione: sviluppo e deployment Affidabilità del codice Principali servizi del Framework Piattaforma multi-linguaggio Unificazione modello programmazione Librerie disponibili www.devleap.it
Perché .NET Attuali tecniche di programmazione: Server: C++, Java, T-SQL, … Middle-tier: VB, C++, … Web Presentation: ASP, JSP, PHP, … Web Client: Jscript, VBscript Rich-client: VB, C++, Java, … Protocolli: HTTP, XML-RPC, DCOM, CORBA, … www.devleap.it
Perché .NET Difficile effettuare sviluppo omogeneo Molto tempo viene dedicato a far comunicare i vari “strati” Serve un salto qualitativo per semplificare lo scenario Ma non c’era COM ? www.devleap.it
Codice e strutture dati Prima di COM Applicazione Codice e strutture dati Prima di COM, le applicazioni erano entità completamente separate, senza integrazione www.devleap.it
L’era di COM COM fornisce un meccanismo per integrare dei componenti. Ogni componente deve però fornire dei “contatti” e gli oggetti non possono interagire direttamente www.devleap.it
.NET: oltre l’era di COM Con “.NET Framework Common Language Runtime”, i componenti sono costruiti su uno strato comune. Gli oggetti interagiscono direttamente. www.devleap.it
Architettura .NET Framework VB C++ C# JScript … Visual Studio.NET Common Language Specification Web Services User Interface Data and XML Non fermarsi a spiegare, il significato dei vari componenti arriva durante la presentazione Base Class Library Common Language Runtime www.devleap.it
Cosa è .NET È un ambiente di esecuzione (runtime environment) Semplifica lo sviluppo e il deployment Aumenta l’affidabilità del codice È completamente indipendente da COM È fortemente integrato con COM Unifica il modello di programmazione www.devleap.it
Ambiente di esecuzione Concetti chiave: MSIL: Microsoft Intermediate Language CLR: Common Language Runtime CTS: Common Type System CLS: Common Language Specification www.devleap.it
Codice MSIL Codice MSIL Compilatore .NET Sorgenti (Assembly) .EXE/.DLL Codice nativo Output Compilatore JIT www.devleap.it
Common Language Runtime VB C++ C# JScript … Visual Studio.NET Common Language Specification Web Services User Interface Data and XML Evidenziare posizione CLR Base Class Library Common Language Runtime www.devleap.it
Common Language Runtime IL CLR offre vari servizi alle applicazioni Managed code (MSIL) Common Language Runtime (CLR) Funzionalità specifiche di CLR (es. Garbage Collection) Funzionalità esistenti (es. I/O su file) mediate da CLR Sistema operativo (Win32, …) www.devleap.it
Common Language Runtime Sviluppo iniziato nel ’97 Nato inizialmente come ambiente di esecuzione migliorato per COM+ Metadati distribuiti in troppe posizioni diverse Registry COM+ catalog DLL Modello nuovo per fare cose vecchie Sviluppo di una API (C, C++) Sviluppo di wrapper COM per l’API www.devleap.it
Common Language Runtime Class Loader IL to Native Compilers Code Manager Garbage Collector Security Engine Debug Engine Type Checker Exception Manager Thread Support COM Marshaler Base Class Library Support Notare che la BCL astrae molti dei servizi del sistema operativo sottostante, ed è anche presente come libreria di .NET Framework a livello superiore rispetto al CLR. www.devleap.it
Sviluppo semplificato Ambiente object-oriented Qualsiasi entità è un oggetto Classi ed ereditarietà pienamente supportati Anche tra linguaggi diversi ! Riduzione errori comuni di programmazione Linguaggi fortemente tipizzati Errori non gestiti Meno memory leak: Garbage Collector www.devleap.it
Indipendenza dalla piattaforma .NET è un’implementazione di CLI Common Language Infrastructure CLI è uno standard ECMA, definito con C# ECMA-334, ECMA-335 Esistono già altre implementazioni di CLI: SSCLI (Microsoft, per Windows, FreeBSD e Macintosh) Mono (per Linux) DotGNU Intel OCL (Open CLI Library) … www.devleap.it
Deployment semplificato Assembly Unità minima per la distribuzione, il versioning e la security Simile alle DLL, ma aggiunge meta-dati sul contenuto attraverso il “Manifest” Può essere composto da uno o più file Il manifest può risiedere in un file EXE/DLL separato, oppure in un EXE/DLL che contiene codice dell’assembly Note su distribuzione assembly multi-file – si possono copiare file per file, ma è meglio fare un .MSI per l’installazione. Approfondimento: www.devleap.it www.devleap.it
Assembly a modulo singolo Codice IL Metadati Manifest Modulo (file PE) Nota: si riprendono gli assembly più avanti, non approfondire troppo su questa slide e sulla precedente. Assembly a modulo singolo www.devleap.it
Deployment semplificato Installazione senza effetti collaterali Le applicazioni e i componenti possono sempre essere condivisi o privati Esecuzione side-by-side Diverse versioni dello stesso componente possono coesistere, anche nello stesso processo www.devleap.it
Dove sono gli assembly Assembly privati Assembly condivisi Directory applicazione (e sub-directory) Assembly condivisi Global Assembly Cache (GAC) c:\windows\assembly Assembly scaricati da URL Download cache c:\Documents and Settings\%USERNAME%\Local Settings\Application Data\assembly\dl2 GACUTIL.EXE Tool per esaminare GAC e download cache GACUTIL /l – per vedere GAC GACUTIL /ldl – per vedere download cache www.devleap.it
Deployment degli assembly XCOPY Applicazioni ASP.NET .CAB Applicazioni Windows Forms - Code Download .MSI (Windows Installer) Applicazioni Windows Forms Installazione in GAC di assembly condivisi Configurazione shortcut www.devleap.it
Sicurezza e affidabilità del codice Separazione spazi di memoria in un processo con AppDomain Controllo del codice e sicurezza dei tipi Sono impediti cast non sicuri, variabili non inizializzate, accessi ad array oltre i limiti di allocazione Garbage Collector per tutti gli oggetti .NET Gestione delle eccezioni Miglioramento della diagnostica di errore Integrata con Windows SEH www.devleap.it
Application Domain Unità di elaborazione in .NET Un processo può avere più AppDomain Si può scaricare un AppDomain, non un assembly Relazione thread – AppDomain Runtime host creano AppDomain ASP.NET, Internet Explorer, Shell, … Gestione diretta degli AppDomain www.devleap.it
Assembly in AppDomain Processo AppDomain AppDomain Assembly Assembly Shared Assembly Shared Assembly Uno shared assembly carica una sola volta in memoria il codice dell’assembly; i dati restano locali ai due AppDomain. Per scaricare un assembly bisogna scaricare un intero AppDomain. www.devleap.it
Garbage Collector Gli oggetti vengono distrutti automaticamente quando non sono più referenziati A differenza di COM, non ci si basa sul Reference Counting Maggiore velocità di allocazione Consentiti i riferimenti circolari Perdita della distruzione deterministica Algoritmo Mark-and-Compact www.devleap.it
Garbage Collector - fase 1: Mark NextObjPtr Root set Oggetti “vivi” Oggetti non raggiungibili Spazio libero www.devleap.it
Garbage Collector - fase 2: Compact Spazio recuperato NextObjPtr Root set Oggetti “vivi” Spazio libero www.devleap.it
GC e distruzione deterministica In alcuni casi serve un comportamento di finalizzazione deterministica: Riferimenti a oggetti non gestiti Utilizzo di risorse che devono essere rilasciate appena termina il loro utilizzo Non si possono usare i finalizzatori, che non sono richiamabili direttamente Implementare l’interfaccia IDisposable www.devleap.it
Piattaforma multi-linguaggio Libertà di scelta del linguaggio Tutte le funzionalità di .NET Framework sono disponibili a tutti i linguaggi .NET I componenti di un’applicazione possono essere scritti con diversi linguaggi Impatto sui tool Tool disponibili per tutti i linguaggi: Debugger, Profiler, Analisi “Code coverage”, ecc. www.devleap.it
CTS: Common Type System Sistema di tipi comune Alla base di tutti i linguaggi .NET Progettato per linguaggi object-oriented, procedurali e funzionali Esaminate caratteristiche di 20 linguaggi Tutte le funzionalità disponibili con IL Ogni linguaggio utilizza alcune caratteristiche Common Language Specification (CLS) Sottoinsieme di CTS Regole di compatibilità tra linguaggi www.devleap.it
Gestione degli errori Uniforme per tutte le classi Gestione strutturata delle eccezioni Concetto implementato nel CTS Disponibile in tutti i linguaggi con sintassi diverse Concetti universali: Lanciare un’eccezione Catturare un’eccezione Codice di uscita da un blocco controllato (finally) Non ha costi elevati (codice/prestazioni) www.devleap.it
Gestione strutturata delle eccezioni b(); try { c(); d(); } catch (Exception e) { f(); g(); void c() { r(); s(); t(); } void s() { MyClass a; a = null; a.z(); a.w(); a.x(); } www.devleap.it
Gestione strutturata delle eccezioni b() Try c() d() Catch e As Exception f() End Try g() Sub c r() s() t() End Sub Sub s Dim a As MyClass a = null a.z() a.w() a.x() End Sub www.devleap.it
Principali servizi del CLR Garbage collector Gestione del ciclo di vita degli oggetti Problema della distruzione deterministica Reflection Analisi dei metadati di un assembly Generazione di un assembly dinamico Remoting Chiamata di componenti remoti (.NET) Interoperabilità (COM, Platform Invoke) Piccola intro, si approfondisce con le prossime slide www.devleap.it
IL to native code compiler Modello di esecuzione Assembly Class Loader Primo riferimento al tipo IL to native code compiler Execution Support Managed Native Code Prima chiamata al metodo Code Managers Security System CPU www.devleap.it
Elaborazione sincrona e asincrona d() e() f() g() h() Tempo Elaborazione asincrona a() f o r k c() e() g() j o i n h() Thread 1 b() d() f() Thread 2 www.devleap.it
Elaborazione sincrona e asincrona Programmazione asincrona possibile da tutti i linguaggi Chiamate asincrone Thread Thread pool Componenti remoti A volte è “involontaria”... Nuovo problema: componenti thread-safe Anche per gli sviluppatori VB!! Approfondimento: www.devleap.it www.devleap.it
Common Language Specification Common Language Runtime Librerie di classi VB C++ C# JScript … Visual Studio.NET Common Language Specification Web Services User Interface Data and XML Base Class Library Common Language Runtime www.devleap.it
Unico modello di programmazione .NET Framework Disponibilità di API indipendentemente dal linguaggio e dal modello di programmazione VB Forms RAD, Componenti MFC/ATL Subclassing, Potenza, Espressività ASP Stateless, Codice incapsulato in pagine HTML Windows API www.devleap.it
Estendibilità delle classi Il Framework non è una “scatola nera” Qualsiasi classe .NET può essere estesa mediante ereditarietà Diversamente da COM, si usa e si estende la classe stessa, non uno strato intermedio (wrapper) L’ereditarietà è cross-language www.devleap.it
.NET Framework Web Services User Interface Data Xml Base Class Library www.devleap.it
.NET Framework System.Web System.Windows.Forms System.Drawing UI Design ComponentModel Compilation HtmlControls Handlers WebControls Hosting System.Drawing Caching Security Drawing2D Printing Configuration SessionState Imaging Text System.Data System.Xml OleDb Common Xsl Schema SqlClient SQLTypes XPath Serialization System Collections IO Security Runtime InteropServices Configuration Reflection Text Remoting Diagnostics Resources Threading Serialization Globalization www.devleap.it
Base Framework System Collections Security Configuration Text Diagnostics Threading Globalization Runtime InteropServices IO DEV303 – strutture dati in .NET (Francesco Balena) Remoting Reflection Serialization Resources www.devleap.it
Data e XML System.Data Common OleDb SqlClient SqlTypes System.Xml Schema Xsl Serialization XPath www.devleap.it
Web Forms e Services System.Web UI Compilation HtmlControls Handlers WebControls Hosting Caching Security Configuration SessionState www.devleap.it
Windows Forms System.Windows.Forms Design ComponentModel System.Drawing Drawing2D Printing Imaging Text www.devleap.it
Common Language Specification Common Language Runtime Linguaggi e Tool VB C++ C# JScript … Visual Studio.NET Common Language Specification Web Services User Interface Data and XML Base Class Library Common Language Runtime www.devleap.it
Linguaggi La piattaforma .NET è neutrale rispetto al linguaggio (nessuno è favorito) Tutti i linguaggi .NET hanno le stesse possibilità Si possono sfruttare skill già esistenti Common Language Specification Consumer: Può usare .NET Framework Extender: Può estendere .NET Framework www.devleap.it
Linguaggi Microsoft fornisce: Linguaggi di terze parti: VB, C++, C#, JScript Linguaggi di terze parti: APL, COBOL, Pascal, Eiffel, Haskell, ML, Oberon, Perl, Python, Scheme, Smalltalk, … www.devleap.it
Common Language Specification Common Language Runtime Visual Studio.NET VB C++ C# JScript … Visual Studio.NET Common Language Specification Web Services User Interface Data and XML Base Class Library Common Language Runtime www.devleap.it
Visual Studio .NET Un solo tool per tutti i linguaggi Creazione e consumo di servizi Web Modello a oggetti del codice in editor Debugger integrato … www.devleap.it
Considerazioni finali Un mondo nuovo per sviluppare Framework di classi già molto esteso Ma soprattutto coerente! Quasi tutto completamente estendibile Alta integrabilità con il codice esistente Ottima piattaforma per sviluppare componenti COM A prima vista è tutto semplice, ma è bene sapere cosa c’è dietro (tanto!!) www.devleap.it
Altre Informazioni Dove posso ottenere maggiori informazioni www.devleap.it www.microsoft.com/msdn/italy msdn.microsoft.com www.gotdotnet.com Developer resources Microsoft Visual Studio.NET Microsoft .NET Framework SDK Microsoft Developer Network www.devleap.it
Introduzione al .NET Framework I vostri feedback sono importanti Scriveteci Grazie della partecipazione A presto info@DevLeap.it www.devleap.it