TECNICHE DI PROGRAMMAZIONE FUNZIONALE E IMPERATIVA
(obiettivi)
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).
|
Codice
|
10589652 |
Lingua
|
ITA |
Tipo di attestato
|
Attestato di profitto |
Crediti
|
6
|
Settore scientifico disciplinare
|
INF/01
|
Ore Aula
|
24
|
Ore Esercitazioni
|
36
|
Ore Studio
|
-
|
Attività formativa
|
Attività formative affini ed integrative
|
Canale Unico
Docente
|
SALVO IVANO
(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.
Testi: R. Bird: "Thinking Functionally with Haskell". Cambridge University Press, 2015. B.W.Kernigham, D. Ritchie: "The C Programming Language" (2nd edition), Pearson, 1988. Dispense del docente.
|
Date di inizio e termine delle attività didattiche
|
- |
Date degli appelli
|
Date degli appelli d'esame
|
Modalità di erogazione
|
Tradizionale
|
Modalità di frequenza
|
Non obbligatoria
|
Metodi di valutazione
|
Prova scritta
Prova orale
|
|
|