LINGUAGGI DI PROGRAMMAZIONE
(obiettivi)
Obiettivi generali: Il corso illustra i fondamenti dei linguaggi di programmazione. Particolare attenzione viene dedicata alla semantica statica e dinamica dei linguaggi (teoria dei tipi, semantica operazionale ed assiomatica) ed agli strumenti formali per la specifica e la verifica del software.
Obiettivi specifici: Approfondimento sulle algebre induttive come fondamento di sintassi astratta, strutture dati e semplici logiche (equazionali) di programmi. Cenni sulla co-induzione come fondamento di analisi di processi concorrenti e strutture lazy. Confronto fra linguaggi lazy e eager, statici e dinamici, nel contesto di diversi paradigmi di programmazione: imperativo, funzionale, ad oggetti. Teoria dei tipi, con particolare attenzione al polimorfismo parametrico (alla ML) e di sottoclasse (alla Java).
Conoscenze e comprensione: Alla fine del corso lo studente avrà acquisito conoscenze fondazionali relative ai linguaggi di programmazione e ai principali paradigmi di programmazione, e sarà in grado di inquadrare in una mappa concettuale coerente alcuni fra le principali aree di studio dell’informatica teorica, comprendendone le interconnessioni.
Applicazione di conoscenza e comprensione: Alla fine del corso lo studente sarà in grado di orientarsi fra i diversi paradigmi della programmazione, con particolare attenzione alla programmazione funzionale. Avrà acquisito una conoscenza di base del linguaggio funzionale SML e della sua teoria dei tipi, nonchè dell’uso dei metodi formali.
Capacità di giudizio: Gli studenti acquisiranno strumenti culturali per sviluppare software di qualità e per comprendere ed inquadrare le tendenze emergenti dei linguaggi moderni.
Capacità di comunicazione: Gli studenti impareranno ad usare il linguaggio della matematica e della logica per descrivere, sviluppare ed analizzare il software, e ad integrare l’approccio formale con un’esposizione intuitiva delle idee.
Capacità di apprendimento: L’uso di strumenti matematici nella teoria e nella pratica della programmazione sviluppa capacità logiche e consapevolezza della complessità della materia di studio.
|