Corso di Linguaggi di Programmazione
Guida all'esame
L'esame consta di una
prova scritta e di una prova
orale (facoltativa per
chi ha ottenuto almeno 18 allo scritto, necessaria per chi ha ottenuto
almeno 15 e meno di 18).
La prova scritta ha lo scopo di verificare che il candidato abbia
acquisito la capacità di utilizzare gli strumenti formali e i paradigmi di
programmazione illustrati nel corso. Diamo nel seguito qualche esempio di
esercizio proponibile in una prova scritta.
- Definizione ed implementazione dei linguaggi di programmazione
- Data una grammatica cf, trovare il linguaggio generato; dire se una
stringa appartiene o meno al linguaggio generato; dire se la grammatica è ambigua;
trovare una grammatica non ambigua equivalente; descrivere la sintassi
astratta (segnatura) o l'algebra
sintattica corrispondente. Dire quali sono le occorrenze di variabili leganti, libere e legate in un termine del linguaggio didattico.
- Modificare e/o estendere l'implementazione dell'interprete per il
linguaggio didattico sviluppato durante le esercitazioni di laboratorio.
La modifica e/o estensione dovrà essere guidata da una definizione
formale, ad esempio se si modifica/estende il type-checker si dovrà anche
modificare/estendere la definizione formale della
semantica statica.
- Paradigma object-oriented
- Dato un frammento di programma Java, descrivere il risultato
dell'esecuzione.
-
Data una specifica, definire in Java una o più classi o interfacce che
la implementino.
- Paradigma funzionale
-
Data una specifica, definire in Caml una o più funzioni che la implementino.
-
Specializzare/adattare una funzione vista a lezione in modo tale che risolva un
problema dato.
-
Dire qual è il tipo più generale di un'espressione
o dare un'espressione che abbia un tipo più generale prefissato.
Sono disponibili i testi e le soluzioni delle precedenti prove scritte (attenzione: fino all'a.a. 00/01 sono relative al corso del vecchio ordinamento):
La prova orale ha lo scopo di verificare che il candidato abbia
acquisito una adeguata comprensione dei concetti illustrati nel corso.
Oltre ad esercizi simili a quelli proponibili nello scritto, la prova orale
potrà includere domande del tipo esemplificato nel seguito.
- Dare la definizione formale, e saper fare esempi, di grammatica cf, derivazione, linguaggio generato, albero
di derivazione, ambiguità, segnatura ed algebra sintattica associata. Dire quali sono le
tecniche per l'eliminazione dell'ambiguità. Illustrare il significato
semantico dell'ambiguità. Spiegare in che senso una grammatica è un
caso particolare di definizione induttiva.
- Spiegare cosa si intende per semantica statica
di un linguaggio. Illustrare le nozioni di scope, ambiente statico,
identificatori liberi e legati.
- Spiegare cosa si intende per semantica dinamica di un linguaggio.
- Illustrare le diverse nozioni di uguaglianza e di copia esistenti in un linguaggio
object-oriented. Spiegare cosa si intende per tipo statico e dinamico.
Illustrare la differenza tra la risoluzione dell'overriding e quella dell'overloading
in Java. Dire quali sono le regole di visibilità in Java. Illustrare i vantaggi della programmazione
object-oriented. Spiegare il meccanismo dei costruttori in Java. Spiegare il meccanismo delle eccezioni in Java. Spiegare
l'uso di this e super. Illustrare le regole relative al casting.
- Descrivere le dichiarazioni di tipo in Caml. Spiegare cos'è una definizione
per pattern matching. Spiegare le nozioni di polimorfismo, funzione
higher-order, currying.
Ritorno alla pagina precedente
Per suggerimenti e commenti si prega di scrivere a: Elena Zucca zucca@disi.unige.it
Ultima modifica: 10 ottobre 2007
|