Verso lo spazio profondo

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Generazione dinamica di codice.NET 2.0 Ricci Gian Maria MarCamp : 24 febbraio 2007.
Funzioni Friend Come abbiamo visto non possiamo accedere a membri privati di una classe dall'esterno della classe. Ma a volte abbiamo bisogno di farlo.
INTRODUZIONE Il framework.NET. Un po di storia Sin dalla prima versione del sistema operativo Windows (1990 circa), nacque la necessità di far comunicare.
Recupero debito quarto anno Primo incontro
Analizzatori Lessicali con JLex
Esercitazione guidata 1
Java: programmazione concorrente con condivisione di memoria
Algoritmi e Programmazione
Università degli Studi di Modena e Reggio Emilia
Anno accademico Gli operatori e le espressioni in C.
Il linguaggio C Gli operatori e le espressioni C Language
Dispatch.
JavaScript Laboratorio di Applicazioni Informatiche II mod. A.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Testing e Debugging.
Specifiche senza JML: uso delle asserzioni. 2 Asserzioni in Java Dal jdk 1.4 (da Febbraio 2002) cè meccanismo per gestire asserzioni Asserzione: espressione.
Eliana minicozzi linguaggi L1 Lezione3.
Basi di Dati II Sara Romano
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
Perché.Net e non più COM/DCOM ? Superamento dei problemi di COM: Richiede una infrastruttura "non semplice" da ogni applicazione (ad esempio Class Factory.
Access: Query semplici
Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 13 1 La Manipolazione Diretta Sensazione di interagire con un mondo di oggetti piuttosto.
Approfondimento delle classi
Lab. Calc. 2005/06 Ereditarietà. Lab. Calc. 2005/06 Scopo di questa lezione: Imparare a creare nuove classi ereditando da classi già esistenti. Capire.
1 laboratorio di calcolo II AA 2003/04 quarta settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Progettazione di una base di dati
1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Web Part e controlli di login Elaborazione di Franco Grivet Chin.
SELECT STATEMENT Clausola WHERE permette di limitare il numero di record da estrarre SELECT */ [DISTINCT] colonna/ espressione [alias],… FROM table [WHERE.
LA DOCUMENTAZIONE È noto che un buon programma dovrebbe essere ben documentato.. ma lesperienza insegna che quasi mai ciò viene fatto! –non cè tempo, ci.
AN FI Un denominatoe comune Linguaggi di programmazione Un denominatore comune.
AN FI Un denominatoe comune Lo stile funzionale Concetti fondamentali.
MySQL Query Performance Optimization
Gestione degli errori, delegates,eventi 1. Eccezione – Situazione anomala che potrebbe avvenire durante lesecuzione del programma – try{…}catch(…){…}finally{…}
Visual Basic Le novità del linguaggio
Enumerazioni e Classi 1. Enumerazioni Permettono di definire nuovi tipi che consistono in un insieme di valori costanti (ognuno con un nome) – Migliorano.
1 Lucidi delle esercitazioni di Sistemi di Elaborazione in Rete Università degli Studi della Calabria Corso di Laurea in Ingegneria Gestionale A.A. 2003/2004.
BIOINFO3 - Lezione 321 ACCESSO REMOTO AL SERVER SIBILLA Attraverso Internet è possibile accedere al server sibilla.cribi.unipd.it. Potrete così effettuare.
BIOINFO3 - Lezione 51 INSERIMENTO DEI DATI Visto come si creano le tabelle (sinora tristemente vuote), cominciamo ad occuparci di come riempirle con dei.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Primo programma con il linguaggio Ruby
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Approfondimenti sulle Classi.
Interrogare il database
JavaScript Generalità Cos'è JavaScript?
O C L Object Constraint Language
SQL*PLUS Worksheet Permette di:
Ripasso Test 3 Capitolo 8. Formato Esame #3 Oral questions, 15 points Vocab paragraphs, 10 points Congiuntivo vs Infinitivo, 13 points Complete the sentence,
Oggetti in C# Lezione 5 Polimorfismo I Andrea Zoccheddu.
FUNZIONI Dichiarazione: Definizione:
Eprogram informatica V anno. ASP.NET Introduzione ASP.NET (Active Server Page) è il linguaggio che, sfruttando la tecnologia.NET, permette di: -scrivere.
Variabili Numeriche –Interi (byte, short, int, long): complemento a 2 –A virgola mobile (float, double): IEEE 745 Alfanumeriche –Carattere (char): Unicode.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
1. Andro` in vacanza appena avro` finito il mio viaggio di affari. 2. Quando il negozio avra` venduto tutti i cappotti, ne ordinera` ancora. 3. La signora.
1 Tipi di Dato §descrittori, tipi, controllo e inferenza dei tipi §specifica (semantica) e implementazione di tipi di dato l implementazioni “sequenziali”
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Ripasso su Java. Introduzione Per risolvere problemi complessi, i linguaggi di programmazione forniscono costrutti per realizzare nuove funzioni che trasformino.
Google Visualization API
LIP: 15 Marzo 2005 Vettori di interi. Esercizio proposto Definire una classe VectorInt i cui oggetti sono vettori omogenei di interi ordinati in modo.
Copyright © Istituto Italiano Edizioni Atlas
I-C-02: La caffettiera del masochista di Donald A. Norman
Each student will be able to ask an adult or stranger: What do you like to do? and What don’t you like to …?
Fondamenti di informatica T-A Esercitazione 3 : Classi, metodi, visibilità, metodi statici AA 2012/2013 Tutor : Domenico Di Carlo.
Approfondimenti SQL.
EVENTI Gli eventi sono delle azioni che possono essere identificate da javascript. 1 - onMouseOver, che viene messo in atto quando l'utente fa scorrere.
Diagramma degli Stati. Diagramma degli Stati … Definizione è un grafico con nodi ed archi in cui i nodi rappresentano gli stati di una classe e gli archi,
Basi di Java Strutture base di Java. Basi di java ▪Variabili ▪Operatori ▪Condizioni e Cicli ▪Array.
Transcript della presentazione:

Verso lo spazio profondo LINQ ed oltre Verso lo spazio profondo (dove vi aspetta Raf  ) Ricci Gian Maria:alkampfer@nablasoft.com

LINQ in un evento sul C# 4.0? Gran parte delle funzionalità delle parallel libraries è comunque basata su LINQ Rinforzare le basi non fa mai male Iniziamo sul leggero, perchè poi c’è Raf 

Lambda expression Anonymous delegate Sebbene gli anonymous delegate siano una funzionalità del 2.0 alcuni concetti sono necessari per LINQ È importante capire bene cosa sia una closure Grazie alle closure è possibile facilitare l’operazione di Currying [schönfinkeling] (cambio di arità di una funzione) Che brutte parole ……..

Anonymous delegates

LINQ Vedremo ora una presentazione di LINQ collegata ad un ripasso delle funzionalità di C# 3.0 Quello che verrà fatto è mostrare come le nuove caratteristiche di C# 3.0 sono state introdotte principalmente al servizio di LINQ

Possibile genesi di LINQ

Lambda expression Lambda expression A lambda expression is an anonymous function that can contain expressions and statements, and can be used to create delegates or expression tree types. All’apparenza è solamente Syntactic Sugar Ma…….

Lambda expression Magia o trucco?

Lambda expression Lambda expression Questa «magia» accade perché il compilatore ha due modi distinti di rappresentare una lambda Funzione anonima Expression Tree: ovvero la rappresentazione dell’espressione con oggetti .NET organizzati in un normale «expression tree»

Lambda expression Expression Tree + 5 * 1 + 4 * 4 5 1

Lambda expression Expression Tree .NET Quella appena vista è una Expression Tree relativa ad una espressione numerica Una Expression Tree in .NET è sostanzialmente più complessa, perché deve rappresentare accesso ad oggetti, chiamata a metodi, Etc. Una lambda MultiRiga non può essere convertita dal compilatore in Expression Tree.

Lambda expression Expression Tree .NET o.Customer.Name.StartsWith("A") Lambda Esprime la chiamata a funzione StartsWith, necessita di un oggetto su cui chiamarlo e di una serie di parametri, in questo caso la stringa “A” Call Member Access Constant L’unico parametro del metodo StartsWith() Nel primo ramo si indica l’oggetto su cui va invocata la funzione. Member Access Accesso al membro Name dell’oggetto Customer Accesso al membro Customer dell’oggetto Order. Parameter Il parametro della query, l’ordine o.

Expression Trees Expression<Func<int, bool>> lambda = num => num < 5; Expression Trees

Chi usa le Expression Tree Lambda expression Chi usa le Expression Tree I primi utilizzatori delle Expression Tree sono i Provider LINQ Un provider LINQ implementa la IQueryable<T> per tradurre una query LINQ in un qualcosa comprensibile alla sorgente ES. LINQ to NHibernate converte in query NHibernate, LINQ to LDAP converte in query LDAP, Etc.

Lambda expression Provider LINQ Un provider linq deve quindi solamente tradurre una Expression Tree in qualche cos’altro Exp Tree SQL HQL LDAP LINQ QUERY Compiler Provider

Lambda expression Provider LINQ È grazie al compilatore che produce una Expression Tree che il provider per EF/NH/SQL quando vede una chiamata al metodo String.StartsWith() decide di generare una query SQL con operatore LIKE Alcuni provider, come il LINQ to XML sono invece implementati tramite IEnumerable<T> Se siete interessati a come si implementa un provider LINQ  magari un prossimo WS

Expression Trees - Le usero mai?

Lambda expression Static Reflection La static reflection è un uso “intelligente” degli expression tree per evitare reflection

Static Reflection

Compilazione di expressionTree Lambda expression Compilazione di expressionTree Accedere tramite reflection ad un metodo può essere lento. Si possono usare le Expression Tree per generare una funzione dinamicamente

Compilazione di expressionTree Lambda expression Compilazione di expressionTree

Compilazione di Expression Tree

OrderBy dinamici su LINQ Lambda expression OrderBy dinamici su LINQ Si ha un repository basato su IQueryable<T> Si vuole ordinare per una proprietà che è passata come stringa L’operatore OrderBy di LINQ non accetta una stringa, ma una Expression Tree

OrderBy dinamici su LINQ Lambda expression OrderBy dinamici su LINQ La soluzione è generare run-time l’expression tree che si attenderebbe la OrderBy Ad esempio scrivendo customers.OrderByProperty("Name", false) si deve generare la stessa Expression che si avrebbe scrivendo customers.OrderBy(c => c.Name)

Order by dinamici su LINQ

Lambda expression Conclusioni Una buona padronanza delle Expression Tree può aiutare a risolvere problemi “quotidiani” Conoscere le Expression Tree non è quindi solo appannaggio di chi scrive un provider LINQ Grazie alle Lambda Expression anche in C# si può adottare una programmazione in stile «funzionale»

?

CODE