- Docente: Luca Padovani
- Crediti formativi: 6
- SSD: INF/01
- Lingua di insegnamento: Italiano
- Modalità didattica: Convenzionale - Lezioni in presenza
- Campus: Bologna
- Corso: Laurea Magistrale in Informatica (cod. 5898)
Conoscenze e abilità da conseguire
Negli ultimi anni, anche a seguito dell'avvento dei processori multicore e della necessità di trovare linguaggi di programmazione che ne semplifichino lo sfruttamento, si osserva un rinnovato fermento riguardo allo sviluppo di nuovi linguaggi di programmazione. Go, Scala, Erlang, Clojure, Rust sono alcuni esempi di linguaggi che stanno attirando l'interesse della comunità industriale e che attingono sia da nuovi paradigmi di programmazione, sia da paradigmi più tradizionali, ma precedentemente di nicchia, che stanno aumentando la loro visibilità. Al termine del corso lo studente sarà a conoscenza dei principali paradigmi emergenti, sapendone valutare criticamente vantaggi e svantaggi, e avrà acquisito nuove competenze di programmazione.
Contenuti
L’insegnamento presenta diversi linguaggi di programmazione mettendo in risalto i princìpi, le peculiarità, le caratteristiche che ne costituiscono punti di forza, e gli aspetti implementativi interessanti. Un tema portante e comune a tutti gli argomenti affrontati riguarda il ruolo dei tipi nel concepire e utilizzare costrutti e forme di programmazione che consentano la scrittura di codice robusto, facilmente componibile e con garanzie di correttezza. Gli argomenti affrontati comprendono:
- Programmazione orientata agli oggetti senza classi
- Limiti del paradigma di programmazione a oggetti
- Trait in Go e in Rust, classi di tipo in Haskell
- Caso di studio: testing di codice con QuickCheck
- Approcci composizionali alla programmazione con effetti collaterali
- Origine delle monadi e monadi classiche (computazioni parziali, stato, I/O)
- Trasformazioni di monadi
- Casi di studio: parsing non deterministico, programmazione concorrente con Software Transactional Memory
- Programmazione certificata
- Dai tipi parametrici ai tipi dipendenti
- Casi di studio: programmazione certificata su numeri, liste, vettori dimensionati
Testi/Bibliografia
Il docente fornirà i lucidi e programmi presentati a lezione nonché puntatori ad articoli, manuali e altro materiale disponibile on-line.
Metodi didattici
Lezioni frontali con presentazione di slide e sviluppo interattivo di codice guidato dal docente. Esercizi da risolvere a casa individualmente o in gruppo.
Modalità di verifica e valutazione dell'apprendimento
L'esame è costituito da una prova scritta che si svolge individualmente su carta o al calcolatore il giorno dell’esame senza l’ausilio di manuali, materiale didattico o appunti personali. La prova comprende domande aperte ed esercizi di programmazione nei linguaggi presentati.
La prova è valutata con un punteggio da 0 a 31 ed è ritenuta sufficiente se il punteggio è almeno 18.
In caso di svolgimento dell’esame in laboratorio, si richiede lo svolgimento in modalità e-learning da parte di tutti gli studenti dei moduli 1 e 2 del corso di sicurezza.
Strumenti a supporto della didattica
- Ambienti di programmazione per vari linguaggi
- Slide
- Esempi di codice
- Esercizi di programmazione con soluzioni
Tutto il materiale didattico sarà reso disponibile su Virtuale.
Orario di ricevimento
Consulta il sito web di Luca Padovani