- Oggetto:
- Oggetto:
Linguaggi e Paradigmi di Programmazione
- Oggetto:
Programming languages and paradigms
- Oggetto:
Anno accademico 2023/2024
- Codice dell'attività didattica
- MFN1354
- Docenti
- Viviana Bono (Docente)
Luca Roversi (Docente) - Corso di studi
- [008707] Laurea in Informatica
- Anno
- 3° anno
- Periodo didattico
- Primo semestre
- Tipologia
- A scelta dello studente
- Crediti/Valenza
- 6 CFU - Numero di ore - Number of hours: 32 (in aula) + 20 (in laboratorio)
- SSD dell'attività didattica
- INF/01 - informatica
- Modalità di erogazione
- Tradizionale
- Lingua di insegnamento
- Italiano
- Modalità di frequenza
- Facoltativa
- Tipologia d'esame
- Scritto
- Prerequisiti
-
Conoscenza delle basi della matematica discreta e della programmazione. Insegnamenti propedeutici (forniscono le competenze attese in ingresso): Matematica discreta e logica; Programmazione 1 e 2.Prerequisites: Basic knowledge of discrete mathematics and of programming languages. Preparatory Courses (providing the expected entry skills): Matematica discreta e logica; Programmazione 1 e 2.
- Mutuato da
- Linguaggi e Paradigmi di Programmazione (MFN0610)Corso di laurea in Informatica
- Linguaggi e Paradigmi di Programmazione (MFN0610)
- Oggetto:
Sommario insegnamento
- Oggetto:
Obiettivi formativi
L'insegnamento propone un'introduzione al paradigma di programmazione funzionale, in linea con gli Obiettivi formativi specifici del CdS in Informatica (L31), ampliando e approfondendo tematiche necessarie a programmare con paradigmi diversi da quello imperativo e a maturare a livello sia metodologico, sia applicativo, il concetto generale di sistema software affidabile.
I 6 CFU di base sono strutturati in due parti:
- La prima parte si propone di fornire un'introduzione al paradigma di programmazione funzionale, ai sistemi di tipi per i linguaggi funzionali con i relativi algoritmi di inferenza e alla dimostrazione di correttezza di programmi funzionali.
- La seconda parte illustra l'efficacia delle tecniche di programmazione funzionale apprese quando applicate a Java, linguaggio multi-paradigma che a partire dalla versione 8 ha incorporato costrutti tipici della programmazione funzionale, in particolare le lambda espressioni.
The course offers an introduction to the functional programming paradigm, in line with the Specific Educational Objectives of the Computer Science degree program (L31), expanding and deepening the necessary topics to program with paradigms different from the imperative one and to mature, both methodologically and applicatively, the general concept of 'reliable software system'.
The 6 basic CFUs are structured in two parts:
- The first part aims to provide an introduction to the functional programming paradigm, type systems for functional languages with their related inference algorithms, and the proof of correctness of functional programs.
- The second part illustrates the effectiveness of the learned functional programming techniques when applied to Java, a multi-paradigm language that has incorporated constructs typical of functional programming since version 8, in particular lambda expressions.
- Oggetto:
Risultati dell'apprendimento attesi
CONOSCENZA E CAPACITÀ DI COMPRENSIONE. Riguardo ai 6 CFU di base, la conoscenza è relativa alle principali tecniche di programmazione nel paradigma funzionale, anche in ambiti multi-paradigma. La capacità di comprensione permetterà di modellare algoritmi basati sui tipici modelli di programmazione funzionale, e di manipolare strutture dati basate su liste.
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE. Si realizza, soddisfacendo simultaneamente due vincoli: (1) programmando in accordo col paradigma funzionale; (2) sviluppando (semi)automaticamente la certificazione formale della qualità.
AUTONOMIA DI GIUDIZIO. Si realizza come conseguenza di conoscenza, capacità di comprensione e applicazione di metodi e concetti specifici del paradigma di programmazione funzionale, in concomitanza con la necessita di certificare la qualità, sotto forma di dimostrazioni formali di correttezza, del software realizzato.
ABILITÀ COMUNICATIVE. Si realizza innalzando l'abilità media di descrivere algoritmi e loro proprietà in modo formale, innanzitutto in forma scritta, per mezzo degli strumenti di sviluppo tipici del paradigma di programmazione funzionale e degli strumenti di certificazione, e, conseguentemente, in forma orale.
CAPACITÀ DI APPRENDIMENTO. La capacità di apprendimento migliora, come conseguenza del cambio di mentalità necessario per progettare algoritmi in accordo col paradigma funzionale, e nel realizzarli sotto forma di software certificato; la maggiore flessibilità come conseguenza del cambio di mentalità si traduce in maggiore autonomia di apprendimento e di autovalutazione, aspetti necessari ad intraprendere, eventualmente, studi successivi.
KNOWLEDGE AND UNDERSTANDING. With respect to the 6 basic CFUs, knowledge concerns the main programming techniques in the functional paradigm, also in multi-paradigm contexts. The ability to understand will enable to model algorithms based on typical functional programming patterns and to manipulate data structures based on lists.
ABILITY TO APPLY KNOWLEDGE AND UNDERSTANDING. It is achieved by simultaneously satisfying two constraints: (1) programming in accordance with the functional paradigm; (2) developing (semi-)automatically formal certification of quality.
AUTONOMY OF JUDGEMENT. It is achieved as a consequence of knowledge, the ability to understand and apply specific methods and concepts of the functional programming paradigm, in conjunction with the need to certify the quality of the software produced in the form of formal proof of correctness.
COMMUNICATION SKILLS. They are enhanced by improving the average ability to describe algorithms and their properties in a formal manner, primarily in written form, through typical tools of the functional programming paradigm and certification tools, and consequently in oral form.
ABILITY TO LEARN. The ability to learn improves as a consequence of the necessary change of mindset to design algorithms in accordance with the functional paradigm and to realize them in the form of certified software. The greater flexibility resulting from this change of mindset translates into greater autonomy in learning and self-evaluation, aspects necessary to undertake eventual further studies.
- Oggetto:
Modalità di insegnamento
Lezioni di teoria con presentazione di materiale didattico alla lavagna o equivalente digitale. Lezioni di laboratorio con sviluppo assistito di programmi. Il materiale didattico sarà disponibile on-line sulla piattaforma di supporto relativo all'insegnamento.
Theory lessons with presentation of teaching material on the blackboard or equivalent digital tool. Laboratory lessons with assisted development of programs. The teaching material will be available online on the teaching support platform.
- Oggetto:
Modalità di verifica dell'apprendimento
Una prima parte d'esame è comune ai 6 CFU di base e ai 3 CFU facoltativi. È strutturata come segue:
- prova pratica con esercizi di programmazione da svolgere al calcolatore;
- prova scritta con esercizi sugli argomenti di teoria dell'insegnamento;
- eventuale prova orale: discussione su quanto svolto nelle due prove menzionate, risposte a domande su argomenti trattati durante l'insegnamento.
La parte d'esame per i 3 CFU facoltativi ha struttura analoga alla precedente, ma su argomenti relativi al programma didattico sviluppato.
I voti sono espressi in 30-esimi sia per i 6 CFU di base, sia per i 3 CFU facoltativi. Il voto finale per chi sosterrà l'esame corrispondente a 6+3 CFU sarà la media pesata tra il voto relativo alla parte d'esame per i 6 CFU di base (peso 2/3) e quello relativo alla parte d'esame per i 3 CFU facoltativi (peso 1/3).
The first part of the exam is common to both the 6 CFU and the 3 CFU optional courses. It is structured as follows:
- Practical test with programming exercises to be performed on the computer;
- Written test with exercises on the theory topics covered in the course;
- Possible oral test: discussion on what has been done in the two tests mentioned above, answering questions on topics covered during the course.
The exam part for the 3 CFU optional course has a similar structure to the previous one, but on topics related to the developed teaching program.
Grades are expressed in 30ths both for the 6 CFU and the 3 CFU optional courses. The final grade for those who take the exam for 6+3 CFU will be the weighted average between the grade for the first part of the exam for the 6 CFU (weight 2/3) and that for the 3 CFU optional courses (weight 1/3).
- Oggetto:
Programma
Nel seguente elenco di argomenti non viene fatta distinzione tra argomenti svolti in aula ed argomenti svolti in laboratorio, perché strettamente connessi.
Relativamente ai 6 CFU di base, sono previsti i seguenti temi:
- Breve storia dei linguaggi di programmazione, con particolare riferimento a quelli funzionali.
- Calcolo come riscrittura: le basi dell'esecuzione dei programmi funzionali.
- Espressioni e loro tipi. Tipi di base.
- Progettazione di programmi funzionali. Tecniche di ricorsione.
- Liste e funzioni del prim'ordine su liste.
- Cenni a dimostrazioni induttive di correttezza di programmi funzionali.
- L'idea di astrazione funzionale. Funzioni di ordine superiore e pattern di trasformazione.
- Alberi e tipi algebrici generali.
- Introduzione alla programmazione funzionale in Java.
In the following list of topics, no distinction is made between topics covered in class and those covered in the lab, as they are closely related.
Regarding the 6 basic CFUs, the following topics are covered:
- Brief history of programming languages, with particular reference to functional ones.
- Computation as rewriting: the basics of executing functional programs.
- Expressions and their types. Basic types.
- Design of functional programs. Recursion techniques.
- Lists and first-order functions on lists.
- Introduction to inductive proofs of correctness of functional programs.
- The idea of functional abstraction. Higher-order functions and transformation patterns.
- Trees and general algebraic types.
- Introduction to functional programming in Java.
Testi consigliati e bibliografia
- Oggetto:
- Libro
- Titolo:
Introduction to the Theory of Programming Languages- Anno pubblicazione:
2011- Editore:
Springer- Autore:
Gilles Dowek, Jean-Jacques Lévy- Obbligatorio:
- No
- Oggetto:
- Libro
- Titolo:
Haskell: the Craft of Functional Programming, Third edition- Anno pubblicazione:
2011- Editore:
Addison-Wesley- Autore:
Simon Thompson- Obbligatorio:
- No
- Oggetto:
- Libro
- Titolo:
Lambdas, streams, functional and reactive programming- Anno pubblicazione:
2018- Editore:
Manning Publications- Autore:
Raoul-Gabriel Urma, Mario Fusco, Alan Mycroft- Obbligatorio:
- No
- Oggetto:
Può anche essere utile la consultazione di:
- Graham Hutton, Programming in Haskell, Second edition, Cambridge University Press, 2016.
- Richard Bird, Thinking Functionally with Haskell, Cambridge University Press, 2014.
It could also be useful to consult:
- Graham Hutton, Programming in Haskell, Second edition, Cambridge University Press, 2016.
- Richard Bird, Thinking Functionally with Haskell, Cambridge University Press, 2014.
- Oggetto: