TECNICHE DI PROGRAMMAZIONE FUNZIONALE E IMPERATIVA

Obiettivi formativi

Obiettivi generali: Apprendimento del paradigma di programmazione funzionale e di aspetti avanzati di programmazione imperativa. Studio comparato di diversi paradigmi di programmazione (imperativo, funzionale e a oggetti) per sviluppare un senso critico nell'apprendimento e valutazione dei linguaggi di programmazione. Obiettivi specifici: Conoscenza e Comprensione: Aspetti avanzati di programmazione C (in particolare uso di puntatori espliciti e (de)allocazione dinamica di memoria, valutazione della complessità  concreta dei programmi). Aspetti base ed avanzati di programmazione funzionale in Haskell (in particolare tipi polimorfi, funzionali di ordine superiore, laziness). Applicare Conoscenza e Comprensione: Applicare la metodologie specifiche di diversi paradigmi di programmazione alla soluzione dei problemi. Capacità  Critiche e di Giudizio: Lo studio comparato dei paradigmi di programmazione permette di valutare ad esempio quale sia il linguaggio più adatto per risolvere un certo problema o sviluppare un progetto software. Le tecniche di ragionamento sui programmi possono guidare sia il testing che lo sviluppo dei programmi. Inoltre, lo studente dovrebbe acquisire strumenti necessari per valutare criticamente altri linguaggi di programmazione. Capacità  Comunicative Lo studente è stimolato, soprattutto nella presentazione da fare a fine corso, a esporre concisamente ma in modo preciso le idee necessarie allo sviluppo di una brillante soluzione a un problema computazionale ed anche l'analisi di un programma. Capacità  di Apprendimento: Lo studio comparato di diversi paradigmi di programmazione stimola la capacità di apprendimento di altri linguaggi di programmazione, dando allo studente gli strumenti per distinguere gli aspetti caratterizzanti di un linguaggio di programmazione (logica del core language, come ad esempio passaggio di parametri, sistema dei tipi, semantica dei comandi) da quelli più strettamente tecnici (come imparare a usare librerie e strumenti di sviluppo, come IDE e debugger).

Canale 1
IVANO SALVO Scheda docente

Programmi - Frequenza - Esami

Programma
Parte 1: Programmazione Funzionale. 1.1) Concetti base di Haskell: tipi, funzioni, definizioni ricorsive. 1.2) Classi, tipi definiti dall'utente, funzioni di ordine superiore. 1.3) Call-by-name e valutazione lazy. Tipi di dato infiniti. 1.4) Trattamento di aspetti non-funzionali (IO, eccezioni, stato, etc.) in Haskell: Funtori, Applicativi e Monadi. 1.5) Sviluppo di programmi corretti e trasformazioni di programmi: ragionamento equazionale. Parte 2: Programmazione Imperativa. 2.1) Ripasso di programmazione base in C. 2.2) Gestione esplicita della memoria in C, alias, side-effects. 2.3) Programmazione Funzionale in C. 2.4) Sviluppo di Programmi corretti in C: asserzioni logiche. Limiti di questa metodologia nella programmazione imperativa. Parte 3: Perle di Programmazione Funzionale e Imperativa.
Prerequisiti
Concetti ed esperienza di programmazione imperativa e/o oggetti (Java, Python, etc.)
Testi di riferimento
Testi: R. Bird: "Thinking Functionally with Haskell". Cambridge University Press, 2015. G. Hutton: Programming in Haskell (2nd edition). Cambridge University Press (2016). B.W.Kernigham, D. Ritchie: "The C Programming Language" (2nd edition), Pearson, 1988. Dispense del docente.
Frequenza
La frequenza è fortemente raccomandata.
Modalità di esame
L'esame consiste di una prova scritta/homework e di una presentazione orale. La prova scritta valuta le capacità di problem solving e lo stile di programmazione acquisite, mentre la presentazione orale la capacità di esporre un piccolo progetto di programmazione oppure un problema e la sua soluzione in modo sintetico ed efficace.
Bibliografia
Testi di consultazione e ispirazione: E. W. Dijkstra: "A Discipline of Programming", Prentice Hall, 1976. A. Oram, G. Wilson (eds.): "Beautiful Code", O'Reilly, 2008. R. Bird: "Pearls of Functional Algorithm Design", Cambridge University Press, 2010. J. Bentley: "Programming Pearls" (1986) and "More Programming Pearls" (1988), Addison Wesley. R. Bird, P. Wadler: "Introduction to Functional Programming", Prentice Hall (1988).
Modalità di erogazione
La modalità di svolgimento è tradizionale in aula con slides (lezioni) e lavagna (esercitazioni).
  • Codice insegnamento10589652
  • Anno accademico2025/2026
  • CorsoInformatica
  • CurriculumMetodologico
  • Anno3º anno
  • Semestre2º semestre
  • SSDINF/01
  • CFU6