Academic year2022/23
CourseCOMPUTER SCIENCE
Code733AA
Credits9
PeriodSemester 1
LanguageItalian
Modules | Area | Type | Hours | Teacher(s) |
PARADIGMI DI PROGRAMMAZIONE | INF/01 | LEZIONI | 72 | |
Obiettivi di apprendimento
Conoscenze
Imparare i principi alla base dei principali paradigmi di programmazione (funzionale, object-oriented e concorrente) e del funzionamento dei linguaggi di programmazione moderni.
Knowledge
Learn the fundamental principles of the main programming paradigms (functional, object-oriented and concurrent) as well as those behind modern programming languages.
Modalità di verifica delle conoscenze
Esame finale, scritto e orale.
Assessment criteria of knowledge
Final exam. Written and oral tests.
Capacità
Imparare a ragionare sul funzionamento dei linguaggi di programmazione in astratto, tramite modelli formali del loro comportamento. Imparare ad apprendere nuovi linguaggi di programmazione. Imparare a programmare nel linguaggio OCaml.
Skills
Learn how to reason about the functioning of programming languages in an abstract way, through formal models of their behaviour. Learn how to learn new programming languages. Learn functional programming in OCaml.
Modalità di verifica delle capacità
Esercitazioni durante il corso ed esame finale.
Assessment criteria of skills
Exercises and final exam.
Comportamenti
Programmare in modo consapevole, avendo cognizione di cosa accade al programma in fase di compilazione ed esecuzione.
Behaviors
Being a programmer that understands what happens to a program at compile-time and run-time.
Modalità di verifica dei comportamenti
Esercitazioni durante il corso ed esame finale.
Assessment criteria of behaviors
Exercises and final exam.
Prerequisiti (conoscenze iniziali)
Elementi di linguaggi formali, semantica e programmazione visti nei corsi del primo anno. Conoscenza del linguaggio JavaScript.
Prerequisites
Notions of formal languages, semantics and programming from the 1st year courses. Knowledge of the JavaScript programming language.
Indicazioni metodologiche
Lezioni frontali con slide e uso dei jupyter notebook in OCaml.
Programma (contenuti dell'insegnamento)
- Paradigma di programmazione funzionale. L’essenza: il λ-calcolo; il linguaggio OCaml; formalizzazione di un linguaggio funzionale; implementazione in OCaml di un interprete del linguaggio funzionale; sistemi di tipi nei linguaggi funzionali.
- Paradigma di programmazione object-oriented. L’astrazione dei dati e gli oggetti; modularità, incapsulamento, ereditarietà, principio di sostituzione, e class-based vs object-based; formalizzazione di linguaggi object-oriented; Ssstemi di tipi nei linguaggi object-oriented; tecniche di implementazione di linguaggi class-based (es. Java Virtual Machine); Eeempi di implementazione in OCaml.
- Paradigma di programmazione concorrente. Concetti di base: esecuzione non sequenziale; formalizzazione di un modello di concorrenza; costrutti di programmazione concorrente nei linguaggi moderni.
Syllabus
- Functional programming. Lambda calculus; the OCaml programming language (functional core); formalization of a functional programming language and implementation of an interpreter in OCaml; type systems in functional languages.
- Object-oriented programming. Abstract data types; modularity, incapsulation, inheritance and substitution principle; class-based vs object-based langauges; types in OO languages; aspects of implementation of OO languages (es. Java Virtual Machine).
- Concurrent programming. Non-sequential execution; formalization of a model of concurrency; concurrency in modern programming languages.
Bibliografia e materiale didattico
Materiale didattico
- slide e dispense fornite dal docente
- Jupyter notebook in OCaml
Libri di testo consigliati (per approfondimenti)
- Real World OCaml (https://dev.realworldocaml.org/)
- P. Sestoft, Programming Language Concepts, Springer, 2017.
- M. Gabrielli e S. Martini, Linguaggi di programmazione: Principi e Paradigmi, McGraw-Hill, 2006.
Modalità d'esame
Scritto e orale.
Updated: 02/10/2022 22:55