- Linguaggi di Programmazione
- Introduzione
Syllabus del corso
Obiettivi
Gli studenti apprenderanno vari paradigmi programmazione, in particolare il paradigma logico e quello funzionale. Apprenderanno inoltre a utilizzare ambienti per programmare nei principali linguaggi presentati. Gli studenti saranno in grado di sviluppare progetti di piccole e medie dimensioni in (Common) Lisp, Prolog e altri linguaggi utilizzando gli ambienti di programmazione presentati.
Contenuti sintetici
L’insegnamento ha l’obiettivo di mostrare il panorama dei paradigmi di programmazione secondo la tradizionale suddivisione tra paradigma imperativo, paradigma logico (dichiarativo) e paradigma funzionale.
Programma esteso
- I paradigmi di programmazione: imperativo, logico (dichiarativo) e funzionale. Richiami delle nozioni di “run-time” e di esecuzione di un programma su un’architettura idealizzata a pila (stack). Nozioni base degli ambienti di programmazione per i diversi sistemi presentati. Cenni storici.
- Il paradigma di programmazione logico. Introduzione al linguaggio di programmazione Prolog.
- Il paradigma di programmazione funzionale. Introduzione al linguaggio di programmazione LISP (Common Lisp). Note su Haskell, Julia e Javascript.
- Il paradigma di programmazione imperativo. Introduzione al linguaggio di programmazione C/C++.
- Utilizzo dei vari paradigmi in situazioni e contesti diversi.
Prerequisiti
Concetti di base di programmazione ricorsiva, logica matematica e di architetture hardware e software.
Modalità didattica
Il corso si svolgerà mediante lezioni frontali in presenza e con l’ausilio di sistemi di e-learning per la distribuzione del materiale didattico e di esercizi e progetti. Ci saranno inoltre delle lezioni in laboratorio per imparare a programmare nei linguaggi considerati a lezione.
Indicativamente, e a seconda delle necessità contigenti l'insegnamento sarà articolato su
- 12 lezioni da 2 ore svolte in modalità erogativa in presenza;
- 4 lezioni da 2 ore svolte in modalità erogativa ed interattiva in presenza;
- 7 attività di laboratorio da 3 ore svolte in modalità interattiva in presenza;
- 10 attività di esercitazione da 2 ore svolta in modalità erogativa ed interattiva in presenza.
Materiale didattico
- Leon Sterling and Ehud Shapiro, The Art of Prolog Advanced Programming Techniques - 2nd Edition;
- Abelson, Sussman e Sussman, Structure and Interpretation of Computer Programs (SICP);
- Abelson, Sussman, Henz and Wrigstad, Structure and Interpretation of Computer Programs (SICP) - Javascript edition;
- Peter Seibel, Practical Common Lisp (PCL);
- Brian W. Kernigham & Dennis M. Ritchie, C Programming Language (2ⁿᵈ Edition), Prentice Hall, 1988;
- Robert Sedgewick, Algorithms in C, Parts 1-5 (Bundle): Fundamentals, Data Structures, Sorting, Searching, and Graph Algorithms (3rd Edition), Addison Wesley, 2001;
- Varie risorse online per gli altri linguaggi di programmazione presentati.
Periodo di erogazione dell'insegnamento
Primo semestre
Modalità di verifica del profitto e valutazione
L'insegnamento di Linguaggi di Programmazione prevede il superamento di una prova teorica (uno scritto) e di un progetto di programmazione. A discrezione del docente potrà essere richiesta anche una prova orale. La prova scritta ed il progetto corrispondente al primo appello sono strutturati in due prove "in itinere".
Le prove in itinere sono due scritti offerti in Novembre (Programmazione Logica e Prolog) e a Gennaio/Febbraio (Programmazione Funzionale; Programmazione Imperativa), e uno o due progetti in itinere, postati a fine Ottobre, da consegnare in forma elettronica a Gennaio/Febbraio. Le prove in itinere costituiscono, come già detto, il primo appello per il corso, e non sono recuperabili nei restanti appelli.
Dall'appello successivo (Febbraio/Marzo) lo scritto comprende tutte le parti del corso. Lo stesso vale per i progetti. Gli appelli seguenti saranno a Giugno, Luglio e Settembre (in data da precisarsi).
La parte teorica ed i progetti di laboratorio vanno superati entrambi nella stessa tornata; il voto complessivo è la media, ponderata a seconda dei casi, ovvero a discrezione del docente, dei voti parziali. In particolare, una media aritmetica almeno pari a 18 non è sufficiente per garantire il superamento dell'esame.
I progetti posso essere svolti in gruppo (massimo 3 persone). Chi svolge il progetto da solo od in coppia potrà avere un bonus.
Il voto è in trentesimi, ed esprime una valutazione complessiva di tutto cioè che concorre al raggiungimento degli obiettivi formativi dichiarati. Cioè, è frutto di una valutazione complessiva delle varie caratteristiche delle prove. Per esempio: chiarezza, rigore, autonomia di giudizio, capacità di scegliere esempi e di illustrare l'argomento in modo efficace.
Nota finale: tutti gli esiti saranno caricati nel sistema: voto, ritirato, assente, insufficiente etc.
Orario di ricevimento
Prof. Marco Antoniotti: giorno da decidersi o su appuntamento via email.
Prof.ssa Gabriella Pasi: su appuntamento via email.
Prof. Fabio Sartori: su appuntamento via email.
Sustainable Development Goals
Aims
The students will familiarize with various programming paradigms, in particular the logical and functional ones. They will learn the most common programming environments for the languages presented during the course. The students will acquire the ability to develop small and medium sized projects in (Common) Lisp, Prolog, and other languages by using the programming environments presented.
Contents
The course will provide students with a panoramic view of the main programming language paradigms: imperative, logic (declarative) and functional.
Detailed program
- Programming languages paradigms: imperative, logical (declarative) and functional. Notions recall of “run-time”, program execution on an idealized stack architecture. Basic notions about programming environments for the different systems presented. Some historical perspectives.
- The logic programming paradigm. Introduction to the Prolog programming language.
- The functional programming paradigm. Introduction to the (Common) Lisp programming language. Notes on Haskell, Julia and Javascript.
- The imperative programming paradigm. Introduction to the C/C++ programming language.
- Usage of the different paradigms in a variety of contexts.
Prerequisites
Basic concepts of recursive programming, mathematical logic and hardware/software architecture.
Teaching form
The course will be offered as a set of standard lectures during the term. “e-Learning” support will also be provided for the distribution of course material, exercises and project descriptions. Moreover there will be laboratory sessions where the students will learn to program with the programming languages introduced during the course.
As a possible guideline, subject to contingency, the course will be organized as
- 12 2 hours lectures: traditional lecture in presence.
- 4 2 hours lectures: traditional and interactive lecture in presence.
- 7 3 hours laboratory: traditional and interactive laboratory activities in presence.
- 10 2 hours recitations: traditional and interactive recitations activities in presence.
Textbook and teaching resource
- Leon Sterling and Ehud Shapiro, The Art of Prolog Advanced Programming Techniques - 2nd Edition;
- Abelson, Sussman e Sussman, Structure and Interpretation of Computer Programs (SICP);
- Abelson, Sussman, Henz e Wrigstad, Structure and Interpretation of Computer Programs (SICP) - Javascript edition;
- Peter Seibel, Practical Common Lisp (PCL);
- Brian W. Kernigham & Dennis M. Ritchie, C Programming Language (2ⁿᵈ Edition), Prentice Hall, 1988;
- Robert Sedgewick, Algorithms in C, Parts 1-5 (Bundle): Fundamentals, Data Structures, Sorting, Searching, and Graph Algorithms (3rd Edition), Addison Wesley, 2001
- Various online resources for the other programming language presented.
Semester
First semester
Assessment method
The Programming Languages exam requires passing a written test and a programming project. At the discretion of the instructors an oral exam may be also required. The written exam and the project corresponding to the first roll-call are organized into two "partial" tests.
The partial tests are two written exams offered in November (Logic Programming) and in January/February (Functional Programming; Imperative Programming), plus one or two projects, posted towards the end of October, to be electronically handed-in in January/February. The partial tests, as already said, comprise the first roll-call for the course and are not held over for the remaining roll-calls.
From the next roll-call (February/March) onward, the written exam will comprise all the course materiale. The same applies for the projects. The following roll-calls will be in June, July and September (in dates to be announced).
The written exam and the projects must be passed after the same roll-call; the final grade is the weighted average, at the discretion of the instructors, of the partial grades. In particular, a weighted arithmetic average equal to 18 does not guarantee the passing of the exam.
Projects can be done in groups (max 3 people). Whoever works on a project alone or in a pair, may have a bonus.
The final grade is in thirtieths, and expresses a comprehensive evaluation of everything that concurs to the achievement of the stated educational goals. That is, it is the result of a comprehensive evaluation of the tests. E.g., clarity, rigor, judgment abilities, argumentation choices and ability to illustrate them in an efficacious way.
Final note: every exam result will be recorded in the system: grade, withdraw, absent, insufficient, etc.
Office hours
Prof. Marco Antoniotti: TBD or by appointment via email.
Prof.ssa Gabriella Pasi: by appointment via email.
Prof. Fabio Sartori: by appointment via email.
Sustainable Development Goals
Scheda del corso
Staff
-
Marco Antoniotti
-
Fabio Sartori