linguaggi di programmazione - elementi corso di laurea in informatica (aa 2005/2006) gabriella pasi...

21
guaggi di Programmazione - eleme guaggi di Programmazione - eleme Corso di Laurea in Informatica Corso di Laurea in Informatica (AA 2005/2006) (AA 2005/2006) Gabriella Pasi e Carla Simone Gabriella Pasi e Carla Simone pasi@ pasi@ disco.unimib.it disco.unimib.it [email protected] [email protected]

Upload: agata-grasso

Post on 01-May-2015

220 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Linguaggi di Programmazione - elementi Corso di Laurea in Informatica (AA 2005/2006) Gabriella Pasi e Carla Simone pasi@ disco.unimib.it simone@disco.unimib.it

Linguaggi di Programmazione - elementiLinguaggi di Programmazione - elementi

Corso di Laurea in InformaticaCorso di Laurea in Informatica(AA 2005/2006)(AA 2005/2006)

Gabriella Pasi e Carla SimoneGabriella Pasi e Carla Simone

pasi@[email protected]@[email protected]

Page 2: Linguaggi di Programmazione - elementi Corso di Laurea in Informatica (AA 2005/2006) Gabriella Pasi e Carla Simone pasi@ disco.unimib.it simone@disco.unimib.it

Programma del corsoProgramma del corso

– Introduzione alla Logica Matematica (base formale Introduzione alla Logica Matematica (base formale dei dei linguaggi logici)linguaggi logici)

PARTE A: PARTE A: Introduzione alle grammatiche Introduzione alle grammatiche (base formale dei (base formale dei

linguaggi)linguaggi)PARTE B: Linguaggi funzionaliPARTE B: Linguaggi funzionali

– Il concetto di ricorsioneIl concetto di ricorsione– Introduzione al linguaggio LispIntroduzione al linguaggio Lisp

PARTE D: Linguaggi logiciPARTE D: Linguaggi logici– Introduzione al linguaggio PrologIntroduzione al linguaggio Prolog

PARTE C: La programmazione concorrentePARTE C: La programmazione concorrente– Modellazione di sistemi concorrentiModellazione di sistemi concorrenti– La notazione algebrica FSP e la notazione grafica La notazione algebrica FSP e la notazione grafica delle delle Reti di PetriReti di Petri

Introduzione ai paradigmi di programmazioneIntroduzione ai paradigmi di programmazione

Page 3: Linguaggi di Programmazione - elementi Corso di Laurea in Informatica (AA 2005/2006) Gabriella Pasi e Carla Simone pasi@ disco.unimib.it simone@disco.unimib.it

Modalità di esameModalità di esame

• prova scritta• realizzazione di progetti• discussione orale dello scritto e dei progetti

La prova scritta potrà essere effettuata mediante DUE La prova scritta potrà essere effettuata mediante DUE compitinicompitini, che potranno essere sostenuti durante il corso:, che potranno essere sostenuti durante il corso:

Nel caso in cui uno dei due Nel caso in cui uno dei due compitinicompitini risultasse risultasse insufficiente è consentito un recupero degli argomenti insufficiente è consentito un recupero degli argomenti ad esso relativo SINO ALL’APPELLO DI APRILE compreso. ad esso relativo SINO ALL’APPELLO DI APRILE compreso. Dopo tale appello sarà necessario rifare interamente la Dopo tale appello sarà necessario rifare interamente la prova scritta.prova scritta.

L’esame è costituito da tre parti:L’esame è costituito da tre parti:

• primo compitino: mese di Novembre• secondo compitino: mese di Gennaio

Page 4: Linguaggi di Programmazione - elementi Corso di Laurea in Informatica (AA 2005/2006) Gabriella Pasi e Carla Simone pasi@ disco.unimib.it simone@disco.unimib.it

Modalità di esameModalità di esame

