Home | Search | Help  
Home Page Università di Genova

Corso di Linguaggi di Programmazione

Docenti: Elena Zucca, Giovanni Lagorio, Antonio Cuni

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

Prova Scritta

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

Prova Orale

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