La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

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

Presentazioni simili


Presentazione sul tema: "AN FI 98-99 Un denominatoe comune Lo stile funzionale Concetti fondamentali."— Transcript della presentazione:

1 AN FI Un denominatoe comune Lo stile funzionale Concetti fondamentali

2 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

3 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

4 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.

5 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)

6 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); }

7 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); }

8 AN FI Un denominatoe comune Il modello cliente-servitore

9 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

10 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

11 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.

12 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

13 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

14 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

15 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)

16 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 ).

17 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 )

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

19 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?

20 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.

21 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.

22 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

23 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.

24 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

25 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

26 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.

27 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?

28 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

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

30 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.

31 AN FI Un denominatoe comune Un linguaggio reale Dati e funzioni

32 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.

33 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.

34 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.

35 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

36 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

37 AN FI Un denominatoe comune Tipi di dato primitivi

38 AN FI Un denominatoe comune Tipi di dato primitivi

39 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.

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

41 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.

42 AN FI Un denominatoe comune Operatori C

43 AN FI Un denominatoe comune Operatori predefiniti in Java

44 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 )

45 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

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

47 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

48 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

49 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

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

51 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.

52 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

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

54 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.

55 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.

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

57 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];

58 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.

59 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

60 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

61 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)

62 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; }

63 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

64 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.

65 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)); }

66 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

67 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

68 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

69 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

70 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

71 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

72 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

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

74 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)); }

75 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.

76 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"; }


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

Presentazioni simili


Annunci Google