.NET Tutorial 1 Carlo Becchi [email protected].

75
.NET Tutorial 1 .NET Tutorial Carlo Becchi [email protected]

Transcript of .NET Tutorial 1 Carlo Becchi [email protected].

Page 1: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

1

.NET Tutorial

Carlo [email protected]

Page 2: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

2

Introduzione

Page 3: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

3

Piattaforma .NET• Caratteristiche

– Modello Servizi Web XML– Architettura componentizzata per il Web– Interoperabilità interlinguaggio– Utilizzo di architetture fortemente e debolmente accoppiate– Standard riconosciuti per linguaggio e infrastruttura– XML-centrico– Nuovo modello di sicurezza

Page 4: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

4

Piattaforma .NET e Internet

Page 5: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

5

.NET Framework

Page 6: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

6

.NET Framework• Le fondamenta dell’architettura .NET

– Sistema di sviluppo unificato e standard• C# e CLI certificati ECMA• Sviluppo in collaborazione con HP e Intel

– Supporto per qualunque linguaggio di programmazione• Conservazione del know-how esistente.• Utilizzo di linguaggi specifici orientati al campo di utilizzo.• Interoperabilità tra linguaggi conformi

Page 7: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

7

.NET Framework• Le fondamenta dell’architettura .NET

– Architettura “Multipiattaforma”• Accessibile a qualunque piattaforma via Web Service.• Disponibile per qualunque piattaforma Windows presente e

futura.• Scalabile• Pronto per dispositivi non strettamente informatici (cellulari,TV).• Elevato supporto per le interfacce grafiche lato client.

Page 8: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

8

.NET Framework• Le fondamenta dell’architettura .NET

– Sistema di comunicazione basato su XML e SOAP• Facilità di trasporto.• Modello dati unificato.• Interoperabilità con altri sistemi.• Possibilità di rendere persistenti dati e strutture.

Page 9: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

9

I tre componenti principali del Framework

Page 10: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

10

CLR: Common Language Runtime

Aka CLI: Common Language Infrastructure

Page 11: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

11

Common Language Runtime

Common Language Runtime

Security

Memory Manager

Loader

Common Language Specification

Compiler

Page 12: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

12

Common Language Runtime

• Motore di esecuzione ad elevate prestazioni

• Strumento di Sviluppo

Page 13: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

13

Common Language Runtime

• Motore di esecuzione ad elevate prestazioni– Gestione della memoria e Garbage Collection– Gestione dei thread e dei servizi del sistema operativo– Gestione della sicurezza– Gestione automatica delle dipendenze da altre componenti– Compilazione JIT di tutto il codice

Page 14: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

14

Common Language Runtime

• Strumento di sviluppo– Controllo sui tipi– Gestione delle eccezioni interlinguaggio– Accesso facilitato a servizi avanzati– Ambiente di debug unificato per tutti i linguaggi conformi– Linguaggi Microsoft inizialmente disponibili : C#, VB.NET,

