Corso di Laurea Specialistica in Informatica
Linguaggi di Programmazione I e II 2005/2006
pagina aggiornata il
11-05-2009
Indice
Finalità del corso
Programma
Bibliografia
Finalità del corso
I corsi di Linguaggi I e II, intendono fornire una conoscenza delle
caratteristiche dei vari paradigmi di programmazione, cercando il più
possibile di evitare di concentrarsi su uno specifico linguaggio, andando
bensì a presentare i principi che guidano la progettazione, realizzazione
e
implementazione dei moderni linguaggi di programmazione. Con solida
conoscenza delle caratteristiche “universali” si potranno così in
futuro
imparare nuovi linguaggi in pochissimo tempo.
A questa visione generale si giunge attraverso la descrizione dei
principali paradigmi di programmazione:
- imperativo,
- funzionale,
- logico e
- logico-funzionale.
Questi paradigmi, oltre a essere esaminati nei loro
aspetti pragmatici più immediati, sono analizzati e confrontati sulla
base
dei principi generali, in modo tale da permettere una comprensione critica
della maggior parte dei linguaggi di uso comune. In questo modo si intende
sviluppare uno spirito critico che permetta di arrivare ad una
programmazione consapevole in cui saper scegliere il paradigma più adatto
a
seconda del problema da risolvere e sapere quali costrutti di un linguaggio
usare, e (soprattutto) a quale costo.
I due corsi inoltre intendono fornire una conoscenza relativamente
approfondita (soprattutto dell'aspetto programmativo) dei paradigmi di
programmazione dichiarativa (funzionale, logico e logico-funzionale) che,
grazie alla loro espressività, si prestano naturalmente quale base di
sviluppo di software corretto. Si mostrerà come caratteristiche quali
high-order e non-determinismo possano essere sfruttate per scrivere codice
compatto, elegante e flessibile (riutilizzabile).
Il corso di Linguaggi I, in particolare, tratterà innanzitutto
i concetti generali, fornendo una conoscenza
“language independent” delle caratteristiche di tutti i paradigmi.
Si vedranno poi il paradigma imperativo e i meccanismi di supporto a
“run-time” dei linguaggi imperativi. Dopodiché si illustreranno
le caratteristiche del paradigma funzionale (specialmente l'high-order programming).
Il corso di Linguaggi II, in particolare, illustrerà i modelli d'esecuzione dei linguaggi funzionale
e poi completerà la presentazione dei paradigmi dichiarativi: logico
e logico-funzionale (specialmente il non-deterministic high-order programming).
Programma
Linguaggi 1
- Paradigma Imperativo
- Macchine astratte, Interpretazione e Compilazione
- Descrivere un linguaggio di Programmazione (Sintassi e Semantica)
- I nomi e l'ambiente
- La gestione della memoria
- Strutturare il controllo
- p-code
- Astrarre sul controllo (Metodi di passaggio dei parametri)
- Strutturare i dati
- Type checking monomorfo e polimorfo
- Paradigma Funzionale
- Introduzione alla Programmazione Funzionale.
- High-order Programming.
- Il linguaggio Haskell (tutorial,
prelude, miei
esempi).
- list comprehensions, partial applications of curried functions, sections, non-strict functions, infinite data structures, case expressions, pattern matching
- Types, Classes and Overloading
- Haskell's monadic I/O
- Standard Haskell Classes
- Monads
- Modules
Linguaggi 2
- Modelli di esecuzione
del paradigma funzionale
- Paradigma Logico
- Introduzione alla Programmazione Logica: unificazione, SLD-derivations
- Semantica denotazionale della Programmazione
Logica.
- Non-deterministic Programming
- Il linguaggio Prolog (alcune implementazioni:
Sicstus, GProlog)
.
- Warren Abstract Machine (testo)
- Paradigma Logico-Funzionale
Bibliografia
-
M. Gabbrielli e S. Martini. Linguaggi di Programmazione
- Principi e Paradigmi.
McGraw-Hill. ISBN 88-386-6261-4
- P. Hudak, J. Peterson, J. Fasel. A Gentle Introduction
to Haskell 98.
1999
- L. Sterling, E. Shapiro. The art of Prolog, MIT Press, 1986.
Libri e Testi di consultazione
- Paradigma Logico
- Paradigma funzionale
- B. Wadler, Introduction to Functional Programming using Haskell.
ISBN: 0134843460, Prentice Hall PTR, 1998
- Terese, Term Rewriting
Systems.
Cambridge Tracts in Theoretical Computer Science, Vol. 55, Cambridge
University Press, 2003
- Paradigma Logico-Funzionale
Esercizi di Programmazione
Per chi volesse esercitarsi a programmare in uno dei paradigmi visti a lezione
ho scritto alcuni
esercizi a difficoltà (più o meno) crescente. Vi consiglio
fortemente di non scriverli solo su carta ma provare ad eseguirli (ci sono ottime
implementazioni free disponibili sia di Prolog che di Haskell). Quando poi siete
ragionevolmente sicuri di aver fatto un programma funzionante secondo la specifica
(che implica averlo provato a calcolatore), se volete avere i miei commenti su
quanto avete fatto (e, se siete a buon punto, avere le mie soluzioni) mandatemi
via mail quanto avete fatto oppure (anche meglio) portatemi tutto a ricevimento.
Didatticamente reputo controproducente mettervi on-line le mie soluzioni perchè altrimenti
restereste influenzati dalla mia soluzione prima di metabolizzarne una vostra.
Inoltre vi sconsiglio di fare tutti gli esercizi e mandarmi tutto in blocco alla
fine: meglio fare 2/3 esercizi e poi, prima di affrontare quelli più complessi,
verificare quanto appreso per poi trarre profitto dall'esperienza fatta nell'affrontare
i nuovi esercizi ed evitare di ripetere gli stessi errori.
Modalità d'esame
L'esame di Linguaggi 1 o 2 si compone di una prova scritta ed (eventualmente)
di una prova orale (soprattutto per discriminare le situazioni "di confine" o,
in ogni caso, "sospette" e/o dare la
possibilità di alzare il voto rispetto allo scritto).
- Prova Scritta:
- La prova scritta richiede di:
- svolgere degli esercizi analoghi a quelli presentati nelle esercitazioni
e a quelli dati per casa (inclusi quelli qui)
- rispondere ad alcune domande sugli argomenti trattati nelle lezioni.
Ogni volta che si consegna per la correzione una prova scritta si cancella
il voto precedente.
-
- Iscrizioni Necessarie!!!
- Si ricorda che sia per potersi presentare alle prova scritta che a quella
orale è necessaria l'iscrizione elettronica (mediante il sito www.sindy.uniud.it).
- Prova Orale (se necessaria) e Registrazione Voto Esame:
- La prova orale consiste nella discussione di alcuni degli argomenti trattati
a lezione.
Per poter sostenere la prova orale o registrare il voto dell'esame (se
la prova orale non fosse necessaria e non si intendesse sostenerla), è necessario
aver superato una prova scritta da meno di un anno.
Se durante la prova scritta non fosse stata fissata una data per l'orale
basta accordarsi via mail.
Nel caso la prova orale non venga superata o si decida di non accettare
il voto, lo scritto rimane valido al fine di sostenere un secondo
esame orale.
La registrazione viene eseguita on-line quindi qualora (potendo) si volesse
registrare il voto proposto ricevuto via Sindy basta accettarlo, da Sindy
stesso, e a quel punto verrà automaticamente registrato.
Sia alla prova scritta, quanto quella orale, è ammesso l'uso di qualsiasi
materiale didattico (libri, appunti, soluzioni di vecchi compiti) purché
cartaceo.
Testi degli esami passati
Potete inoltre scaricare in formato elettronico (parte dei) testi e/o soluzioni
dei compiti passati:
Esami di Linguaggi 1
- testo e (alcune) soluzioni del
compito del 21/09/2006
- testo e (alcune) soluzioni del
compito del 07/09/2006
- testo e (alcune) soluzioni del
compito del 10/07/2006
- testo e soluzioni del
compito del 06/04/2006
- testo e soluzioni del
compito del 27/03/2006
- testo e soluzioni del
compito del 13/01/2006
- testo e soluzioni del
compito del 21/12/2005
- testo e soluzioni del
compito del 08/07/2005
- testo e soluzioni del
compito del 23/03/2005
- testo e soluzioni (+PCODE) del
compito del 23/06/2004
- testo e soluzioni
(+PCODE) del
compito del 06/07/2004
- testo (+PCODE) del
compito del 08/09/2004
- testo (+PCODE) del
2/12/2004
- esercizio di prolog del
16/12/2004
Esami di Linguaggi 2
- testo e (alcune) soluzioni del
compito del 07/09/2006
- testo e (alcune) soluzioni del
compito del 10/07/2006
- testo e soluzioni del
compito del 06/04/2006
- testo e soluzioni del
compito del 27/03/2006
- testo e soluzioni del
compito del 08/07/2005
- testo e soluzioni del
compito del 11/04/2005
- testo e soluzioni del
compito del 23/03/2005
- testo e soluzioni
(+WAM) del
compito del 23/06/2004
- testo e soluzioni
(+WAM) del
compito del 06/07/2004
- testo (+WAM) del
compito del 08/09/2004