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
Scarica

Scarica - Microsoft