C++ [J#]

Page 15: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

15

Common Language Runtime

• Managed Code (Codice Gestito)– Tutto il codice aderente alle specifiche del CLR del quale

può sfruttare i servizi– Codice “Sicuro”

• Unmanaged Code– Tutto il resto…– Codice “Insicuro” perché scavalca il CLR

Page 16: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

16

Common Language Runtime

• Il Common Language Runtime è composto da cinque componenti che sono:– CTS - Common Type System – CLS - Common Language Specification – CIL - Common Intermediate Language – JIT- Just In Time Compiler – VES – Virtual Execution System

Page 17: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

17

Common Language Runtime

Codice VB.NET

Codice C#

Codice J#

Codice C++

Codice COBOL

CompilatoreCompilatore

C#C#CompilatoreCompilatore

C++C++CompilatoreCompilatore

VB.NETVB.NETCompilatoreCompilatore

J#J#CompilatoreCompilatore

COBOLCOBOL

IntermediateIntermediateLanguageLanguage

CLRCLR

Sistema Operativo

Page 18: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

18

CTS: Common Type System

Page 19: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

19

Common Type System• Sistema di Tipi unificato ed

interlinguaggio• Un insieme standard di tipi di dato e di

regole necessarie per la realizzazione di nuovi tipi

• Due Categorie di Tipi disponibili:– Value Type– Reference Type

Page 20: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

20

Common Type System• Value Type

– Tipi atomici come integer e char– Divisi in built-in ed user defined– Descrivono valori che sono rappresentati come sequenze

di bit – Allocati nello Stack del Thread– Non soggetti al Garbage Collector

Page 21: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

21

Common Type System• Reference Type

– Entità autodefinite contententi sia metodi che variabili– Divisi in quattro sottocategorie:

• Self Describing• Interface• Pointer• Built-in

– Descrivono valori che sono rappresentati come la locazione di una sequenza di bit

Page 22: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

22

Common Type System• Reference Type

– Allocati nell’ Heap Gestito (Managed Heap)– Soggetti al Garbage Collector

Page 23: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

23

Common Type System• Conversione tra Value e Reference

(Boxing e Unboxing) gestito dal CTS• Regole di Casting gestite dal CTS

Page 24: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

24

CLS: Common Language Specification

Page 25: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

25

Common Language Specification

• Il CLS definisce un sottoinsieme del Common Type System al quale tutti i fornitori di librerie di classi e progettisti di linguaggi che puntano al CLR, devono aderire.

Page 26: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

26

Common Language Specification

• Se un componente scritto in un linguaggio (ad esempio C#) dovrà essere utilizzato da un altro linguaggio (ad esempio VB.NET), allora chi scrive il componente dovrà aderire ai tipi e alle strutture definite dal CLS.

• Ad esempio, il tipo Int32 è compatibile con il CLS ed i linguaggi e gli strumenti possono aspettarsi che altri linguaggi e strumenti conformi al CLS sappiano come utilizzarlo correttamente

Page 27: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

27

Common Language Specification

• CLS Framework– Una libreria costituita da codice aderente al CLS

• CLS Consumer– Un linguaggio o tool di sviluppo progettato per accedere a

tutte le caratteristiche fornite dai CLS Framework, ma non necessariamente in grado di produrne di nuove.

• CLS Extender– Superset del CLS Consumer

Page 28: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

28

MSIL: Microsoft Intermediate Language

Aka CIL: Common Intermediate Language

Page 29: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

29

Intermediate Language• CIL per ECMA,MSIL o IL per Microsoft

– Tutti i compilatori che aderiscono alla struttura del CLR devono generare un rappresentazione intermedia del codice, indipendente dalla CPU, chiamata Common Intermediate Language (CIL). Il runtime utilizza questo linguaggio intermedio per generare codice nativo oppure viene eseguito al volo mediante la compilazione Just In Time

Page 30: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

30

Intermediate Language• Presenta similitudini con linguaggi ad alto

livello, ma anche con il linguaggio assembly:– Istruzioni per

• il caricamento, la memorizzazione e l’inizializzazione dei dati• richiamare metodi da oggetti• aritmetiche e logiche• gestione eccezioni di tipo “Try/Catch”• Operazioni sui registri, ma indipendente dalla piattaforma• Operazioni “atomiche”

Page 31: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

31

Intermediate Language• Permette al CLR controlli durante la

compilazione:– Codice Type Safe– Puntatori corretti– Conversioni corrette– ecc.

• Di fatto rappresenta il linguaggio a livello più basso e l’unico “eseguibile” dal CLR

Page 32: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

32

Intermediate Language• Un compilatore conforme al CLS produce

– Codice IL• Rappresenta il programma vero e proprio

– Metadati• Descrivono i tipi specifici appartenenti al Common Language Types

(CLT) utilizzati nel codice, comprendente la definizione di ogni tipo, le signature per ogni membro del tipo, i membri ai quali il codice fa riferimento e gli altri dati che il runtime usa durante l’esecuzione.

• Permettono componenti autodescrittivi

Page 33: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

33

Intermediate Language• IL e Metadati sono alla fine contenuti

in uno o più file PE (Portable Executable) nella forma tradizionale:– .exe

• Se è codice di programma eseguibile– .dll

• Se è un insieme di librerie

Page 34: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

34

JIT: Just In Time Compiler

Page 35: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

35

Just In Time Compiler• Compilatore al volo basato sul concetto

JIT:– Non tutto l’IL di un PE viene eseguito durante un programma,

solo la parte necessaria viene compilata un istante prima della sua esecuzione.

– Il codice compilato viene memorizzato per successive esecuzioni

– Tutto il codice .NET è compilato JIT, anche linguaggi di scripting come VB Script, J Script, JavaScript ecc.

Page 36: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

36

JIT Entry Point / ClasseIL

Metodo 3IL

Metodo 2IL

Metodo 1IL

PORTABLE EXECUTABLE

Page 37: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

37

JIT Entry Point / ClasseIL

Metodo 3IL

Metodo 2IL

Metodo 1IL

PORTABLE EXECUTABLE

StubLOADER

Page 38: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

38

JIT Entry Point / ClasseIL

Metodo 3IL

Metodo 2IL

Metodo 1IL

Stub

Page 39: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

39

JIT Entry Point / ClasseIL

Metodo 3IL

Metodo 2IL

Metodo 1IL

Stub

JIT

Page 40: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

40

JIT Entry Point / ClasseCODICE MACCHINA

Metodo 3IL

Metodo 2IL

Metodo 1IL

Stub

Page 41: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

41

JIT Entry Point / ClasseCODICE MACCHINA

Metodo 3IL

Metodo 2IL

Metodo 1IL

Stub

Page 42: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

42

JIT Entry Point / ClasseCODICE MACCHINA

Metodo 3IL

Metodo 2IL

Metodo 1IL

Stub

Page 43: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

43

JIT Entry Point / ClasseCODICE MACCHINA

Metodo 3IL

Metodo 2IL

Metodo 1IL

Stub

JIT

Page 44: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

44

JIT Entry Point / ClasseCODICE MACCHINA

Metodo 3IL

Metodo 2IL

Metodo 1IL

Stub

Metodo 2CODICE MACCHINA

Page 45: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

45

JIT Entry Point / ClasseCODICE MACCHINA

Metodo 3IL

Metodo 1IL

Stub

Metodo 2CODICE MACCHINA

Page 46: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

46

JIT Entry Point / ClasseCODICE MACCHINA

Metodo 3IL

Metodo 1IL

Stub

Metodo 2CODICE MACCHINA

Page 47: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

47

JIT Entry Point / ClasseCODICE MACCHINA

Metodo 3IL

Metodo 1IL

Stub

Metodo 2CODICE MACCHINA

Page 48: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

48

JIT Entry Point / ClasseCODICE MACCHINA

Metodo 3IL

Metodo 1IL

Stub

Metodo 2CODICE MACCHINA

Page 49: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

49

JIT Entry Point / ClasseCODICE MACCHINA

Metodo 3IL

Metodo 1IL

Stub

Metodo 2CODICE MACCHINA

JIT

Page 50: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

50

JIT Entry Point / ClasseCODICE MACCHINA

Metodo 3IL

Metodo 1IL

Stub

Metodo 2CODICE MACCHINA

Metodo 3CODICE MACCHINA

Page 51: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

51

JIT Entry Point / ClasseCODICE MACCHINA

Metodo 1IL

Stub

Metodo 2CODICE MACCHINA

Metodo 3CODICE MACCHINA

Page 52: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

52

JIT Entry Point / ClasseCODICE MACCHINA

Metodo 1IL

Stub

Metodo 2CODICE MACCHINA

Metodo 3CODICE MACCHINA

Page 53: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

53

JIT Entry Point / ClasseCODICE MACCHINA

Metodo 1IL

Stub

Metodo 2CODICE MACCHINA

Metodo 3CODICE MACCHINA

Page 54: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

54

JIT Entry Point / ClasseCODICE MACCHINA

Metodo 1IL

Stub

Metodo 2CODICE MACCHINA

Metodo 3CODICE MACCHINA

Page 55: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

55

JIT Entry Point / ClasseCODICE MACCHINA

Metodo 1IL

Stub

Metodo 2CODICE MACCHINA

Metodo 3CODICE MACCHINA

Page 56: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

56

JIT Entry Point / ClasseCODICE MACCHINA

Metodo 1IL

Stub

Metodo 2CODICE MACCHINA

Metodo 3CODICE MACCHINA

Page 57: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

57

Just In Time Compiler• Solo il codice usato verrà compilato• Minore occupazione di memoria• Facile rimozione del codice inutilizzato da

tempo• Controlli sull’IL in fase di compilazione• Dati per la compilazione contenuti nello

stesso file del codice (metadati)• Compilazione ottimizzante perché conosce lo

stato preciso dell’ambiente di esecuzione

Page 58: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

58

VES: Virtual Execution System

Page 59: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

59

Virtual Execution System• E’ l’ambiente di esecuzione (macchina

virtuale) del CLR.• Il VES carica, realizza i link ed esegue i programmi scritti per il

Common Language Runtime contenuti nei file Portable Executable.

• Il VES adempie alle sue funzioni di Loader utilizzando le informazioni contenute nei metadati ed utilizza late binding per integrare moduli compilati separatamente, che possono essere anche scritti in linguaggi differenti.

Page 60: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

60

Virtual Execution System• Il VES inoltre fornisce servizi durante l’esecuzione dei codici, che

includono la gestione automatica della memoria, supporto per debugging, sandbox per la sicurezza analoghe a quelle Java e l’interoperabilità con il codice non gestito come ad esempio componenti COM.

Page 61: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

61

Application Domain

Page 62: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

62

Application Domain• Sono i processi leggeri del CLR

– Possono essere immaginati come una fusione della Sandbox di Java e del modello a Thread

– “Leggeri” perché più AD sono eseguiti in un unico processo Win32, ma con meccanismi di sicurezza ed isolamento

Page 63: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

63

Application Domain• Modello di sicurezza

– Controllo di sicurezza in fase di compilazione– Ogni applicazione può avere application domain multipli

associata con essa, ed ognuno di questi ha un file di configurazione contenente i permessi di sicurezza. Queste informazioni di configurazione sono utilizzate dal CLR per fornire un sistema di sicurezza tipo sandbox analogo a quello presente in Java.

Page 64: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

64

Application Domain• Modello di sicurezza

– Nonostante più application domain possano essere eseguiti in un unico processo, nessuna chiamata diretta è permessa tra metodi di oggetti presenti in differenti application domain. In alternativa un meccanismo di tipo proxy è utilizzato per isolare lo spazio dei codici.

Page 65: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

65

Assembly

Page 66: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

66

Assembly• È una collezione di funzionalità

sviluppate e distribuite come una singola unità applicativa (uno o più file).

• In pratica è una raccolta di codice compilato.

• Completamente autodescrittivo grazie al suo manifesto.

• Installazione di tipo XCOPY.

Page 67: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

67

Assembly• Il manifesto è un metadato che:

• Stabilisce l’identità dell’assembly in termini di nome, versione, livello di condivisione tra applicazioni diverse, firma digitale.

• Definisce quali file costituiscono l’implementazione dell’assembly. • Specifica le dipendenze in fase di compilazione da altri assembly. • Specifica i tipi e le risorse che costituiscono l’assembly, inclusi

quelli che vengono esportati dall’assembly. • Specifica l’insieme dei permessi necessari al corretto

funzionamento dell’assembly.

Page 68: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

68

Assembly• Il manifesto è parte indissolubile

dell’assembly ed è compreso nello stesso file.

• E’ il CLR che si preoccupa che le dipendenze espresse nel manifesto siano verificate ed eventualmente si occupa di “ripararle”

Page 69: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

69

Assembly• Il runtime è in grado di eseguire due

versioni diverse della stessa componente side-by-side.

• Il runtime è in grado di rendere disponibile due versioni diverse della stessa libreria

• Nessuna registrazione necessaria

Page 70: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

70

Assembly• Il CLR fornisce anche API utilizzate dai

motori di scripting che creano assembly dinamici durante l’esecuzione degli script; questi assembly sono eseguiti direttamente senza essere salvati su disco.

Page 71: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

71

Assembly• Global Assembly Cache

– Memoria per gli assembly “sicuri”.• Gestione riservata agli amministratori• Eseguiti fuori dalla “Sandbox”, maggiori privilegi di accesso alle risorse

• Downloaded Assembly Cache– Memoria per gli assembly transitori e/o “insicuri”.

• Assembly esterni, ad esempio scaricati dalla rete.• Eseguiti nella “Sandbox” più lenti e con minor accesso alle risorse

Page 72: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

72

Concludendo• Sistema Operativo

– Applicazione 1 (Processo Win32 Separato)• Application Domain 1• Application Domain 2

– Assembly 1

– Assembly 2

– Assembly 3

– Applicazione 2 (Processo Win32 Separato)– Applicazione 3 (Processo Win32 Separato)

Page 73: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

73Per ora….

Page 74: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

74

Bibliografia e Fonti:• Microsoft: .NET Framework Evaluation Guide

http://msdn.microsoft.com/netframework/prodinfo/frameworkevalguide.asp

• Microsoft .NET Framework SDK Documentation(Inclusa nell’installazione dell’ SDK del Framework)

• C# Help Articlehttp://www.csharphelp.com/archives/archive10.html

• MSDN Common Language Runtime overviewhttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconcommonlanguageruntimeoverview.asp

Page 75: .NET Tutorial 1 Carlo Becchi carlo.becchi@iol.it.

.NET Tutorial

75

Credits• Progetto eseguito nell’ambito del corso

di “Basi di Dati”– Realizzato da Carlo Becchi – Tutor del progetto: Ing. Mauro Coccoli– Docente del corso: Prof. Antonio Boccalatte

• Laboratorio di Informatica DIST- Siemens/ORSI– http://www.lido.dist.unige.it

Aprile 2002