Introduzione al .NET Framework Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail: [email protected] Italian blog: http://blogs.devleap.com/marco.blog www.devleap.it 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 Prima di COM Applicazion e 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 … Common Language Specification User Interface Data and XML Base Class Library Common Language Runtime www.devleap.it Visual Studio.NET Web Services 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 Sorgenti Compilatore .NET Codice MSIL (Assembly) .EXE/.DLL Compilatore JIT Codice nativo www.devleap.it Output Common Language Runtime VB C++ C# JScript … Common Language Specification User Interface Data and XML Base Class Library Common Language Runtime www.devleap.it Visual Studio.NET Web Services 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 Base Class Library Support Thread Support COM Marshaler Type Checker Exception Manager Security Engine Debug Engine IL to Native Compilers Code Manager Class Loader www.devleap.it Garbage Collector 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 Approfondimento: www.devleap.it www.devleap.it Assembly Modulo (file PE) Codice IL Metadati Manifest 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 • 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 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 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 a() b() Try c() d() Sub c r() s() t() End Sub Catch e As Exception f() End Try g() www.devleap.it Sub s Dim a As MyClass a = null a.z() a.w() a.x() End Sub 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) www.devleap.it Modello di esecuzione Assembly Execution Support Code Managers Security System Class Loader IL to native code compiler Managed Native Code CPU www.devleap.it Primo riferimento al tipo Prima chiamata al metodo Elaborazione sincrona e asincrona Elaborazione sincrona a() b() c() d() e() f() g() h() Tempo Elaborazione asincrona a() f o r k c() e() g() b() d() f() www.devleap.it j o i n h() Thread 1 Thread 2 Elaborazione sincrona e asincrona • Programmazione asincrona possibile da tutti i linguaggi • • • • • Chiamate asincrone Thread Thread pool Componenti remoti A volte è “involontaria”... Approfondimento: www.devleap.it • Nuovo problema: componenti thread-safe • Anche per gli sviluppatori VB!! www.devleap.it Librerie di classi VB C++ C# JScript … Common Language Specification User Interface Data and XML Base Class Library Common Language Runtime www.devleap.it Visual Studio.NET Web Services Unico modello di programmazione Disponibilità di API indipendentemente dal linguaggio e dal modello di programmazione .NET Framework RAD, Componenti VB Forms Subclassing, Potenza, Espressività MFC/ATL Windows API www.devleap.it Stateless, Codice incapsulato in pagine HTML ASP 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 Compilation System.Windows.Forms UI HtmlControls Design ComponentModel WebControls Handlers System.Drawing Hosting Caching Security Drawing2D Printing Configuration SessionState Imaging Text System.Data System.Xml OleDb Common Xsl Schema SqlClient SQLTypes XPath Serialization System Collections IO Security Configuration Reflection Text Diagnostics Resources Threading Runtime InteropServices Remoting Serialization Globalization www.devleap.it Base Framework System Collections Security Configuration Text Diagnostics Threading Globalization Runtime IO InteropServices Reflection Remoting Resources Serialization 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 Linguaggi e Tool VB C++ C# JScript … Common Language Specification User Interface Data and XML Base Class Library Common Language Runtime www.devleap.it Visual Studio.NET Web Services 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: • VB, C++, C#, JScript • Linguaggi di terze parti: • APL, COBOL, Pascal, Eiffel, Haskell, ML, Oberon, Perl, Python, Scheme, Smalltalk, … www.devleap.it Visual Studio.NET VB C++ C# JScript … Common Language Specification User Interface Data and XML Base Class Library Common Language Runtime www.devleap.it Visual Studio.NET Web Services 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 – [email protected] www.devleap.it