AN FI 98-99 Un denominatoe comune Lo stile funzionale Concetti fondamentali.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Introduzione al linguaggio C++
INFORMATICA Altre Istruzioni di I/O
IL MODELLO CLIENTE / SERVITORE. Servitore: un qualunque ente computazionale capace di nascondere la propria organizzazione interna presentando ai clienti.
Procedure e funzioni A. Ferrari.
LE FUNZIONI IN C Sommario 1 Introduzione 2 Moduli di programma in C
PHP.
Linguaggi di programmazione
Algoritmi e Programmazione
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
Semantica Denotazionale
Semantica Denotazionale
JAVASCRIPT DIFFERENZA TRA JAVASCRIPT E JAVA TAG LO SCRIPT OGGETTI LE CLASSI FUNZIONE GESTORE DI EVENTI ELEMENTI DEL LINGUAGGI è un vero e proprio linguaggio.
Algebra di Boole ed elementi di logica
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Variabili e tipi primitivi Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 12 (19 novembre 2008) Programmazione in Java: i metodi statici.
1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Le stringhe di caratteri in Java Anno Accademico 2009/2010.
LISP.
Lezione 4: Costrutti Condizionali Prof. Raffaele Montella.
Fondamenti di Informatica I a.a Il linguaggio C Il controllo di flusso La selezione condizionale Listruzione switch I cicli Le istruzioni break,
Fondamentidi Programmazione Corso: Fondamenti di Programmazione Classe: PARI-DISPARI Docente: Prof. Luisa Gargano Testo: Aho, Ulman, Foundations of Computer.
nome: sequenza di caratteri usata per denotare un oggetto
mosaic manipola oggetti primitivi (ruota e unisci) regole:
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Dichiarazioni e tipi predefiniti nel linguaggio C
Il Linguaggio C.
Le funzioni.
Espressioni condizionali
Progettazione di una base di dati
Algoritmi e Programmazione (in C) Stefano Cagnoni e Monica Mordonini
Java base I: Sintassi e tipi di dati
Le funzioni a tempo di esecuzione
AN FI Un denominatoe comune Comandi u notazioni che esprimono azioni che, una volta eseguite, comportano una modifica permanente dello stato interno.
AN FI Array Array in Java. AN FI Array Dichiarazione di array in Java [ ]; //oppure u [] ; int a[]; int[] a; u La dimensione non è specificata.
FUNZIONI: IL MODELLO APPLICATIVO 1) Valutazione, nellenvironment corrente, del simbolo che denota il nome della funzione; 2) Valutazione, nellenvironment.
DEFINIZIONE DI NUOVE FUNZIONI & STRATEGIE DI COMPOSIZIONE La capacità di definire nuove funzioni permette: di definire nuove operazioni di introdurre variabili.
LA DOCUMENTAZIONE È noto che un buon programma dovrebbe essere ben documentato.. ma lesperienza insegna che quasi mai ciò viene fatto! –non cè tempo, ci.
LAPPROCCIO FUNZIONALE Obiettivo: esprimere la soluzione di un problema sotto forma di funzione. Quali funzioni primitive? Quali meccanismi di combinazione?
AN FI Concetti. Linguaggi di alto livello u Hanno capacita' espressive superiori a quelle del linguaggio macchina u Suggeriscono concetti e modi.
AN FI Un denominatoe comune Linguaggi di programmazione Un denominatore comune.
AN FI Array Collezioni di dati uniformi in tipo Array.
AN FI Array Collezioni di dati uniformi in tipo Array.
FUNZIONI... Una funzione permette di dare un nome a una espressione rendendola parametrica float f(){ return * sin(0.75); } float f1(int x) { return.
4 Tipi di dati & variabili
1 Programmazione = decomposizione basata su astrazioni (con riferimento a Java)
Introduzione alla programmazione Object Oriented
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
I nomi in Java F. Bombi 18 novembre novembre 2003.
Linguaggi e modelli computazionali LS Manni Tiziano
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Algebra di Boole ed elementi di logica Marco D. Santambrogio – Ver. aggiornata.
Introduzione a Javascript
Parte 3 Lo stato: variabili, espressioni ed assegnazioni
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
1 Tipi di Dato §descrittori, tipi, controllo e inferenza dei tipi §specifica (semantica) e implementazione di tipi di dato l implementazioni “sequenziali”
1 Fabio Scotti – Università degli Studi di Milano Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( )
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Nucleo di Java: Struttura e Semantica Espressioni Assegnamento Controllo di sequenza Dichiarazioni.
Ripasso su Java. Introduzione Per risolvere problemi complessi, i linguaggi di programmazione forniscono costrutti per realizzare nuove funzioni che trasformino.
Elementi di semantica denotazionale ed operazionale
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
STRUTTURA DI UN PROGRAMMA C In prima battuta, la struttura di un programma C è definita dalla seguente produzione: ::= { }
1 Linguaggi: guardando la semantica §esistono un insieme di concetti semantici e di strutture di implementazione in termini dei quali si descrivono in.
FI - Algoritmi e Programmazione 1 Variabili Consentono di aumentare notevolmente la potenza espressiva. Una variabile è caratterizzata da:  Un nome 
1 Tipi di dato modificabili §a livello semantico, riconduciamo la modificabilità alla nozione di variabile l lo stato “modificabile” corrispondente sarà.
Basi di Java Strutture base di Java. Basi di java ▪Variabili ▪Operatori ▪Condizioni e Cicli ▪Array.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

AN FI Un denominatoe comune Lo stile funzionale Concetti fondamentali

AN FI Un denominatoe comune Concetti comuni u Dati primitivi e tipi di dato u Espressioni e Comandi u Funzioni e Procedure u Variabili u Riferimenti u Strutture di dati

AN FI Un denominatoe comune Dati u Un elaboratore di informazione e' un manipolatore di segni u L'architettura fisica di ogni elaboratore moderno e' intrinsecamente capace di trattare vari domini di dati, detti tipi primitivi

AN FI Un denominatoe comune Tipi di dato u Questo concetto viene introdotto per raggiungere due obiettivi: –esprimere in modo sintetico un insieme di valori, la loro rappresentazione in memoria e un insieme di operazioni ammissibili; –permettere di effettuare controlli statici (al momento della compilazione) di correttezza sul programma.

AN FI Un denominatoe comune Espressioni u Le espressioni sono notazioni che denotano un valore attraverso una operazione di valutazione. –Ogni linguaggio introduce un insieme di operatori che permettono di aggregare espressioni semplici per formare espressioni complesse con riferimento ai valori di vari domini (numeri, testi, etc.) 2+3*sin(0.75)

AN FI Un denominatoe comune Funzioni u Le funzioni sono costrutti che permettono di attribuire un nome ad una espressione e renderla parametrica. float f(){ * sin(0.75); } float f1( int x) { 2 + x * sin(0.75); }

AN FI Un denominatoe comune Funzioni u Le funzioni sono costrutti che permettono di attribuire un nome ad una espressione e renderla parametrica. float f(){ * sin(0.75); } float f1( int x) { 2 + x * sin(0.75); }

AN FI Un denominatoe comune Il modello cliente-servitore

AN FI Un denominatoe comune La funzione come servitore u riceve dati di ingresso informazioni in corrispondenza agli argomenti; u ha come corpo una espressione, la cui valutazione fornisce un risultato; u denota un valore in corrispondenza al suo nome. se x vale 1 e f e la funzione R->R, f = 3 * x 2 + x - 3 allora f(x) restituisce il valore 1

AN FI Un denominatoe comune La funzione come servitore u passivo u che serve un cliente per volta u che può trasformarsi in cliente, invocando sé stessa

AN FI Un denominatoe comune Funzioni: trasparenza referenziale u f(x) + g( f(x), q( x + f(y))) f,g,q sono simboli che denotano funzioni; il simbolo x denota un valore; qualunque sia il valore denotato da x, x denota sempre lo stesso valore in ogni punto in cui compare nellespressione; lespressione f(x) denota sempre lo stesso valore in ogni punto in cui compare nellespressione.

AN FI Un denominatoe comune Funzioni come componenti f(x) + g( f(x), q( x + f(y))) f x f + f q + g x x y x1 x2 x3 x4 x5 x6 x7

AN FI Un denominatoe comune La computazione u f(x) + g( f(x), q( x + f(y))) x1 = f(x) x2 = f(x) //mossa evitabile da un automa intelligente x3 = f(y) x4 = x + x3 x5 = q( x4 ) x6 = g( x2,x5 ) x7 = x1 + x6

AN FI Un denominatoe comune Funzioni come componenti f(x) + g( f(x), q( x + f(y))) f x f + q + g y x7 x1

AN FI Un denominatoe comune Funzioni: trasparenza referenziale u f(x) + g( f(x), q( x + f(y))) a + g( a, q(x + b) ) –essendo a=f(x), b=f(y) a + g( a, q(x + a) ) –essendo a=f(x)

AN FI Un denominatoe comune Funzioni: interfaccia u L interfaccia di una funzione e costituita dal suo nome, dalla lista degli argomenti e dal tipo del valore restituito. u Linterfaccia di una funzione viene spesso denominata firma ( signature ).

AN FI Un denominatoe comune Funzioni: corpo u Il corpo costituisce la struttura interna di una funzione, completamente inaccessibile dallesterno, –garantendo in questo modo protezione dellinformazione secondo il principio del suo nascondimento ( information hiding )

AN FI Un denominatoe comune Funzioni: Comunicazione u La comunicazione di informazione tra un cliente e una funzione avviene tramite linterfaccia della funzione

AN FI Un denominatoe comune Il problema dei simboli u f(x) + g( f(x), q( x + f(y))) per fornire il risultato, dobbiamo prima conoscere la definizione delle funzioni f,g,q e i valori di x e y. u g( f(x), q( x + f(y))) u cosa dobbiamo conoscere?

AN FI Un denominatoe comune Simboli e significato esiste una convenzione diffusa, una cultura comune che associa ad un simbolo un preciso significato; esiste un ente di riferimento che specifica in modo esplicito il significato di un simbolo.

AN FI Un denominatoe comune Binding ed environment u La conoscenza di cosa un simbolo denota viene espressa da una legame ( binding ) tra il simbolo e uno o piu attributi u Si definisce environment la collezione dei binding valida in (un certo punto di) un programma.

AN FI Un denominatoe comune Scope: esempio u Sia f N->N: u Sia z = 2 u f(z) + f(z) vale 8 u f(2) + f( y ) vale ??? u g(z) vale ??? f(x)=x+x

AN FI Un denominatoe comune Scope e scope rules u Tutte le occorrenze di un nome nel testo di un programma al quale si applica un particolare binding si dicono essere entro la stessa portata o scope del binding. u Le regole in base alle quali si stabilisce la portata di un binding si dicono regole di visibilita' o scope rules.

AN FI Un denominatoe comune Scope: esempio u Sia f N->N: f(x)=x+x u Sia z = 2 u f(z) + f(z) vale 8 u f(2) + f( y ) vale ??? u Sia g N->N: g(x)=x*x u g(z) vale 4 u f( g(z) )vale 8

AN FI Un denominatoe comune Funzioni: il modello applicativo u Valutazione, nell environment corrente, del simbolo che denota il nome della funzione; u Valutazione, nell environment corrente, delle espressioni che denotano gli argomenti; u Commutazione all environment di definizione della funzione

AN FI Un denominatoe comune Funzioni: il modello applicativo u Chiamata della funzione; u Esecuzione del corpo della funzione (nel suo environment di definizione); u Restituzione del controllo al chiamante e del risultato con ripristino dell environment esistente al momento della chiamata.

AN FI Un denominatoe comune Lapproccio funzionale u Quali funzioni primitive e quali meccanismi di combinazione introdurre per poter esprimere la soluzione di un problema come una funzione?

AN FI Un denominatoe comune Funzioni primitive: un possibile insieme la funzione zero: zero : N->N u la funzione successore: succ : N -> N u una famiglia di funzione proiezione p ni : N n -> N, 1 i n –la funzione p ni seleziona li-mo argomento della lista di n argomenti di ingresso. u p 3,2 (x1,x2,x3)=x2

AN FI Un denominatoe comune Strategie di composizione la composizione di funzioni; i predicati e le espressioni condizionali; la ricorsione.

AN FI Un denominatoe comune Funzioni ricorsive generali u Le funzioni definibili in termini di un insieme prescelto di primitive e delle precedenti strategie di composizione costituiscono un insieme detto delle funzioni ricorsive generali.

AN FI Un denominatoe comune Un linguaggio reale Dati e funzioni

AN FI Un denominatoe comune Un linguaggio: i dati u Per modello di dato si intende una astrazione in cui si distinguono: i valori che i dati possono assumere; le notazioni con cui denotare i valori; le operazioni possibili sui dati.

AN FI Un denominatoe comune Un linguaggio: i dati u Una delle metodologie piu' incisive per la costruzione di sistemi software corretti, modulari, documentati e riusabili consiste nel mantenere quanto piu' possibile separate le parti del programma (detti gestori ) che accedono e manipolano la rappresentazione concreta in memoria dei dati, dalle parti ( clienti ) che trattano i dati come enti concettuali, ignorandone i dettagli interni e realizzativi.

AN FI Un denominatoe comune Tipi di dato u Questo concetto viene introdotto per raggiungere due obiettivi: –esprimere in modo sintetico un insieme di valori, la loro rappresentazione in memoria e un insieme di operazioni ammissibili; –permettere di effettuare controlli statici (al momento della compilazione) di correttezza sul programma.

AN FI Un denominatoe comune Variabili nei linguaggi imperativi u Rappresentano astrazioni delle celle di memoria di un elaboratore piuttosto che sinonimi di dati u Sono associate a due diverse informazioni: –l' indirizzo di una cella di memoria (o della prima cella di un blocco di celle) –il contenuto

AN FI Un denominatoe comune Variabili nei linguaggi imperativi 3.22 la corrispondenza tra la variabile x e il valore 3.22 puo' venire rappresentata come segue: x

AN FI Un denominatoe comune Tipi di dato primitivi

AN FI Un denominatoe comune Tipi di dato primitivi

AN FI Un denominatoe comune Stringhe u Collezioni di caratteri delimitate da doppi apici sono dette stringhe. –In Java le stringhe appartengono a un tipo predefinito dalla classe String. In C le stringhe sono semplici sequenze di caratteri di cui l'ultimo e' \0'. –Esiste un insieme di operazioni di libreria per la manipolazione delle stringhe.

AN FI Un denominatoe comune Stringhe: esempi e la stringa vuota 0 e una stringa (di un solo carattere) hello world e una stringa

AN FI Un denominatoe comune Boolean In Java, gli identificatori true e false denotano rispettivamente il valore vero e il valore falso e sono gli unici valori del tipo di dato boolean. –In C il tipo di dato boolean non esiste: il valore falso e denotato da 0 ed e considerato vero ogni naturale diverso da zero.

AN FI Un denominatoe comune Operatori C

AN FI Un denominatoe comune Operatori predefiniti in Java

AN FI Un denominatoe comune Categorie di dati in Java valori primitivi (di tipo boolean o di un tipo numerico) riferimenti (valori di un qualunque reference type )

AN FI Un denominatoe comune Riferimenti u Molti linguaggi imperativi permettono di trattare gli indirizzi di memoria come valori e di introdurre variabili che possono assumere come valore un indirizzo 3.22 x px

AN FI Un denominatoe comune Predicati u Un predicato e una funzione che restituisce un valore di tipo boolean

AN FI Un denominatoe comune Composizione u La composizione di funzioni si ottiene permettendo di esprimere i valori trasmessi agli argomenti di una funzione come espressioni in cui possono comparire altre funzioni

AN FI Un denominatoe comune Composizione: un esempio u f(x) + g( f(x), q( x + f(y))) x1 = f(x) x2 = f(x) //mossa evitabile da un automa intelligente x3 = f(y) x4 = x + x3 x5 = q( x4 ) x6 = g( x2,x5 ) x7 = x1 + x6

AN FI Un denominatoe comune Lespressione condizionale u Lespressione condizionale riflette la consuetudine matematica di definire le funzioni per casi. abs: N-> N, abs(x) vale x se x 0 abs(x) vale -x se x 0

AN FI Un denominatoe comune Lespressione condizionale u ? : (x>=0)?x:-x

AN FI Un denominatoe comune Un problema (triangolo) Dati tre valori interi positivi a,b,c con a<=b<=c, dire se essi possono rappresentare i lati di un triangolo e di che triangolo si tratta.

AN FI Un denominatoe comune Problema del triangolo: progetto u si ha un triangolo –se : a + b > c (1) u Nel caso la (1) sia vera, –se a=c il triangolo e' equilatero (in quanto deve essere anche a=b e b=c ), –se a c ma a=b oppure b=c il triangolo e' isoscele. –se a b c, allora il triangolo e' scaleno

AN FI Un denominatoe comune Problema del triangolo: codice (a+b)<=c ? "non triangolo" : (a==c) ? equilatero" : (a==b)||(b==c) ? " isoscele" : " scaleno ";

AN FI Un denominatoe comune Definizione di nuove funzioni u Cio che occorre e una notazione con cui esprimere non tanto la volonta di valutare una espressione, quanto la volonta di segnalare al sistema che una certa espressione costituisce una nuova funzione che potra poi essere invocata ed eseguita.

AN FI Un denominatoe comune Definizione di nuove funzioni u Se si desidera attribuire un nome alla nuova funzione, allora il linguaggio deve introdurre costrutti per estendere un environment con il nuovo binding che lega il nome scelto per la funzione alloggetto computazionale che rappresenta quella specifica funzione.

AN FI Un denominatoe comune Definizione di nuove funzioni int max (int x, int y ){ return x >y ? x : y; } nomeFunzione ( ) { }

AN FI Un denominatoe comune Funzioni: denominazione Un unico costrutto unisce la denotazione di una nuova funzione con lattribuzione ad essa di un nome; Il simbolo max denota il nome della nuova funzione; Lenvironment corrente viene arricchito con uno nuovo binding tra il nome della funzione e la sua rappresentazione interna [max / rappresentazioneFunzione];

AN FI Un denominatoe comune Funzioni: argomenti I simboli che compaiono nella lista degli argomenti sono variabili il cui scope e il corpo della funzione –Le variabili intere x e y sono gli argomenti della funzione.

AN FI Un denominatoe comune Funzioni: il corpo La sequenza di istruzioni racchiusa tra le parentesi graffe { } costituisce il corpo della funzione. { return x > y ? x : y; } Listruzione return provoca la restituzione del controllo al cliente, unitamente al valore dellespressione che la segue; –Il corpo della funzione costituisce un blocco in cui valgono precise regole di visibilita

AN FI Un denominatoe comune Definizione di nuove funzioni Permette di definire nuove operazioni u Permette di introdurre variabili per denotare i dati in modo simbolico u Permette di esprimere la ripetizione di una espressione per un numero prefissato o non prefissato di volte

AN FI Un denominatoe comune La ricorsione u La ricorsione consiste nella possibilita di definire una funzione in termini di se stessa. fact: N->N, fact(n) se n = 0, vale 1 fact(n) se n>0, vale n*fact(n-1)

AN FI Un denominatoe comune Funzione ricorsive: un esempio int fact ( int n ){ //return n ==0 ? 1 : n * fact( n-1 ); return n>0 ? n * fact( n-1 ) : 1; }

AN FI Un denominatoe comune Funzioni elementari u Partendo dalle funzioni primitive sul dominio dei numeri naturali, ed utilizzando loperatore (predicato) di uguaglianza, le espressioni condizionali e la ricorsione e possibile definire alcune funzioni che siamo da sempre a considerare come date a priori.funzioni primitive sul dominio dei numeri naturali

AN FI Un denominatoe comune Funzioni elementari u In questi esempi non avremo bisogno delle funzioni di selezione, in quanto possediamo la capacita' espressiva di denotare ogni singolo argomento nel corpo della funzione. u Inoltre denoteremo con 0 il valore restituito dalla funzione zero.

AN FI Un denominatoe comune Predecessore int pred( int x ){ return ( x == 0 ) ? 0 : raggiungi( x,0 ); } int raggiungi( int x, int y ){ return (succ(y)==x) ? y : raggiungi(x,succ(y)); }

AN FI Un denominatoe comune Il funzionamento del programma ClienteChiama Pred(3)raggiungi(3,0) raggiungi(3,0)raggiungi(3,1) raggiungi(3,1)raggiungi(3,2) -> 2

AN FI Un denominatoe comune Somma int sum( int x, int y ){ return (x==0)? y : succ(sum(pred(x),y)); } x + y = ((x-1)+y)+1

AN FI Un denominatoe comune Il funzionamento ClienteChiama sum(3,5)succ<-sum(2,5) sum(2,5)succ <-sum(1,5) sum(1,5)succ 5

AN FI Un denominatoe comune Prodotto int mul( int x, int y ){ return (x==0)? 0 : sum(mul(pred(x),y),y); } x*y = (x-1)*y+y

AN FI Un denominatoe comune Il processo ClienteChiama mul(3,6)sum(xxx,6) ove xxx = mul(2,6) mul(2,6)sum(zzz,6) ove zzz = mul(1,6) mul(1,6)sum(kkk,6) ove kkk = mul(0,6) ->0

AN FI Un denominatoe comune Sottrazione int diff( int x, int y ){ return (y==0)? x : pred(diff(x,pred(y))); } x-y= (x - (y-1))-1

AN FI Un denominatoe comune Il processo ClienteChiama diff(2,3)pred( xxx) ove xxx = diff(2,2) diff(2,2)pred( yyy) ove yyy = diff(2,1) diff(2,1)pred( zzz) ove zzz = diff(2,0) ->2

AN FI Un denominatoe comune Modulo |x-y| int mod( int x, int y ){ return sum(diff(x,y),diff(y,x)); }

AN FI Un denominatoe comune Operatori relazionali int magZero( int x ){ return (x==0) ? 0 : succ(0); } int minore( int x, int y ){ return magZero(diff(y,x)); }

AN FI Un denominatoe comune Operatori booleani int and( int p, int q ){ return p ? q : 0; } int or( int p, int q ){ return p ? p : q; } Si fa la convenzione che 0 denoti il valore false e qualunque naturale positivo denoti il valore true.

AN FI Un denominatoe comune Triangolo String triangolo( int a, int b, int c ){ return (a<=b) && (b<=c) ? ( (a+b)<=c ? "non triangolo" : (a==c) ? "equilatero " : (a==b)||(b==c) ? "isoscele" : "scaleno " ) : "dati errati"; }