Vai al contenuto principale
Oggetto:
Oggetto:

Linguaggi e Paradigmi di Programmazione

Oggetto:

Programming languages and paradigms

Oggetto:

Anno accademico 2023/2024

Codice dell'attività didattica
MFN0610
Docenti
Viviana Bono (Docente)
Luca Roversi (Docente)
Corso di studi
[008707] Laurea in Informatica
Anno
3° anno
Periodo didattico
Primo semestre
Tipologia
Caratterizzante
Crediti/Valenza
9 CFU - Numero di ore - Number of hours: 48 (in aula) + 30 (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 più orale facoltativo
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.
Basic knowledge of discrete mathematics and of programming languages.
Preparatory Courses (providing the expected entry skills): Matematica discreta e logica; Programmazione 1 e 2.
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:

  1. 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.
  2. 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.

I 3 CFU facoltativi trattano argomenti avanzati, illustrando efficacia e potenzialità del paradigma funzionale per la sintesi di software affidabile certificato, anche in presenza di computazioni con side-effect, estendendo, in particolare, l'argomento "dimostrazioni di correttezza". Strumento privilegiato per l'indagine, anche sperimentale, sarà un qualche linguaggio di programmazione funzionale integrato in sistemi di prova (semi-)automatici.

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 basic 6 CFUs are structured in two parts:

  1. 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.
  2. 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.

The 3 optional CFUs cover advanced topics, illustrating the effectiveness and potential of the functional paradigm for the synthesis of certified reliable software, even in the presence of computations with side-effects, extending, in particular, the topic of "proofs of correctness". A privileged tool for investigation, including experimental investigation, will be some functional programming language integrated in (semi-)automatic proof systems.

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.

Relativamente ai 3 CFU facoltativi, la conoscenza è relativa ai metodi di dimostrazione di correttezza, rispetto a specifiche formali, mentre la capacità di comprensione consiste nel saper individuare la struttura che un insieme di programmi funzionali deve assumere, col fine di applicare efficacemente i metodi di dimostrazione di cui sopra.

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.

Regarding the 3 optional CFUs, knowledge concerns the methods of correctness proof with respect to formal specifications, while the ability to understand consists in identifying the structure that a set of functional programs must assume in order to effectively apply the above-mentioned proof methods.

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.

Relativamente ai 3 CFU facoltativi su argomenti avanzati, sono previsti i seguenti temi:

  • Monadi e loro interpretazione computazionale.
  • Certificazione formale (semi)automatica di algoritmi funzionali *stateless*.
  • Estensione della certificazione ad algoritmi funzionali *stateful* che usano monadi.

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.

Regarding the 3 optional CFUs on advanced topics, the following topics are covered:

  • Monads and their computational interpretation.
  • (Semi)automatic formal certification of *stateless* functional algorithms.
  • Extension of certification to *stateful* functional algorithms that use monads.

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:
Altro
Titolo:  
All About Monads
Descrizione:  
Analisi dello strumento "monadi" nell'ambito del linguaggio di programmazione Haskell
Note testo:  
Disponibile on-line: https://wiki.haskell.org/All_About_Monads
Obbligatorio:  
No


Oggetto:
Altro
Titolo:  
Monads for Functional Programming
Descrizione:  
Introduzione didattica al concetto di monade nell'ambito della programmazione
Note testo:  
Disponibile on-line: https://homepages.inf.ed.ac.uk/wadler/papers/marktoberdorf/baastad.pdf
Obbligatorio:  
No
Oggetto:

Relativamente ai 6 CFU di base, può 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.

Relativamente ai 3 CFU facoltativi su argomenti avanzati, può essere interessante sfogliare:

 

Regarding the 6 basic CFUs, 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.

Regarding the 3 optional CFUs on advanced topics, it may be interesting to browse:



Oggetto:
Ultimo aggiornamento: 11/09/2023 08:41
Location: https://laurea.informatica.unito.it/robots.html
Non cliccare qui!