Titolo insegnamento in inglese: Programming Languages I
Lingua: italiano
Insegnamento: Linguaggi di Programmazione I
Anno di corso: II
CFU: 6
Semestre: 2
Docenti:
- Canale 1: Piero Bonatti
- Canale 2: Marco Faella
Insegnamenti propedeutici previsti
Programmazione, Laboratorio di Programmazione
Obiettivi Formativi
Fornire gli elementi tecnici per classificare i numerosissimi linguaggi di programmazione esistenti, rispetto a paradigma di computazione, caratteristiche del sistema di tipi, modalità di gestione della memoria, controllo di flusso e supporto del parallelismo. Cominciare a rendere gli studenti "utenti intelligenti" dei linguaggi di programmazione, cioè capaci di scegliere il paradigma più adatto al contesto applicativo dato, di sfruttare efficacemente le funzionalità offerte dai linguaggi e di apprendere rapidamente nuovi linguaggi. Il corso fornisce un trattamento approfondito del core di Java ed elementi di linguaggi funzionali.
Contenuti
Introduzione ai linguaggi di programmazione. Cenni storici. Richiami degli elementi informatica teorica rilevanti per il corso. Cenni ai paradigmi di programmazione. Compilazione e interpretazione dei linguaggi. Supporto a run-time e gestione della memoria. Modalità di passaggio dei parametri. Strutturazione dei dati e controllo dei tipi. Tipi elementari e user defined. Encapsulation: tipi di dato astratti, moduli, classi. Sistemi di tipo nei linguaggi ad oggetti: sottotipi ed ereditarietà; compatibilità tra tipi. Java: Costrutti di controllo e sistema di tipi in dettaglio. Tipi parametrici (programmazione generica). Strutturazione della computazione: gestione delle eccezioni. Gestione della memoria in Java (inclusi costruttori, stringhe, garbage collection e gestione dell'ambiente non locale in presenza di classi interne). Parallelismo in Java. Costrutti funzionali di base, con esempi in ML e/o in Python
Modalità didattiche
Lezioni frontali. Esercitazioni.
Modalità di esame
L'esame si articola in prova scritta e orale.
La prova scritta è a risposta multipla e libera.