Linguaggi di programmazione

Corso di laurea in Informatica

Finalità del corso
Programma del CORSO
LIBRI di TESTO
LUCIDI presentati a lezione
MODALITÀ di svolgimento dell'esame
Esempi di TEMI D'ESAME

Docente

Finalità del corso

Scopo del corso è approfondire le conoscenze relative ai linguaggi di programmazione. Usando coma base le conoscenze già acquisite, negli anni passati, su diversi linguaggi di programmazione, vengono presentate nozioni e principi "universali" che guidano la definizione e l'implementazione dei moderni linguaggi di programmazione. Acquisire una solida base di conoscenze generali permette di muoversi con una certa disinvoltura tra i vari linguaggi di programmazione e permette di apprendere in maniera rapida ed efficace nuovi linguaggi. La conoscenza degli aspetti implementativi permette di avere un stima del costo di esecuzione dei diversi costrutti di un linguaggio, e quindi fornisce le informazioni base per la scritture di codice efficiente. Nel corso particolare risalto viene dato al paradigma di programmazione funzionale per le sue caratteristiche di pulizia ed espressività. Viene presentato il linguaggio funzionale Haskell e si mostra quindi come meccanismi quali high-order e non-determinismo possano essere sfruttate per scrivere codice compatto, elegante e flessibile (riutilizzabile).

Programma di massima del CORSO

Libri di testo

Testi adottati

Altri documenti e testi di possibile consultazione

Gli argomenti trattati nel corso sono reperibili su diversi libri di testo, piuttosto simili tra di loro per contenuti e struttura.

LUCIDI presentati a lezione e riferimenti ai testi

Introduzione
Lucidi in formato pdf: [1 per pagina], [4 per pagina].
Pag. 1-5,9-24, 42-47. da [GM].
Sintassi
Lucidi in formato pdf: [1 per pagina], [4 per pagina].
Pag. 25-42, 47-49, 51-57, 71-76, 83-85, 90-92, 100-101, 108-110, 129-133 da [GM].
Nomi e ambiente
Lucidi in formato pdf: [1 per pagina], [4 per pagina].
Pag. 143-161, 354-356 da [GM].
Gestione della memoria
Lucidi in formato pdf: [1 per pagina], [4 per pagina].
Capito 7 da [GM].
Strutture di controllo
Lucidi in formato pdf: [1 per pagina], [4 per pagina].
Capitolo 8 da [GM].
Astrarre sul controllo
Lucidi in formato pdf: [1 per pagina], [4 per pagina].
Capitolo 9 da [GM].
Astrarre sui dati
Lucidi in formato pdf: [1 per pagina], [4 per pagina].
Pag. 279-329 da [GM].
Tipi di dati astratti
Lucidi in formato pdf: [1 per pagina], [4 per pagina].
Pag. 347-354 da [GM].
Paradigma ad oggetti
Lucidi in formato pdf: [1 per pagina], [4 per pagina].
Pag. 359-384 da [GM].
Paradigma funzionale
Lucidi in formato pdf: [1 per pagina], [4 per pagina],
Codice presentato a lezione.
Pag. 415-419 da [GM]. Tutto "A gentle introduction to Haskell '98" tranne le sezioni 4.4 e 13. Gli argomenti della sezione 9.3 sono stati svolto usando un diverso esempio guida.
Analizzatori lessicali e sintattici in Haskell
Lucidi in formato pdf: [1 per pagina], [4 per pagina],
Esempi di codice.
Da sezione 2 a sezione 5.3.3 nel manuale Alex [Al]. Da sezione 2.1 a sezione 2.4 nel manuale Happy [Ha].
Sistemi di assegnazione di tipo
Lucidi in formato pdf: [1 per pagina], [4 per pagina].
Dal capitolo "Type System" [Car], le sezioni 2-4. Gli argomenti trattati nella sezioni 5-6 sono stati presentati in maniera sintetica, usando sistemi di tipi diversi. È consigliata la lettura della sezione 1 che costituisce un interessante introduzione ai sistemi di tipi.
Concorrenza
Lucidi in formato pdf: [1 per pagina], [4 per pagina].
Pag. 493-525 da [GM].
Alcuni esercizi presentati a lezione
Lucidi in formato pdf: [1 per pagina], [4 per pagina],
Codice presentato a lezione.

Modalità di svolgimento dell'esame

