Ingegneria del Software T

Introduzione al Framework .NET Tecnologia COM Component Object Model

1993 COM is a platform-independent, distributed,

Ingegneria del Software T object-oriented system for creating binary software components COM is not an object-oriented language but a standard COM specifies an object model and programming requirements that enable COM objects to interact with other objects

2 Tecnologia COM Component Object Model

interface IUnknown { virtual HRESULT QueryInterface(IID iid, void **ppvObject) = 0; virtual ULONG AddRef(void) = 0; virtual ULONG Release(void) = 0; Ingegneria del Software T };

QueryInterface is used to obtain a pointer to another interface, given a GUID that uniquely identifies that interface (commonly known as an interface ID, or IID) – if the COM object does not implement that interface, an E_NOINTERFACE error is returned instead AddRef is used by clients to indicate that a COM object is being referenced Release is used by clients to indicate that they have finished using the COM object

3 Tecnologia COM Component Object Model

The COM specifications require a technique called reference counting to ensure that individual objects remain alive as long as there are clients which have Ingegneria del Software T acquired access to one or more of its interfaces and, conversely, that the same object is properly disposed of when all code that used the object have finished with it and no longer require it A COM object is responsible for freeing its own memory once its reference count drops to zero Reference counting may cause problems if two or more objects are circularly referenced

4 Tecnologia COM Component Object Model

Ereditarietà solo con composizione e delega

interface IService2 : IService1 Ingegneria del Software T

IService2 ISe rvi ce1 Component2 Compone nt1

5 Tecnologia COM Component Object Model

The location of each component is stored in the Windows registry There can be only one version of a certain component Ingegneria del Software T installed This limitation can seriously complicate the deployment of COM-based applications, due to the possibility that different programs, or even different versions of the same program, may be designed to work with different versions of the same COM component This condition is known as DLL hell

