Vai al contenuto principale
Oggetto:
Oggetto:

Linguaggi e Paradigmi di Programmazione

Oggetto:

Programming languages and paradigms

Oggetto:

Anno accademico 2022/2023

Codice dell'attività didattica
MFN0610
Docente
Viviana Bono (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.
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.
Oggetto:

Sommario insegnamento

Oggetto:

Obiettivi formativi

L'insegnamento si propone di fornire una 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. Nella parte avanzata dell'insegnamento si introdurranno tecniche di programmazione e dimostrazione per strutture dati co-induttive - in particolare gli stream - e si illustrerà l'efficacia delle tecniche di programmazione funzionale apprese quando applicate a Java, un moderno linguaggio multi-paradigma che a partire dalla versione 8 ha incorporato costrutti tipici della programmazione funzionale, in particolare le lambda espressioni. Gli obiettivi di questo insegnamento fanno parte degli Obiettivi formativi specifici del CdS in Informatica (L31), in particolare riguardo all'area di approfondimento, che permette di personalizzare il proprio piano di studi tramite la scelta di ulteriori insegnamenti di carattere informatico, viste le molteplici declinazioni del termine 'sistema software' nei servizi e nei processi produttivi.

The course is an introduction to the functional programming paradigm, to type systems for functional languages along with the corresponding inference algorithms, and to the correctness of functional programs. The advanced part of the course introduces programming and proof techniques for coinductive data structures - streams in particular - and illustrates the effectiveness of functional programming techniques when applied to Java, a modern, multi-paradigm language that, starting from version 8, has incorporated idiomatic constructs of functional programming, lambda expressions in particular.  The objectives of this course are part of the "Obiettivi formativi specifici del CdS in Informatica (L31)", with respect to the "area di approfondimento", that allows each student to personalise her/his study plan via the choice of futher courses of Computer science, given the multi-faceted meaning of the term "software system" in services and productive processes.

Oggetto:

Risultati dell'apprendimento attesi

CONOSCENZA E CAPACITÀ DI COMPRENSIONE. Acquisizione dei principi alla base della programmazione funzionale. Conoscenza delle principali tecniche di programmazione e dimostrazione utilizzate in tale paradigma. Conoscenza e capacità di progettazione di strutture di dati (in particolare, le liste) per la risoluzione di problemi di programmazione. Relativamente alla parte avanzata dell'insegnamento, conoscenza della tecnica di dimostrazione per co-induzione e capacità di applicazione di costrutti e pattern tipici della programmazione funzionale al linguaggio Java.

CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE. Acquisizione della capacità di programmare nel paradigma funzionale e di costruire dimostrazioni formali di correttezza e di equivalenza dei programmi.

AUTONOMIA DI GIUDIZIO. Acquisizione di autonomia di giudizio con riferimento alla necessità di sviluppare il codice dei programmi in modo ben strutturato e alle abilità di applicazione dei buoni principi della programmazione funzionale in contesti multiparadigma.

ABILITÀ COMUNICATIVE. Acquisizione di competenze e strumenti per la comunicazione nella forma scritta e orale per descrivere i programmi e le loro proprietà in modo formale.

CAPACITÀ DI APPRENDIMENTO. Acquisizione di capacità autonome di apprendimento e di autovalutazione della propria preparazione, atte ad intraprendere gli studi successivi con un alto grado di autonomia.

KNOWLEDGE AND UNDERSTANDING. Understanding of the basic principles of functional programming, knowledge on the main programming and proof techniques useful for this paradigm. Knowledge and skills to design data structures (lists, in particular) for the solution of programming problems. With respect to the advanced part of the course, knowledge on coinduction proof principles and the ability of applying constructs and pattern of functional programming to the Java language.

APPLYING KNOWLEDGE AND UNDERSTANDING. Acquisition of the ability to program within the functional paradigm and to build formal proofs of correcteness and equivalence of programs. 

MAKING JUDGMENTS. Acquisition of automomous judgment with respect to the necessity of development of well-structured program code and to the ability of applying the good principles of functional programming to multi-paradigm contexts.

COMMUNICATION SKILLS. Acquisition of competences and instruments for the written and oral commnication to describe programs and their properties in a formal fashion.

LEARNING SKILLS. Acquisition of autonomous learning capacity and self-assessment of their preparation, in order to undertake the subsequent studies with a high degree of autonomy.

Oggetto:

Modalità di insegnamento

Lezioni di teoria con presentazione di materiale didattico alla lavagna (o equivalente digitale) e per mezzo di slide. Lezioni di laboratorio con sviluppo assistito di programmi. Slide, appunti e altro materiale didattico sono pubblicati sulla pagina Moodle dell'insegnamento.

Lectures of theory with presentation of material on the board (or digital equivalent) and by means of slides. Practical lectures with assisted development of programs. Slides, notes and other material are published on the Moodle page of the course.

Oggetto:

Modalità di verifica dell'apprendimento

L'esame consiste in una prova pratica con esercizi di programmazione da svolgere al calcolatore, una prova scritta con esercizi sugli argomenti di teoria dell'insegnamento ed eventualmente una prova orale comprendente una discussione delle prove precedenti e domande sugli argomenti dell'insegnamento. Rispetto alla versione dell'insegnamento da 6 cfu, la prova di esame da 9 cfu comprende esercizi e domande relativi agli argomenti aggiuntivi (co-induzione, programmazione funzionale in Java 8). I voti sono espressi in 30-esimi sia per la parte di base (6 cfu), che per quella avanzata (+3 cfu). In particolare, il voto totale della parte avanzata (6+3 = 9 cfu) sarà la media pesata dei due voti (la parte 6 cfu vale 2/3 del voto).

The exam includes a practical test with programming exercises on the computer, a written test on the theoretical subjects of the course, and, if needed, an oral discussion on the written exam and on the subjects of the course. With respect to the 6 cfu version, the exam for the 9 cfu version comprises some exercises and questions on the advanced subjects (coinduction, functional programming in Java 8). Marks are expressed out of 30 for both parts, 6 cfu and 9 cfu. In particular, the final mark of the advanced part (6+3 = 9 cfu) is the weighted average of the two marks (6 cfu is worth 2/3).

Oggetto:

Programma

Nel seguente elenco di argomenti non viene fatta distinzione tra argomenti svolti in aula ed argomenti svolti in laboratorio, che sono peraltro strettamente connessi.

  • Breve storia dei linguaggi di programmazione, con particolareriferimento 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;
  • Dimostrazioni di correttezza di programmi funzionali usando l'induzione;
  • L'idea di astrazione funzionale. Funzioni di ordine superiore e pattern di trasformazione;
  • Alberi e tipi algebrici generali. Per la versione da 9 CFU, i seguenti argomenti addizionali:
  • Cenni a monadi e programmazione imperativa;
  • Strutture di dati infinite (stream) e dimostrazioni di correttezza usando la co-induzione;
  • Programmazione funzionale in Java 8.

In the following list of topics no distinction is made between theory classes and lab sessions.

  • Short history of programming languages, with particular emphasis to functional ones;
  • Computing as rewriting: the foundations for evaluating functional programs;
  • Expressions and their types. Basic types;
  • Design of functional programs. Recursion techniques;
  • Lists and first-order functions on lists;
  • Proving correctness of functional programs using induction;
  • The idea of functional abstraction: higher-order functions and transformation patterns;
  • Trees and general algebraic types. For the 9 cfu version, the following additional arguments:
  • Hints to monads and imperative programming;
  • Infinite data structures (stream) and proofs of correcness using coinduction;
  • Functional programming in Java 8.

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:
Ultimo aggiornamento: 22/03/2023 15:42
Non cliccare qui!