Il testo dei progetti sarà pubblicato sul sito web del Il testo dei progetti sarà pubblicato sul sito web del corso (corso (http://old.disco.unimib.it/simone/ling_prog_el/). ).

[email protected] per gli studenti con cognome che inizia con lettera M-Z

[email protected] per gli studenti con cognome che inizia con lettera A-L

La consegna dei progetti dovrà avvenire mediante invio La consegna dei progetti dovrà avvenire mediante invio di file al seguente indirizzo (quello relativo al proprio di file al seguente indirizzo (quello relativo al proprio docente!) ENTRO UNA SETTIMANA PRIMA dello scritto docente!) ENTRO UNA SETTIMANA PRIMA dello scritto dell’appello prescelto.dell’appello prescelto.

La prima prova scritta e’ il giorno 27 Gennaio. Se si La prima prova scritta e’ il giorno 27 Gennaio. Se si vuole sostenere l’orale in questo appello i progetti vuole sostenere l’orale in questo appello i progetti devono quindi essere consegnati ENTRO IL GIORNO 20. devono quindi essere consegnati ENTRO IL GIORNO 20.

Page 5: Linguaggi di Programmazione - elementi Corso di Laurea in Informatica (AA 2005/2006) Gabriella Pasi e Carla Simone pasi@ disco.unimib.it simone@disco.unimib.it

I linguaggi di programmazione possono essere SEQUENZIALI o CONCORRENTI.

Linguaggi di programmazione:Linguaggi di programmazione:una possibile classificazioneuna possibile classificazione

– LINGUAGGI IMPERATIVILINGUAGGI IMPERATIVI

– LINGUAGGI FUNZIONALILINGUAGGI FUNZIONALI

– – LINGUAGGI LOGICILINGUAGGI LOGICI

– LINGUAGGI A OGGETTILINGUAGGI A OGGETTI

Questa classificazione corrisponde a distintidistinti paradigmi di programmazioneparadigmi di programmazione.

Page 6: Linguaggi di Programmazione - elementi Corso di Laurea in Informatica (AA 2005/2006) Gabriella Pasi e Carla Simone pasi@ disco.unimib.it simone@disco.unimib.it

Le caratteristiche essenziali e la struttura dei linguaggi imperativi sono strettamente legate all’architettura di Von Neumann.

L’architettura di Von Neumann è costituita da due componenti fondamentali:

– memoria (componentecomponente passivapassiva)– processore (componente attivacomponente attiva)

La principale attività del processore e’ eseguire calcoli e assegnare valori a celle di memoria concetto di concetto di variabilevariabile come astrazione di cella di memoria.

Paradigma imperativo (procedurale)Paradigma imperativo (procedurale)

I linguaggi ASSEMBLER, FORTRAN, Pascal, CASSEMBLER, FORTRAN, Pascal, C (ad esempio) sono basati su distinti livelli di astrazione di questa architettura.

Page 7: Linguaggi di Programmazione - elementi Corso di Laurea in Informatica (AA 2005/2006) Gabriella Pasi e Carla Simone pasi@ disco.unimib.it simone@disco.unimib.it

La macchina di Von Neuman

I/O Memory CPU

fetch instr.executestore result

Page 8: Linguaggi di Programmazione - elementi Corso di Laurea in Informatica (AA 2005/2006) Gabriella Pasi e Carla Simone pasi@ disco.unimib.it simone@disco.unimib.it

I linguaggi imperativi adottano uno stile stile prescrittivoprescrittivo.

– un programma scritto in un linguaggio imperativo prescrive le operazioni che il processore deve compiere (ad es. assegnamento).

– Esecuzione delle istruzioni nell’ordine in cui appaiono nel programma (eccezione: strutture di controllo)Realizzati sia attraverso interpretazione (BASIC,...) sia

mediante compilazione (C, Pascal, FORTRAN, ...)

Nati per più per manipolazione numerica che simbolicaNati per più per manipolazione numerica che simbolica

Paradigma imperativo (procedurale)Paradigma imperativo (procedurale)

Page 9: Linguaggi di Programmazione - elementi Corso di Laurea in Informatica (AA 2005/2006) Gabriella Pasi e Carla Simone pasi@ disco.unimib.it simone@disco.unimib.it

Programma = Algoritmo + dati

La struttura del programma consiste in:

• una parte di dichiarazionedichiarazione in cui si dichiarano tutte le variabili del programma e il loro tipo:• una parte che descrive l’algoritmo risolutivo utilizzato, mediante istruzioniistruzioni del linguaggio.

Le istruzioni si dividono in:• istruzioni di lettura e scrittura• istruzioni di assegnamento (astrazione di cella di memoria)• istruzioni di controllo

Paradigma imperativo (procedurale)Paradigma imperativo (procedurale)

Page 10: Linguaggi di Programmazione - elementi Corso di Laurea in Informatica (AA 2005/2006) Gabriella Pasi e Carla Simone pasi@ disco.unimib.it simone@disco.unimib.it

MotivazioniMotivazioni

– Necessità di gestire applicazioni a più alto livello di astrazione

– Tentativo di sviluppare programmi più concisi, più semplici da scrivere, più vicini alla logica del problema, la cui correttezza sia più “semplice” da verificare

Definizione di paradigmi di Definizione di paradigmi di programmazione alternativiprogrammazione alternativi

– PROGRAMMAZIONE FUNZIONALE– PROGRAMMAZIONE LOGICA – PROGRAMMAZIONE A OGGETTI

Page 11: Linguaggi di Programmazione - elementi Corso di Laurea in Informatica (AA 2005/2006) Gabriella Pasi e Carla Simone pasi@ disco.unimib.it simone@disco.unimib.it

Linguaggi ad ”altissimo livello”: utilizzabili anche da non-programmatori.

Generati per manipolazione simbolicasimbolica non numerica.

Concetti di programma e di struttura dati non nettamente separati (un programma è specificato per mezzo di una struttura dati).

Basati su concetti matematiciconcetti matematici e non come astrazioni della macchina di Von Neumann.

Non richiedono dichiarazioni di variabili.

Paradigmi funzionale e logico:Paradigmi funzionale e logico:caratteristiche comunicaratteristiche comuni

I linguaggi funzionale e logico adottano uno stile dichiarativostile dichiarativo.

Page 12: Linguaggi di Programmazione - elementi Corso di Laurea in Informatica (AA 2005/2006) Gabriella Pasi e Carla Simone pasi@ disco.unimib.it simone@disco.unimib.it

Concetto primitivoConcetto primitivo: funzionefunzione

– Una funzione è una regola di associazione tra due insiemi, che associa a ogni elemento del primo insieme (dominio) un elemento del secondo insieme (codominio).

– La definizione di una funzione ne specifica il dominio, il codominio e la regola di associazione. Ad esempio: incr: N N

incr(x) = x + 1.

– Dopo averne dato definizione, una funzione può essere applicata a un elemento del dominio (argomento) per restituire l’elemento del codominio ad esso associato (valutazione): incr(3) = 4.

Paradigma funzionaleParadigma funzionale

Page 13: Linguaggi di Programmazione - elementi Corso di Laurea in Informatica (AA 2005/2006) Gabriella Pasi e Carla Simone pasi@ disco.unimib.it simone@disco.unimib.it

Paradigma funzionaleParadigma funzionale

L’unica operazioneL’unica operazione utilizzata nel paradigma funzionale è l’applicazione di funzioni.

Il ruolo dell’interprete di un linguaggio funzionale è valutare il programma e produrre un valoreprodurre un valore: nel paradigma funzionale “puro” il valore di una funzione è determinato soltanto dal valore dei suoi argomenti, e soltanto dal valore dei suoi argomenti, e non da variabilinon da variabili (assenza di effetti collaterali).

L’essenza della programmazione funzionale è combinare funzionicombinare funzioni (utilizzo del concetto di

RICORSIONERICORSIONE).

Il concetto di variabile utilizzato è quello di variabile matematica valori non mutabili (nessun assegnamento).

Page 14: Linguaggi di Programmazione - elementi Corso di Laurea in Informatica (AA 2005/2006) Gabriella Pasi e Carla Simone pasi@ disco.unimib.it simone@disco.unimib.it

Paradigma funzionaleParadigma funzionale

Programma = Funzione

La struttura del programma consiste nella definizione di una funzione.

L’esecuzione del programma consiste nella valutazione di tale funzione.

La struttura dati fondamentale è la lista

Un programma è definito come una lista (programma coincide con struttura dati)

Page 15: Linguaggi di Programmazione - elementi Corso di Laurea in Informatica (AA 2005/2006) Gabriella Pasi e Carla Simone pasi@ disco.unimib.it simone@disco.unimib.it

Linguaggio LISP (LISt Processing)Linguaggio LISP (LISt Processing)

Proposto nel 1958 da John McCarthy.

Originariamente era funzionale puro.

Esistono molti ambienti di programmazione Lisp:• InterLisp• MacLisp• CommonLisp

Page 16: Linguaggi di Programmazione - elementi Corso di Laurea in Informatica (AA 2005/2006) Gabriella Pasi e Carla Simone pasi@ disco.unimib.it simone@disco.unimib.it

Linguaggio LISP (LISt Processing)Linguaggio LISP (LISt Processing)

(member ’A ’(B C D))

• Il programma è una struttura dati• Non c’è dichiarazione di tipo• Non c’è assegnamento

(defun member (item list)(cond ((null list) nil)((equal item (car list)) T)(T (member item (cdr list)))))

Esempio di programma Lisp

Page 17: Linguaggi di Programmazione - elementi Corso di Laurea in Informatica (AA 2005/2006) Gabriella Pasi e Carla Simone pasi@ disco.unimib.it simone@disco.unimib.it

Paradigma logicoParadigma logico

BaseBase: logica formale ObiettivoObiettivo: formalizzare il ragionamento

Programmare significa:

– descrivere il problema con formule del linguaggio

– interrogare il sistema, che effettua deduzioni sulla base della conoscenza rappresentata

Concetto primitivoConcetto primitivo: deduzione deduzione logicalogica

Page 18: Linguaggi di Programmazione - elementi Corso di Laurea in Informatica (AA 2005/2006) Gabriella Pasi e Carla Simone pasi@ disco.unimib.it simone@disco.unimib.it

Stile dichiarativoStile dichiarativo: la conoscenza del problema è espressaindipendentemente dal suo utilizzo (COSA non COME);

Alta modularità e flessibilità

Definire un linguaggio logico significa definire come il programmatore può esprimere la conoscenza e quale tipo di controllo può utilizzare:

– Problematiche di RAPPRESENTAZIONE della Problematiche di RAPPRESENTAZIONE della conoscenzaconoscenza

Paradigma logicoParadigma logico

Programma = Conoscenza + controllo

Page 19: Linguaggi di Programmazione - elementi Corso di Laurea in Informatica (AA 2005/2006) Gabriella Pasi e Carla Simone pasi@ disco.unimib.it simone@disco.unimib.it

Linguaggio PrologLinguaggio Prolog

Un programma Prolog è costituito da:

– Asserzioni incondizionate (fatti): A

– Asserzioni condizionate (o regole): A IF B,C,D,…

•A: è la conclusione (conseguente)

•B,C,D: sono le premesse (o antecedenti)

Una interrogazione ha la forma: ? A, B, C, …

Page 20: Linguaggi di Programmazione - elementi Corso di Laurea in Informatica (AA 2005/2006) Gabriella Pasi e Carla Simone pasi@ disco.unimib.it simone@disco.unimib.it

ESEMPIOESEMPIO: due individui sono colleghi se lavorano per la stessa ditta

collega(X,Y):- lavora(X,Z), lavora(Y,Z), diverso(X,Y).

FATTIlavora(emp1,ibm).lavora(emp2,ibm).lavora(emp3,txt).lavora(emp4,olivetti).lavora(emp5,txt).:- collega(X,Y).

Linguaggio PrologLinguaggio Prolog

REGOLAREGOLA

Page 21: Linguaggi di Programmazione - elementi Corso di Laurea in Informatica (AA 2005/2006) Gabriella Pasi e Carla Simone pasi@ disco.unimib.it simone@disco.unimib.it

STILE PRESCRITTIVO:STILE PRESCRITTIVO:Controlla prima se la lista è vuota; se sì dai come risultato la lista vuota. Altrimenti calcola una permutazione L’ di L e controlla se è ordinata; se sì termina dando come risultato L’, altrimenti calcola un’altra permutazione di L etc.…

STILE DICHIARATIVO:STILE DICHIARATIVO:Il risultato dell’ordinamento di una lista vuota è la lista vuota.Il risultato dell’ordinamento di una lista L è L’ se la lista L’ è ordinata ed è la permutazione di L.

Confronto tra programmazione Confronto tra programmazione prescrittiva e programmazione prescrittiva e programmazione

dichiarativa dichiarativa Problema: ordinare una listaProblema: ordinare una lista