L'esame si compone di una prova scritta e di una prova orale. Per poter accedere all'esame è necessario svolgere, a casa nei tempi desiderati, una serie di esercizi. Una breve presentazione di alcune delle soluzione proposte potrà essere richiesta durante la prova orale.
Esercizi a casa:
Per completare la preparazione delle parti di programma relative alla programmazione Haskell e all'uso degli strumenti software Alex ed Happy viene chiesto allo studente di svolgere per conto proprio una serie di esercizi di programmazione. Nel dettaglio:
Haskell:
dall'elenco, reperibile nella pagina web del corso, nel sito e-learning, cartella "Materiale didattico", file "Esercizi-di-Programmazione-Haskell.pdf", svolgere almeno una ventina di esercizi, possibilmente 2 per ogni categoria. Naturalmente viene valutato positivamente aver risolto esercizi più avanzati in ogni categoria (vedi le note introduttive nell'elenco. È comunque sufficiente risolvere gli esercizi più semplice, o versione semplificate degli esercizi proposti. Nota. Per alcuni esercizi nell'elenco (vedi 2.7) si richiede l'uso di tecniche non spiegate a lezione, queste richieste possono essere ignorate.
Analizzatori lessicali e sintattici:
Vedi elenco
Prova Scritta:
L'esame scritto prevede:
  • lo svolgimento di una serie di esercizi analoghi a quelli presentati durante le esercitazioni e reperibili nell'ultimo dei lucidi elencati di sopra. Più nel dettaglio l'esame prevede:
    • un esercizio sulle grammatiche: da una specifica definire una grammatica formale, e da questa una serie di regole per la costruzione di un analizzatore lessicale o sintattico, con gli strumenti Lex, Alex, Yacc, Happy.
    • uno o due esercizi sullo scoping e sullo stack di attivazione, gli esercizi consistono nel determinare il risultato della computazione di un semplice programma imperativo, mostrando come variano stack di attivazione ed valori assegnati alle variabili
    • un esercizio di programmazione in Haskell
    • un esercizio di derivazione formale del tipo di un espressione
    • un eventuale esercizio sulla rappresentazione dei tipi di dato
  • la risposta ad una serie di domande riguardanti gli argomenti trattati a lezione.
Durante le prove scritte non è possibile consultare il libro di testo o gli appunti né utilizzare calcolatrici tascabili.
Prova Orale:
La prova orale, obbligatoria per tutti, solitamente consiste in poche e brevi domande sugli argomenti trattati a lezione. Per poter sostenere la prova orale è necessario aver superato l'esame scritto con un voto maggiore o uguale a 16. Si richiede inoltre che la prova scritta sia stata superata da meno di un anno. Nel caso la prova orale non venga superata o si decida di non accettare il voto, la prova scritta resta valida, ed è quindi possibile ripetere la sola prova orale.
Nota:
L'iscrizione all'esame su Esse3 è necessaria anche per motivi organizzativi, in questo senso, iscriversi all'esame e non presentarsi crea quasi gli stessi inconvenienti di presentarsi all'esame senza essersi iscritti. Pertanto chi rinunciasse a presentarsi ad una prova d'esame è caldamente invitato ad annullare la propria iscrizione su Esse3.
Gli studenti che non dispongano di un account su Esse3 possono iscriversi mandandomi un messaggio di posta elettronica all'indirizzo "pietro.digianantonio at uniud.it".
Periodo di validità delle prove:
Le prove scritte mantengono la loro validità per un anno, ossia una volta superato lo scritto lo studente ha un anno di tempo per completare l'esame sostenendo le rimanenti prove.
Esami in sospeso dagli anni passati
Per chi si trovasse nella situazione di aver già svolto negli anni passati il progetto, o parte dei esso, per l'esame di Linguaggi di Programmazione valgono le seguenti regole:
  • Per chi ha terminato il progetto, in tutte le sue parti, con voto finale, valgono i diritti acquisiti, ossia può completare l'esame facendo solo lo scritto.
  • Chi ha terminato il progetto, in tutte le sue parti, ma con parti non ancora valutate, potrà completare l'esame facendo lo scritto e un orale che verterà sulla discussione del progetto, in particolare delle parti non ancora valutate.
  • Chi ha completato solo una parte del progetto può completerà l'esame saltando la parte relativa ai compiti per casa. L'aver svolto parte del progetto e il voto dello stesso, saranno elementi presi in considerazione per determinare il voto finale.
Chi avesse invece un voto dello scritto in sospeso, può completare l'esame con un orale. Se c'è un progetto già assegnato e svolto completamente, l'esame orale verterà sull'esposizione del progetto, se il progetto è stato svolto solo in parte l'esame orale verterà anche su una parte del programma, da concordare. Se nessuna parte del progetto è stata svolta, l'esame orale sarà generico su tutto il programma, e la parte di esercizi per casa dovrà essere svolta.
Tutti coloro che vogliono sfruttare queste possibilità dovrebbero contattarmi, anche via e-mail, almeno dieci prima dell'esame, descrivendo esattamente la loro situazione e mandandomi eventualmente le parti di progetto non ancora valutate.

TEMI D'ESAME proposti in appeli precedenti

  • Testi esame (lista di file pdf)