Generazione dinamica di codice.NET 2.0 Ricci Gian Maria MarCamp : 24 febbraio 2007.

Slides:



Advertisements
Presentazioni simili
Linguaggio C e C++.
Advertisements

Traduzione ed Interpretazione
Digital FX!32 Conte Davide Crivello Emanuele Ferrando Elisa.
INTRODUZIONE Il framework.NET. Un po di storia Sin dalla prima versione del sistema operativo Windows (1990 circa), nacque la necessità di far comunicare.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità A1 Introduzione a Java.
Recupero debito quarto anno Primo incontro
Stored Procedure Function Trigger
Corrado Cavalli Microsoft .NET MVP
Microsoft Midrange Modernisation Conference (Milano, 11 Maggio 2006) 1 RPG to.NET Case Study Esempio di migrazione di una applicazione italiana AS/400.
Informatica 2 Lezione 4 Corso di laurea in matematica Informatica 2 Dott. Ing. Leonardo Vito Corso di laurea matematica indirizzo matematica per le applicazioni.
Generalità Linguaggio e Macchina Astratta
Dr. Francesco Fabozzi Corso di Informatica
DLL: Dynamic Linking Library
Area di ricerca: Automazione e controllo di impianti, macchine e reti
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Corso di Informatica (Programmazione)
Introduzione al linguaggio Java
eliana minicozzi linguaggi1a.a lezione2
Perché.Net e non più COM/DCOM ? Superamento dei problemi di COM: Richiede una infrastruttura "non semplice" da ogni applicazione (ad esempio Class Factory.
Gestione di Progetti Software 2 (A.A. 2004/2005) - Lezione 2 1 JAVA: obiettivi di progetto del linguaggio Nota storica: Il linguaggio JAVA (inizialmente.
Struttura dei sistemi operativi (panoramica)
Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 13 1 La Manipolazione Diretta Sensazione di interagire con un mondo di oggetti piuttosto.
Fondamenti di Informatica I a.a Il linguaggio C Il controllo di flusso La selezione condizionale Listruzione switch I cicli Le istruzioni break,
La Riflessione computazione Elisa Ferrando. Cos è la Riflessione La Riflessione Sistema riflessivo Sistema computazionale.
CAPITOLO 2 INTRODUZIONE AL LINGUAGGIO JAVA E ALL'AMBIENTE HOTJAVA.
nome: sequenza di caratteri usata per denotare un oggetto
Subtype Polymorphism. Interfacce e subtype polimorfismo Tipi, sottotipi e conversioni di tipo Polimorfismo e dinamic dispatch.
Sistemi Operativi GESTIONE DEI PROCESSI.
Introduzione ad ASP.net
CORSO OPERATORE AVANZATO
C# LE BASI 2007 Prima lezione - Introduzione.
Distributed File System Service Dario Agostinone.
Documentazione automatica su un linguaggio schema di Alessandro Modica Relatore: Fabio Vitali.
Introduzione a C#.
Benvenuti a Un incontro informativo di grande valore ed alto contenuto sulla Virtualizzazione e sistemi ad alta disponibiltà per le PMI.
Università Politecnica delle Marche
Java Contardi Carlo A.S. 2008/09.
1 Introduzione. 2 Le motivazioni In.net Framework iniziato nel 2000 rappresenta una svolta nella tecnologia Microsoft per andare oltre ai linguaggi esistenti.
SISTEMA OPERATIVO..
Lezione 1 Linguaggi di programmazione – Algoritmi –Istruzioni
Verso lo spazio profondo
Introduzione alla programmazione Object Oriented
Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto.
VIRTUALIZZAZIONE Docente: Marco Sechi Modulo 1.
Servizi Grid ed agenti mobili : un ambiente di sviluppo e delivering
FASTVID RENTALS: CONCLUSIONI I PUNTI DI FORZA DEL PROGETTO, GLI SVILUPPI FUTURI 1.
I nomi in Java F. Bombi 18 novembre novembre 2003.
Threads.
Diventa blogger Analisi degli obiettivi Piattaforma Wordpress Francesca Sanzo -
Lezione 1 Panoramica sui paradigmi di programmazione
OOP per la simulazione di sistemi reali. di Gianfranco Gallizia.
DAmb Sergio Lovrinich 28 Settembre Descrizione Questo Software si propone di eseguire una Analisi del Codice Sorgente, mettendo a disposizione Strumenti.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Monitor 2012/2013 GUI A cura di: Luca Violanti, Marco Varesano, Marco Busso, Roberto Cotrino.
Un ambiente di sviluppo User Frendly per Java. Obiettivi del progetto Usabilità –Elevata funzionalità –Massima semplicità di utilizzo –Giusto grado di.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
© Copyright NTT DATA Italia – All Rights Reserved The information contained in this document is the property of NTT DATA Italia S.p.A. and the addressee.
TW Asp - Active Server Pages Nicola Gessa. TW Nicola Gessa Introduzione n Con l’acronimo ASP (Active Server Pages) si identifica NON un linguaggio di.
OBJECT ORIENTED DATABASE introduzione. OGGETTO Ha due componenti:  stato: valore di alcune variabili (variabili di istanza)  comportamento: insieme.
“INCONSAPEVOLI” ESPERIENZE DI Extreme Programming Genova, 29 Ottobre 2002.
Concetti Fondamentali sulla Programmazione
E - Commerce.
I linguaggi di programmazione -GALBIATI ALBERTO -ESPOSITO MATTIA.
XVRC2 Emanuele Ruffaldi Giugno Tre esperimenti con S3D ► Estensioni del Linguaggio ► Pre-Compilatore ► Esecuzione dentro il Java L C J.
Obiettivi e struttura della lezione Capitolo 5 – Il Sistema Informativo per il processo decisorio aziendale Obiettivo della lezione Illustrare agli studenti.
Programmazione orientata agli Oggetti Introduzione a Java.
1 Informatica di Base Facoltà di Lingue e Letterature Straniere Corso di laurea in Relazioni Pubbliche.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

Generazione dinamica di codice.NET 2.0 Ricci Gian Maria MarCamp : 24 febbraio 2007

Codice che genera codice Codice che genera codice Un programma genera codice a run-time durante la sua esecuzione Un programma genera codice a run-time durante la sua esecuzione Un programma così strutturato deve necessariamente essere strutturato per essere estensibile. Un programma così strutturato deve necessariamente essere strutturato per essere estensibile. Supporto nativo dellambiente alla generazione ed al caricamento dinamico di codice Supporto nativo dellambiente alla generazione ed al caricamento dinamico di codice Generazione dinamica di codice

Non si conosce a priori il tipo di dato su cui si lavora Non si conosce a priori il tipo di dato su cui si lavora Creare interfacce come punti di collegamento per lestendibilità Creare interfacce come punti di collegamento per lestendibilità Utilizzare classi base con metodi virtuali per incapsulare le funzionalità base Utilizzare classi base con metodi virtuali per incapsulare le funzionalità base Accedere ai nuovi tipi con indentificazione run- time (reflection) Accedere ai nuovi tipi con indentificazione run- time (reflection) Strutturare le modalità di caricamento Strutturare le modalità di caricamento Single AppDomain Single AppDomain Multi AppDomain Multi AppDomain Come strutturare il progetto

Comunicare per interfacce Core Interfaccia Tipo dinamico Tipo dinamico Tipo dinamico Tipo dinamico Tipo dinamico Tipo dinamico

Comunicare per classi base Core Base Tipo dinamico Tipo dinamico Tipo dinamico Tipo dinamico Tipo dinamico Tipo dinamico

Comunicare per reflection Core Tipo dinamico Tipo dinamico Informazioni sul tipo Invocazione dinamica

Creazione classi proxy di classi reali Creazione classi proxy di classi reali Intercettare le chiamate ai metodi per trovare metriche di codice Intercettare le chiamate ai metodi per trovare metriche di codice Aspect Oriented Programming Aspect Oriented Programming Necessità specifiche es: NHibernate lazy load Necessità specifiche es: NHibernate lazy load Mock object Mock object Creare oggetti che simulano classi reali Creare oggetti che simulano classi reali Generazione runtime proxy a servizi Generazione runtime proxy a servizi E affascinante E affascinante Perchè generare codice dinamicamente

Generazione in.NET 2.0 Una prima possibilità consiste nel generare dinamicamente un file di testo contenente codice C#, VB, etc.. e poi chiamare direttamente il compilatore generando così una dll che può essere caricata runtime. Vantaggi Vantaggi Estrema semplicità Estrema semplicità Svantaggi Svantaggi Possibilità di errore nella generazione di file Possibilità di errore nella generazione di file Scarso controllo degli errori Scarso controllo degli errori

Generazione tramite compilatore Core C# sc.exe dll

Utilizzare il CodeDom Una possibilità migliore consiste nella generazione di codice tramite le classi contenute nel namespace CodeDom. Grazie a questa libreria è possibile controllare in dettaglio come verranno generati i tipi dinamici. Dim cg As ICodeGenerator = _ New CSharpCodeProvider().CreateGenerator() Vantaggi Vantaggi Controllo accurato sul codice generato Controllo accurato sul codice generato Impossibiltà di generazione di errori di sintassi Impossibiltà di generazione di errori di sintassi Utile per generatori di codice Utile per generatori di codice Svantaggi Svantaggi Generazione di codice complessa Generazione di codice complessa

Generazione tramite CodeDom Core dll CodeDom

Reflection.Emit() Lultima possibilità offerta dal.NET 2.0 è la generazione di codice dinamica tramite Reflection.Emit(). Sostanzialmente tramite Emit si possono ottenere gli stessi risultati che si possono ottenere tramite CodeDom, ma si hanno dei vantaggi. Codice più lineare e snello Codice più lineare e snello Iniezione diretta dei tipi in un AppDomain senza passare per una classe compilatore Iniezione diretta dei tipi in un AppDomain senza passare per una classe compilatore Estrema facilità di utilizzo a patto di conoscere MSIL Estrema facilità di utilizzo a patto di conoscere MSIL Possibilità di generare nuovi tipi in ogni momento, lassembly generato dinamicamente non è chiuso. Possibilità di generare nuovi tipi in ogni momento, lassembly generato dinamicamente non è chiuso.

Generazione tramite Reflectio.Emit() Core Emit

Reflection.Emit() Lultima possibilità offerta dal.NET 2.0 è la generazione di codice dinamica tramite Reflection.Emit(). Vantaggi Vantaggi Codice più lineare e snello Codice più lineare e snello Iniezione diretta dei tipi in un AppDomain senza passare per la compilazione Iniezione diretta dei tipi in un AppDomain senza passare per la compilazione Maggiore performance Maggiore performance Possibilità di generare nuovi tipi in ogni momento Possibilità di generare nuovi tipi in ogni momento Svantaggi Svantaggi Richiesta buona conoscenza di MSIL Richiesta buona conoscenza di MSIL

Abstract View

Domande?