CdSINFORMATICA
Codice733AA
CFU9
PeriodoPrimo semestre
LinguaItaliano
Imparare i principi alla base dei principali paradigmi di programmazione (funzionale, object-oriented e concorrente) e del funzionamento dei linguaggi di programmazione moderni.
Learn the fundamental principles of the main programming paradigms (functional, object-oriented and concurrent) as well as those behind modern programming languages.
Esame finale, scritto e orale.
Final exam. Written and oral tests.
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.
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.
Esercitazioni durante il corso ed esame finale.
Exercises and final exam.
Programmare in modo consapevole, avendo cognizione di cosa accade al programma in fase di compilazione ed esecuzione.
Being a programmer that understands what happens to a program at compile-time and run-time.
Esercitazioni durante il corso ed esame finale.
Exercises and final exam.
Elementi di linguaggi formali, semantica e programmazione visti nei corsi del primo anno. Conoscenza del linguaggio JavaScript.
Notions of formal languages, semantics and programming from the 1st year courses. Knowledge of the JavaScript programming language.
Lezioni frontali con slide e uso dei jupyter notebook in OCaml.
- 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.
- 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.
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.
Scritto e orale.