6 ) .NET deployment runtime environment v. 4.6 v. ► Framework Ambiente di esecuzione ( Semplifica lo sviluppoil e Aumenta l’affidabilità del codice Unifica il modello di programmazione completamenteÈ indipendente da COM fortementeÈ integrato con COM + + Libreria di classi (standard + estensioni MS) Versione 1.0 del 2002

Ingegneria del Software T 7 Type Checker .NET generazione generazione eccezioni di ► Framework object-oriented Qualsiasi Qualsiasi entità è un oggetto Classi ed ereditarietà pienamente supportati Garbage Collector Linguaggi tipizzati fortemente– Errori gestiti non – – – – – Ambiente Riduzione errori comuni di programmazione

Ingegneria del Software T 8 disponibili disponibili i in tutti composizione e delega e composizione classe classe stessa ) mediante ereditarietà framework Framework .NET Framework sealed non non utilizzare si deve Funzionalità Funzionalità del linguaggi .NET componenti I della stessa applicazione possono essere in scritti linguaggi diversi Ereditarietà supportata anche tralinguaggi diversi si usa e si estende la – – – – – Libertà di sceltadel linguaggio Possibilità di estendere una qualsiasi classe .NET (non Diversamente da COM,

Ingegneria del Software T 9 Rotor .NET e e Macintosh) - Framework (Open CLI CLI Library) (Open (Shared Source CLI byper , (per Linux) DotGNU OCL Intel … Common Common Language Infrastructure ECMA-334 (C#),ECMA-335 (CLI) SSCLI Windows, Windows, FreeBSD – – – – – – – .NET .NET è un’implementazione di CLI CLI e il linguaggio C# sonostandard ECMA Esistonoaltre implementazioni di CLI:

Ingegneria del Software T 10 -335 different system differentsystem , with: with: , multiple high level high multiple without the without need rewrite tothe Standard ECMA may be executed be executed may in runtimeenvironment a file format file a system type commona system metadata extensible an language intermediate an platform underlying the to access library classbase factoreda – – – – – – Defines Defines the Common Language Infrastructure(CLI)in which applications written in languages environments application take into consideration to unique the characteristics those environments of CLI is a

Ingegneria del Software T 11 uire per uire ificato IL si dicesi .NET CLS CLS - (MS) - CLR - .NET framework per le applicazioni.NET le per CTS CTS - ) framework runtime managed ( Framework .NET Framework IntermediateLanguage (Microsoft) Common LanguageCommon Runtime esecuzionedi ambiente controllosuo il sotto eseguito viene che il codice gestito codice dal supportati dato di tipi Common TypeCommon System consente di fornire un modello di programmazione un programmazione di modello un forniredi consente LanguageCommon Specification regole che i linguaggi di programmazione devono seg devono programmazionelinguaggi di i che regole del all’interno interoperabili essere CTS di sottoinsieme – – – – Concetti chiave:

Ingegneria del Software T 12 Esecuzione Interprete Codice interpretato Codice Sorgenti

Ingegneria del Software T 13 Esecuzione nativo (.EXE) Codice Compilatore Codice nativo Codice Sorgenti

Ingegneria del Software T 14 IL Codice Esecuzione .EXE/.DLL (Assembly) .NET nativo Codice Compilatore Codice IL Codice JIT Sorgenti Compilatore

Ingegneria del Software T 15 IL Codice Esecuzione .EXE/.DLL (Assembly) metadati Codice +Codice .NET nativo Codice Compilatore Codice IL Codice JIT Sorgenti Compilatore

Ingegneria del Software T 16 IL Codice Esecuzione .EXE/.DLL (Assembly) esecuzione Ambiente di .NET Runtime nativo Codice .NET Compilatore Codice IL Codice JIT Sorgenti Compilatore

Ingegneria del Software T 17 Immagini, … Immagini, icone, Codice ottenuto da un qualsiasi qualsiasi un ottenuto da Codice programmazione di linguaggio Metadati che descrivono l’ Metadati che descrivono descrivono tutti Metadati che nell’assembly contenuti i tipi Assembly Risorse Manifest Codice IL Type Metadata Type Programma.exe Unità Unità minima per distribuzione la e il versioning Normalmente è composto da un solo file

Ingegneria del Software T 18 ) module Util.dll Pict.gif Risorse Codice IL Type Metadata Type Assembly Calc.dll Manifest Codice IL Type Metadata Type Ma può può Ma essere composto anche da più file (

Ingegneria del Software T 19 , … , Metadati definiti dal compilatore dal definiti framework dal definiti dall’utente definiti Identità: nome, versione, cultura [, public key] public [, cultura versione, nome, Identità: l’assembly compongono che file dei Lista assembly altri ad Riferimenti dipende si cui da l’esecuzione per necessariPermessi ... interfacce base, visibilità, classeNome, eventi proprietà, metodi, membro), (attributi Campi aggiuntive) (caratteristiche Attributi – – – – – – – – Descrizione Descrizione dell’assembly - Manifest Descrizione Descrizione dei contenuti tipi nell’assembly

Ingegneria del Software T 20 (introspezione) Chi usa i metadati? i usa Chi Reflection Categoria Descrizione Editorproprietà di tipo per specializzati Compilazione condizionale Compilazione componenti dei sulleproprietà Informazioni … Reflector, ILDASM, Intellisense, Analisi del contenuto di un assembly un di contenutoAnalisi del – – – – Compilatori Ambienti Ambienti RAD Tool analisi di dei tipi del codice e Sviluppatori –

Ingegneria del Software T 21 Assembly (class System.String) .entrypoint ldstr "HelloWorld!" IL call void [mscorlib]System.Console::WriteLine ret .assembly Hello} { .assembly extern mscorlib.method} { static public void{ main() } helloil.il

Ingegneria del Software T 22 ) ) GAC ( sub-directory Assembly applicazione (e applicazione Utilizzati da un’applicazione specifica Directory Utilizzati da più applicazioni Assembly Global Cache c:\windows\assembly Downloadcache c:\windows\assembly\download – – – – – – – Assembly privati Assembly condivisi AssemblyURL scaricati da

Ingegneria del Software T 23 Deployment semplificato Deployment side-by-side condivisi o condivisi privati Applicazioni Applicazioni e componenti possono essere Versioni Versioni diverse dello stesso componente possono coesistere, anche nello stesso processo – – Installazione senzaeffetti collaterali Esecuzione

Ingegneria del Software T 24 … User Interface JScript C# Data XML Data and Base Class Library Base C++ Web Language Common Common Runtime Language Services Common Specification Language VB

Ingegneria del Software T 25 su file) mediate da CLR da mediate file) su Funzionalità esistenti (es. I/O (es. esistentiFunzionalità Runtime (CLR) Runtime Common Common Language Managed code (MSIL) code Managed Common Language Runtime Language Common Sistema operativo (Win32, …) (Win32, operativo Sistema (es. Garbage Collector) Garbage (es. IL CLR IL offrevari servizialle applicazioni Funzionalità specifiche di CLR di specifiche Funzionalità

Ingegneria del Software T 26 Garbage Collector Collector (GC) Debug Debug Engine COM Marshaler COM Exception Exception Manager Code Manager Class Class Loader Common Language Runtime Language Common Base Class Class Base Library Support Type Checker Type Thread Thread Support Security Security Engine MSIL to Native to MSIL Compilers Compilers (JIT)

Ingegneria del Software T 27 ☺ ☺ ☺ ☺ ☺ ☺ ☺ ☺ Reference Counting Garbage Collector Garbage Consentiti Consentiti i riferimenti circolari Perdita della distruzione deterministica Maggiore Maggiore velocità allocazione di – – – Gestisceil ciclodi vitadigli tutti oggetti .NET Gli oggetti vengono distruttiautomaticamente quando non sono più referenziati differenzaA di COM, non si basasul

Ingegneria del Software T 28 di COMdi Gestione delle eccezioni delle Gestione runtime HRESULT System.Exception una condizione di errore di condizioneuna inaspettato comportamento un esecuzione in programmadel codice di ambiente codici codici di errore Win32 erroredi codici … – – – – – – – Un’eccezione Un’eccezione è incontrato durante l’esecuzione incontrato durante l’esecuzione del programma Un’eccezione può essere generata dal un’eccezione CLR, In è un oggetto che eredita dalla classe Gestione Gestione uniforme - elimina

Ingegneria del Software T 29 ) ) catch throw Gestione delle eccezioni delle Gestione ) finally Lanciare Lanciare un’eccezione ( Catturare un’eccezione ( Eseguire codice di da un blocco uscita controllato ( – – – Concetti universali Disponibile in tuttii linguaggi .NET con sintassidiverse

Ingegneria del Software T 30 e .NET framework Common Type System Type Common Alla base di tutti i linguaggi.NET i tutti di Alla base linguaggi 20 di caratteristiche Esaminate IL disponibilicon funzionalità le Tutte caratteristiche alcuneutilizza linguaggio Ogni – – – – funzionali Fornisce Fornisce un modello di programmazione unificato per Progettatolinguaggi object-oriented, procedurali Tipi Tipi di supportati dato dal

Ingegneria del Software T 31 delegati , run-time ) ) enumerativi , compile-time compile-time interfacce , Common Type System Type Common di metodi di ( strutture , Campi, metodi, tipi annidati, proprietà, ... proprietà, annidati, tipi metodi, Campi, – Fortemente tipizzato tipizzato Fortemente ( Alla ci sono Alla i tipi: di base tutto classi Object-oriented Overload Invocazione Invocazione metodi virtuali risolta a Ereditarietà singola Ereditarietà singola estensione di Ereditarietà multipla interfaccia di

Ingegneria del Software T 32 o nome o unmanaged più restrittive più Common Language Language Common Specification case-sensitivity overload Unicode, Unicode, Keyword Regole per gli identificatori perRegole eventi ed proprietàdenominazione perRegole oggetti degli costruttori perRegole di Regole Ammesse interfacce multiple con metodi con lo stesslo con metodi con multiple interfacce Ammesse Non ammessi puntatori ammessiNon … – – – – – – – Definisce Definisce le regole di compatibilità tralinguaggi (sottoinsieme CTS) di

Ingegneria del Software T 33 Microsoft C++ Managed Extensions C++ CLS Common Common Type System Type Common Language Language Common Specification COBOL Fujitsu COBOL Extensions

Ingegneria del Software T 34 Common Common Type System nativi Tipi CTSSystem.ObjectSystem.StringSystem.BooleanSystem.Char object System.Single string bool System.Double C# System.Decimal char System.SByte float System.Byte double decimal System.Int16System.UInt16 sbyte System.Int32 byte System.UInt32 short System.Int64 ushort System.UInt64 int uint long ulong

Ingegneria del Software T 35 gestito heap o parte di altri oggetti altri di parte o è la la è classe radice stack Common Type System Type Common Indirizzi di memoria di Indirizzi sullo Allocati byte di Sequenza Riferimenti a oggetti allocati sull’ allocati oggetti a Riferimenti Tipi valore Tipi System.Object riferimento Tipi – – – Tutto è un oggetto Due categorie di tipi

Ingegneria del Software T 36 ) ) ) enum built-in Common Common Type System valore Tipi struct Int32, … Int32, Double Single, Decimal Boolean Char ( Strutture ( Enumerativi Tipi Tipi primitivi ( Tipi definiti dall’utente – – I tipiI valore comprendono:

Ingegneria del Software T 37 r width height Heap Stack v.width v.height Class Class CSize v istanzadi Size ok r è un reference NO, r non assegnato r fa riferimento a un CSize ok, r inizializzata Common Common Type System valoreTipi vs tipi riferimento v.height = 100; // CSize r; // r.height = 100; // r = new CSize(); // r.height = 100; // public int height; public int width; public int height; public int width; Size v; // public struct Size { } public class CSize { } public static void Main() { }

Ingegneria del Software T 38 Common Common Type System valoreTipi vs tipi riferimento _x = x; _y = y; get { return _x; } set { _x = value; } get { return _y; } set { _y = value; } private int _x, _y; public Point(int x, int y) { } public int X { } public int Y { } public struct Point { }

Ingegneria del Software T 39 v1._x v1._y v2._x v2._y Common Common Type System valoreTipi vs tipi riferimento r Point v1; Point v2; … public class Rectangle { } … Rectangle r = new Rectangle();

Ingegneria del Software T 40 heap ) Common Common Type System valoreTipi vs tipi riferimento Point points[i].X = i; points[i].Y = i; points[i] = new Point(i, i); … … Point[] points = new Point[100]; for (int i = 0; i{ < 100; i++) } … Point[] points = new Point[100]; for (int i = 0; i < 100; i++) … (l’array di Allarimane fine, oggettosolo 1 nell’

Ingegneria del Software T 41 Common Common Type System valoreTipi vs tipi riferimento _x = x; _y = y; get { return _x; } set { _x = value; } get { return _y; } set { _y = value; } private int _x, _y; public Point(int x, int y) { } public int X { } public int Y { } public class Point { }

Ingegneria del Software T 42 _x _y _x _y v2 v1 Common Common Type System valoreTipi vs tipi riferimento r Point v1; Point v2; … public class Rectangle { } … Rectangle r = new Rectangle();

Ingegneria del Software T 43 heap ) Point NO! + 100 + Common Common Type System valoreTipi vs tipi riferimento Point points[i].X = i; points[i].Y = i; points[i] = new Point(i, i); … … Point[] points = new Point[100]; for (int i = 0; i{ < 100; i++) } … Point[] points = new Point[100]; for (int i = 0; i < 100; i++) … (1 array di array (1 Allarimangono fine, oggetti 101 nell’

Ingegneria del Software T 44 Delegate «delegate» «delegate» EventHandler MulticastDelegate Exception

Attribute «struct» Boolean Object Int32 EventArgs «struct» Double «struct»

Common Common Type System valoreTipi e tipi riferimento ValueType Enum

Array «struct» DayOfWeek «enumeration» Sunday = 0 = Sunday 1 = Monday 3 = Wednesday 5 = Friday 6 = Saturday Tuesday = 2 = Tuesday 4 = Thursday «struct» String DateTime

Ingegneria del Software T 45 down cast ) mediante mediante un ) boxing clone indipendente clone ) mediante mediante un ) ” può ad essere tornare un tipo ” è un System.Object unboxing boxed boxed Boxing / Unboxing / Boxing implicito implicito a up cast esplicito int k = (int) o; tipo Un valore “ int i = 123; object o = i; tipo Un valore “ Un qualsiasi qualsiasi Un tipo valore può essere automaticamente convertito un in tipo riferimento ( valore standard (

Ingegneria del Software T 46 123 Int32 Boxing / Unboxing / Boxing STACK HEAP 123 123 k i o int i = 123; object o = i; int k = (int) o;

Ingegneria del Software T 47 (*) (*) (*) , Second Edition (*) Edition Second , , Second Edition ,(*) Edition Second , Second Edition (*) Edition Second , Inside C# Inside , Microsoft® Visual C#™ .NET C#™ StepVisual Microsoft® by Step Bibliografia , Microsoft® ADO.NET ADO.NET Microsoft®Step Step by , XML Step by Step , Programming Microsoft® Windows® withC# Windows®Programming Microsoft® Introducing.NET Microsoft® AppliedProgramming .NET Microsoft® Framework , , , Inside Microsoft® .NETMicrosoft® InsideAssembler IL , (*) (*) Disponibile nella biblioteca del DEI Libri base: di Libri Platt D. S. J. Sharp, Sharp, Jagger J.J. Whitechapel A.Archer, T. J. M.Young R. M. Riordan R. M. Lidin S. C. Petzold Libri avanzati: Libri Richter J.

Ingegneria del Software T 48