Ingegneria del software L-A
Introduzione al Framework .NET
Framework .NET
ò È un ambiente di esecuzione (runtime environment) I n
g ò Semplifica lo sviluppo e il deployment e g n e
r ò
i Aumenta l’affidabilità del codice a
d e l
ò s Unifica il modello di programmazione o f t w a
r ò e È completamente indipendente da COM
L - A (Component Object Model) ò È fortemente integrato con COM
2
Laboratorio di Informatica L-B 1.1 Sviluppo semplificato
ò Ambiente object-oriented – Qualsiasi entità è un oggetto I n
g – Classi ed ereditarietà pienamente supportati e g n
e – Anche tra linguaggi diversi r i a
d
e ò Riduzione errori comuni di programmazione l
s o f
t –
w Linguaggi fortemente tipizzati – Type Checker a r e
– Errori non gestiti – generazione di eccezioni L - A – Meno memory leak – Garbage Collector
3
Indipendenza dalla piattaforma
ò .NET è un’implementazione di CLI – Common Language Infrastructure I n
g ò CLI e il linguaggio C# sono standard ECMA e g n e
r – ECMA-334 (C#), ECMA-335 (CLI) i a
d e
l ò
Esistono altre implementazioni di CLI: s o f t w – SSCLI (Shared Source CLI by Microsoft, per a r e
Windows, FreeBSD e Macintosh) - Rotor L - A – Mono (per Linux) – DotGNU – Intel OCL (Open CLI Library) – … 4
Laboratorio di Informatica L-B 1.2 Standard ECMA-335
ò Defines the Common Language Infrastructure (CLI) in which applications written in multiple high level languages may be executed in different system I n g
e environments without the need to rewrite the g n e
r application to take into consideration the unique i a
d
e characteristics of those environments l
s o
f ò CLI is a , with: t runtime environment w a
r – a file format e
L -
A – a common type system – an extensible metadata system – an intermediate language – access to the underlying platform – a factored base class library
5
Piattaforma multi-linguaggio
ò Libertà di scelta del linguaggio – Tutte le funzionalità del framework .NET sono I n disponibili a tutti i linguaggi .NET g e g
n – I componenti di un’applicazione possono essere e r i a
scritti con diversi linguaggi d e l
s
o ò Impatto sui tool f t w a
r – Tool disponibili per tutti i linguaggi: e
L -
A Debugger, Profiler, ecc.
6
Laboratorio di Informatica L-B 1.3 Framework .NET
ò Concetti chiave: – (Microsoft) Intermediate Language - (MS)IL I n
g – Common Language Runtime - CLR e g
n ambiente di esecuzione runtime per le applicazioni .NET e r
i il codice che viene eseguito sotto il suo controllo si dice a
d
e codice gestito (managed) l
s o f
t – Common Type System - CTS w a
r tipi di dato supportati dal framework .NET e
L
- consente di fornire un modello di programmazione unificato A – Common Language Specification - CLS regole che i linguaggi di programmazione devono seguire per essere interoperabili all’interno del framework .NET sottoinsieme di CTS
7
Codice interpretato I n g e g n e r i a
d e l
Esecuzione s Sorgenti o Interprete f t w a r e
L - A
8
Laboratorio di Informatica L-B 1.4 Codice nativo I n Sorgenti g Compilatore e g n e r i a
d e l
s o f t w a r e
L - A Codice nativo Esecuzione (.EXE)
9
Codice IL
Codice Compilatore IL I
n Sorgenti g
e .NET
g (Assembly) n
e .EXE/.DLL r i a
d e l
s o f t w a r e
L - A Compilatore Codice Esecuzione JIT nativo
10
Laboratorio di Informatica L-B 1.5 Codice IL
Codice Compilatore IL I
n Sorgenti g
e .NET (Assembly) g n
e .EXE/.DLL r i a
d Codice + e l
s
o metadati f t w a r e
L - A Compilatore Codice Esecuzione JIT nativo
11
Codice IL
Ambiente di Codice Sorgenti Compilatoerseecuzione IL I n
g .NET.NET Runtime (Assembly) e g
n .EXE/.DLL e r i a
d e l
s o f t w a r e
L - A Compilatore Codice Esecuzione JIT nativo
12
Laboratorio di Informatica L-B 1.6 Assembly
ò Unità minima per la distribuzione, il versioning e la security – 1+ file I n g e
g ò Manifest n e r
i – Metadati che descrivono l’assembly stesso a
d e
l ò Type metadata s o f
t – w Metadati che descrivono completamente tutti i tipi contenuti a r
e nell’assembly
L - A ò Codice in Intermediate Language – Ottenuto da un qualsiasi linguaggio di programmazione ò Risorse – Immagini, icone, …
13
Assembly
Single-File Assembly Multi-File Assembly
Util.dll I n g
e Calc.dll
g Calc.dll Type Metadata n e r
i Manifest a
Manifest d e l
s
o Type Metadata IL Code f
t Type Metadata w a r e
L - A IL Code IL Code Pict.gif
Resource Resources
14
Laboratorio di Informatica L-B 1.7 Assembly
.assembly Hello { } .assembly extern mscorlib { } .method public static void main() I n
g { e g n
e .entrypoint r i a
d ldstr "Hello IL World!" e l
s
o call void [mscorlib]System.Console::WriteLine f t w (class System.String) a r e
ret L - A }
ilasm helloil.il
15
Assembly
ò Assembly privati – Utilizzati da un’applicazione specifica – Directory applicazione (e sub-directory) I n g e
g ò Assembly condivisi n e r
i – Utilizzati da più applicazioni a
d
e – Global Assembly Cache (GAC) l
s o
f – c:\windows\assembly t w a r e ò Assembly scaricati da URL
L - A – Download cache – c:\windows\assembly\download ò GACUTIL.EXE – Tool per esaminare GAC e download cache
16
Laboratorio di Informatica L-B 1.8 Deployment semplificato
ò Installazione senza effetti collaterali – Applicazioni e componenti possono essere I n ò condivisi o g e
g ò
n privati e r i a
d ò Esecuzione side-by-side e l
s
o – Diverse versioni dello stesso componente possono f t w
a coesistere, anche nello stesso processo r e
L - A
17
Metadati
ò Descrizione dell’assembly - Manifest – Identità: nome, versione, cultura [, public key] I
n – Lista dei file che compongono l’assembly g e
g –
n Riferimenti ad altri assembly da cui si dipende e r i a – Permessi necessari per l’esecuzione
d e l
s ò
o Descrizione dei tipi contenuti nell’assembly f t w
a – Nome, visibilità, classe base, interfacce r e
L – - Campi, metodi, proprietà, eventi, … A ò Attributi – Definiti dal compilatore – Definiti dal framework – Definiti dall’utente 18
Laboratorio di Informatica L-B 1.9 Tool che usano i metadati
ò Compilatori – Compilazione condizionale I n
g ò Ambienti RAD e g n e
r – Informazioni sulle proprietà dei componenti i a
d ò
e Categoria l
s
o ò Descrizione f t w a
r – Editor personalizzati di tipi di proprietà e
L - A ò Analisi dei tipi e del codice – Intellisense – ILDASM – Anakrino, Reflector
19
Common Language Runtime
VB C++ C# JScript … I n Common Language Specification g e g n e r i a Web User
d
e Services Interface l
s o f t w a
r Data and XML e
L - A Base Class Library
Common Language Runtime
20
Laboratorio di Informatica L-B 1.10 Common Language Runtime
ò IL CLR offre vari servizi alle applicazioni
Managedcode (MSIL) I n g e g n e r
i Common Language a
d
e Runtime(CLR) l
s o f t w
a Funzionalità specifiche di CLR Funzionalità esistenti (es. I/O r e
L (es. Garbage Collector) su file) mediate da CLR - A
Sistema operativo (Win32, …)
21
Common Language Runtime
Base Class Library Support I
n Thread Support COM Marshaler g e g n e r i
a Type Checker Exception Manager
d e l
s o f t
w Security Engine Debug Engine a r e
L - A MSIL to Native Code Garbage Compilers (JIT) Manager Collector (GC)
Class Loader
22
Laboratorio di Informatica L-B 1.11 Sicurezza e affidabilità del codice
ò Separazione spazi di memoria in un processo con AppDomain I n
g ò Controllo del codice e sicurezza dei tipi e g n
e –
r Cast non sicuri i a
d
e – Variabili non inizializzate l
s o f
t – Accessi ad array oltre i limiti di allocazione w a r e
L - A
23
Garbage Collector
ò Garbage Collector per tutti gli oggetti .NET ò Gestione del ciclo di vita degli oggetti I n g
e ò Gli oggetti vengono distrutti automaticamente g n e r
i quando non sono più referenziati a
d e l
ò s A differenza di COM, non ci si basa sul o f t w Reference Counting a r e
L –
- Maggiore velocità di allocazione A – Consentiti i riferimenti circolari – Perdita della distruzione deterministica ò Algoritmo Mark-and-Compact
24
Laboratorio di Informatica L-B 1.12 Garbage Collector e distruzione deterministica
ò In alcuni casi serve un comportamento di finalizzazione deterministica I n – g Riferimenti a oggetti non gestiti e g n
e – Utilizzo di risorse che devono essere rilasciate r i a
d appena termina il loro utilizzo e l
s
o ò
f Non è possibile utilizzare il metodo Finalize t w a r
e (in C# il distruttore), in quanto non è
L - A richiamabile direttamente ò È necessario implementare l’interfaccia IDisposable
25
Gestione delle eccezioni
ò Un’eccezione è – Una condizione di errore – Un comportamento inaspettato I n g
e incontrato durante l’esecuzione del programma g n
e ò
r Un’eccezione può essere generata dal i a
d – Codice del programma in esecuzione e l
s –
o Ambiente di runtime f t w
a ò In CLR, un’eccezione è un oggetto che eredita dalla r e
L classe System.Exception - A ò Gestione uniforme - elimina – Codici HRESULT di COM – Codici di errore Win32 – …
26
Laboratorio di Informatica L-B 1.13 Gestione delle eccezioni
ò Concetti universali – Lanciare un’eccezione (throw) I n –
g Catturare un’eccezione (catch) e g n
e – Eseguire codice di uscita da un blocco controllato r i a
d (finally) e l
s o
f ò Disponibile in tutti i linguaggi .NET t w a r
e con sintassi diverse
L - A
27
Altri servizi del CLR
ò Reflection – Analisi dei metadati di un assembly I n
g – Generazione di un assembly dinamico e g n
e ò r Remoting i a
d
e – Chiamata di componenti remoti (.NET) l
s o f t w ò Interoperabilità (COM, Platform Invoke) a r e
L - A
28
Laboratorio di Informatica L-B 1.14 Reflection
ò È possibile interrogare un assembly caricato in memoria I n – g Tipi (classi, interfacce, enumeratori, etc.) e g n
e – Membri (attributi, proprietà, metodi, etc.) r i a
d – Parametri e l
s o f
t ò È possibile forzare il caricamento in memoria di w a r e un assembly con i metodi Load/LoadFrom
L - A
29
Common Type System
ò Tipi di dato supportati dal framework .NET – Alla base di tutti i linguaggi .NET
I ò Consente di fornire un modello di programmazione n g e
g unificato n e r i a ò Progettato per linguaggi object-oriented, procedurali e
d e l
funzionali s o f
t – w Esaminate caratteristiche di 20 linguaggi a r
e – Tutte le funzionalità disponibili con IL
L - A – Ogni linguaggio utilizza alcune caratteristiche ò Common Language Specification – Regole di compatibilità tra linguaggi – Sottoinsieme di CTS
30
Laboratorio di Informatica L-B 1.15 Common Type System
ò Alla base di tutto ci sono i tipi: classi, strutture, interfacce, enumerativi, delegati
I ò Fortemente tipizzato (compile-time) n g e
g ò
n Object-oriented e r i a – Campi, metodi, tipi nidificati, proprietà, ...
d e l
s ò Overload di funzioni (compile-time) o f t w ò
a Invocazione metodi virtuali risolta a run-time r e
L ò - Ereditarietà singola di implementazione A ò Ereditarietà multipla di interfacce ò Gestione strutturata delle eccezioni
31
Common Language Specification
ò Regole per gli identificatori – Unicode, case-sensitivity – Keyword I n g e
g ò Regole di overload più restrittive n e r i a ò Nessun puntatore unmanaged
d e l
s ò Devono essere supportate interfacce multiple con o f t w metodi dello stesso nome a r e
L ò Regole per costruttori degli oggetti - A ò Regole per denominazione proprietà ed eventi
32
Laboratorio di Informatica L-B 1.16 Common Language Specification
Fujitsu Microsoft Common COBOL Managed C++ Extensions Type System Extensions I n g e g n e r i a
d e l
s COBOL C++ o f t w
a CLS r e
L - A
33
Common Type System Tipi nativi
CTS C# System.Object object System.String string I
n System.Boolean bool g e
g System.Char char n e
r System.Single float i a
d System.Double double e l
s System.Decimal decimal o f t w System.SByte sbyte a r
e System.Byte byte
L - A System.Int16 short System.UInt16 ushort System.Int32 int System.UInt32 uint System.Int64 long System.UInt64 ulong 34
Laboratorio di Informatica L-B 1.17 Common Type System
ò Tutto è un oggetto – System.Object è la classe radice I n g
e ò g Due categorie di tipi n e r i
a – Tipi riferimento
d e
l ò Riferimenti a oggetti allocati sull’heap gestito
s o f
t ò Indirizzi di memoria w a r e – Tipi valore L - A ò Allocati sullo stack o parte di altri oggetti ò Sequenza di byte
35
Common Type System Tipi valore
ò I tipi valore comprendono: – Tipi primitivi (built-in) I n ò Int32, … g e
g ò
n Single, Double e r i
a ò Decimal
d e
l ò
Boolean s o f
t ò Char w a r e
– Tipi definiti dall’utente L - A ò Strutture (struct) ò Enumerativi (enum)
36
Laboratorio di Informatica L-B 1.18 Common Type System Tipi valore vs tipi riferimento
public struct Size { v.height public int height; v.width public int width; I n
g } r e
g public class CSize n
e { Stack r i a public int height;
d
e public int width; l
s
o } f t
w public static void Main() a
r { height e
L Size v; // v istanza di Size width - A v.height = 100; // ok CSize r; // r è un reference Heap r.height = 100; // NO, r non assegnato r = new CSize(); // r fa riferimento a un CSize r.height = 100; // ok, r inizializzata Class CSize }
37
Common Type System Tipi valore vs tipi riferimento
public struct Point { private int _x, _y; public Point(int x, int y) I n { g e
g _x = x; n
e _y = y; r i
a }
d
e public int X l
s
o { f t
w get { return _x; }
a set { _x = value; } r e
} L - A public int Y { get { return _y; } set { _y = value; } } }
38
Laboratorio di Informatica L-B 1.19 Common Type System Tipi valore vs tipi riferimento
public class Rectangle { Point v1; Point v2; I n g
e … g
n } e r i a …
d e
l Rectangle r = new Rectangle();
s o f t w a r e
L - A r
v1._x v1._y v2._x v2._y
39
Common Type System Tipi valore vs tipi riferimento
… Point[] points = new Point[100]; for (int i = 0; i < 100; i++) points[i] = new Point(i, i); I n
g … e g n e r i a ò Alla fine, rimane 1 solo oggetto nell’heap
d
e (l’array di Point) l
s o f t w
a … r e
Point[] points = new Point[100]; L - A for (int i = 0; i < 100; i++) { points[i].X = i; points[i].Y = i; } …
40
Laboratorio di Informatica L-B 1.20 Common Type System Tipi valore vs tipi riferimento
public class Point { private int _x, _y; public Point(int x, int y) I n { g e
g _x = x; n
e _y = y; r i
a }
d
e public int X l
s
o { f t
w get { return _x; }
a set { _x = value; } r e
} L - A public int Y { get { return _y; } set { _y = value; } } }
41
Common Type System Tipi valore vs tipi riferimento
public class Rectangle { Point v1; Point v2; I n g
e … g
n } e r i a …
d e
l Rectangle r = new Rectangle();
s o f t w a r e
_x _y L r - A
v1 v2
_x _y
42
Laboratorio di Informatica L-B 1.21 Common Type System Tipi valore vs tipi riferimento
… Point[] points = new Point[100]; for (int i = 0; i < 100; i++) points[i] = new Point(i, i); I n
g … e g n e r i a ò Alla fine, rimangono 101 oggetti nell’heap
d
e (1 array di Point + 100 Point) l
s o f t w
a … r e
Point[] points = new Point[100]; L - A for (int i = 0; i < 100; i++) { points[i].X = i; points[i].Y = i; } NO! …
43
Boxing / Unboxing
ò Un qualsiasi tipo valore può essere automaticamente convertito in un tipo riferimento (boxing) mediante un up cast implicito a System.Object I n g
e int i = 123; g
n object o = i; e r i a
d e l
s ò Un tipo valore “boxed” può tornare ad essere un tipo o f t w valore standard (unboxing) mediante un down cast a r e
L esplicito - A int k = (int) o;
ò Un tipo valore “boxed” è un clone indipendente
44
Laboratorio di Informatica L-B 1.22 Boxing / Unboxing
int i = 123; object o = i; int k = (int) o; I n g e g n
e STACK HEAP r i a
d e l
s i 123 o Int32 f t w a r
e o 123
L - A k 123
45
Modello di esecuzione
Source VB C# C++ Code Compiler Compiler Compiler I n g e g
n IL Assembly Assembly Assembly e r i a
d e l
s Ngen Common Language Runtime JIT Compiler o f t w a r e
L
- Native Managed Managed Managed Unmanaged A Code Code CCoLdRe Code Code CLR Services
Operating System Services
46
Laboratorio di Informatica L-B 1.23 Framework .NET
System.Web System.Windows.Forms UI Design ComponentModel Compilation HtmlControls
I Handlers
n WebControls g
e Hosting System.Drawing g n
e Caching Security Drawing2D Printing r i a
Configuration SessionState Imaging Text d e l
s
o System.Data System.Xml f t w
a OleDb Common Xsl Schema r e
L SqlClient SQLTypes XPath Serialization - A System Collections IO Security Runtime Configuration Reflection Text InteropServices Diagnostics Resources Threading Remoting Globalization Serialization 47
Framework .NET
ò Il framework non è una “scatola nera”
ò E possibile estendere una qualsiasi classe I n g e
g .NET (non sealed) mediante ereditarietà n e r i
a Diversamente da COM,
d e l
– si usa e si estende la
s classe stessa o f t w – non si utilizza uno strato intermedio (wrapper) a r e
L - A ò L’ereditarietà è cross-language
48
Laboratorio di Informatica L-B 1.24 Bibliografia
Libri di base: ò D. S. Platt, Introducing Microsoft® .NET, Second Edition (*) ò J. Sharp, J. Jagger, Microsoft® Visual C#™ .NET Step by Step (*) I n ò T. Archer, A. Whitechapel, Inside C#, Second Edition (*) g e
g ò
n M. J. Young, XML Step by Step, Second Edition (*) e r
i ò
a R. M. Riordan, Microsoft® ADO.NET Step by Step (*)
d e l
s o
f Libri avanzati: t w
a ò J. Richter, Applied Microsoft® .NET Framework Programming r e
L ò C. Petzold, Programming Microsoft® Windows® with C# (*) - A ò S. Lidin, Inside Microsoft® .NET IL Assembler
(*) Disponibile nella biblioteca del DEIS
49
Laboratorio di Informatica L-B 1.25