- 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 e Prolog 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
1 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.
2 "Il paradigma di programmazione logico. Introduzione al linguaggio di programmazione Prolog."
3 "Il paradigma di programmazione funzionale. Introduzione al linguaggio di programmazione LISP (Common Lisp). "
4 "Il paradigma di programmazione imperativo. Introduzione al linguaggio di programmazione C."
5 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
Nota: per l'AA 2021-22 ci potranno essere della variazioni riguardo le modalità di erogazione, a causa dell'emergenza COVID.
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.
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);
Peter
Seibel, Practical Common Lisp (PCL);
Brian W. Kernigham & Dennis M.
Ritchie, C Programming Language (2nd 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
Periodo di erogazione dell'insegnamento
Primo semestre
Modalità di verifica del profitto e valutazione
Nota: per l'AA 2021-22 ci potranno essere della variazioni riguardo le modalità di esame, a causa dell'emergenza COVID.
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 e Lisp; Programmazione Imperativa e C/C++), e uno o due progetti in itinere, postati a fine Ottobre, da consegnare in forma elettronica a Gennaio/Febbraio (Common Lisp, Prolog e/o C++). 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), ma sono da consegnare individualmente. 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: Martedì dalle ore 10:30 o su appuntamento via email.
Prof.ssa Gabriella Pasi: su appuntamento via email.
Prof. Rafael Penaloza: su appuntamento via email.
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 and Prolog, 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
1 Programming languages paradigms: imperative, logical (declarative) and functional. Notions recall of “run-time”, program execution on an idealized stack architecture. Basic notions about programming environment for the different systems presented.
2 "The logic programming paradigm. Introduction to the Prolog programming language."
3 "The functional programming paradigm. Introduction to the (Common) Lisp programming language."
4 "The imperative programming paradigm. Introduction to the C programming language."
5 Usage of the different paradigms in a variety of contexts.
Prerequisites
Basic concepts of recursive programming, mathematical logic and hardware/software architecture.
Teaching form
Note: for AY 2021-22 the lectures and lab formats may be subject to variations, due to the COVID emergency.
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.
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);
Peter
Seibel, Practical Common Lisp (PCL);
Brian W. Kernigham & Dennis M.
Ritchie, C Programming Language (2nd 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
Semester
First semester
Assessment method
Note: for the AY 2021-22 exams procedures may be subject to changes, due to the COVID emergency.
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 Prolog) and in January/February (Functional Programming and Lisp; Imperative Programming and C/C++), 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), but must be handed-in individually. 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: Tuesday from 10:30 am or by appointment via email.
Prof.ssa Gabriella Pasi: by appointment via email.
Prof. Rafael Penaloza: by appointment via email.