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 , per a r e

Windows, FreeBSD e Macintosh) - Rotor L - A – (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 – - 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’ 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 }

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 – (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