Academic year2022/23
CourseCOMPUTER SCIENCE AND NETWORKING
Code301AA
Credits9
PeriodSemester 1
LanguageEnglish
Modules | Area | Type | Hours | Teacher(s) |
ADVANCED PROGRAMMING | INF/01 | LEZIONI | 72 | |
Obiettivi di apprendimento
Conoscenze
Gli obiettivi del corso sono:
- di fornire agli studenti una conoscenza approfondita di come concetti e metafore ad alto livello dei linguaggi di programmazione si traducono in sistemi eseguibili e quali siano i loro costi e limiti
- di familiarizzare gli studenti con i moderni principi, tecniche e migliori pratiche per la costruzione di software sofisticato
- di introdurre tecniche di programmazione a livelli di astrazione più elevata, in particolare programmazione basata su componenti e programmazione funzionale
- di presentare frameworks allo stato dell’arte che incorporano queste tecniche.
Il corso in particolare si focalizza su questioni di qualità relative al progetto dettagliato ed alla codifica, quali l’affidabilità, le prestazioni, l’adattabilità e l’integrabilità in sistemi più ampi.
Knowledge
The objectives of this course are:
- to provide the students with a deep understanding of how high level programming concepts and metaphors map into executable systems and which are their costs and limitations
- to acquaint the students with modern principles, techniques, and best practices of sophisticated software construction
- to introduce the students to techniques of programming at higher abstraction levels, in particular component programming and functional programming
- to present state-of-the-art frameworks incorporating these techniques.
This course focuses on the quality issues pertaining to detailed design and coding, such as reliability, performance, adaptability and integrability into larger systems.
Modalità di verifica delle conoscenze
Esame orale finale.
Assessment criteria of knowledge
Final oral exam.
Capacità
Alla fine del corso gli studenti avranno una precisa comprensione e un’esperienza pratica diretta di:
- ambiente di esecuzione e supporto a runtime dei linguaggi di programmazione
- costrutti di programmazione avanzati, principalmente di linguaggi di programmazione funzionali e orientati agli oggetti
- frameworks per lo sviluppo di software basato su componenti, anche con supporto all’interoperabilità tra linguaggi di programmazione distinti.
Skills
At the end of the course students will have a precise understanding and hand-on practical experience of
- the execution environment and runtime support of programming languages
- advanced programming constructs and idioms, mainly of functional and object-oriented programming languages
- frameworks for the component based development of software, also supporting interoperability among different programming languages.
Modalità di verifica delle capacità
Valutazione di piccoli progetti di programmazione assegnati durante il corso e esame finale orale.
Assessment criteria of skills
Evaluation of programming assignments during the course and final oral exam.
Prerequisiti (conoscenze iniziali)
Conoscenza a livello undergraduate di almeno un linguaggio di programmazione orientato agli oggetti (come Java, C++, C# o altri) e di almeno un linguaggio di programmazione funzionale (come Haskell, OCaml, Scheme o altri).
Prerequisites
Undergraduate level knowledge of at least one object-oriented programming language (like Java, C++, C# or others) and of at least one functional programming language (like Haskell, OCaml, Scheme or others).
Indicazioni metodologiche
- Il corso è insegnato in Inglese.
- Un questionario verrà proposto all’inizio del corso per confermare il possesso dei prerequisiti. Agli studenti che non abbiano i prerequisiti verranno date indicazioni per colmare le lacune individuate.
- Le lezioni frontali si svolgono con uso di slide.
- Le esercitazioni si svolgono in aula: gli studenti svolgono degli esercizi, anche in gruppo, sotto la supervisione del docente e dell’assistente
- L'interazione con il docente avviene con colloqui (in orario di ricevimento o su appuntamento) e tramite posta elettronica.
- Sulla pagina web del corso vengono pubblicati progressivamente i lucidi presentati in ogni lezione, con riferimenti ai corrispondenti argomenti in documenti disponibili online. Vengono anche pubblicati i testi degli esercizi proposti per le esercitazioni.
Teaching methods
- The course is taught in English.
- An entry questionnaire will be proposed at the beginning of the course to check the background knowledge. Students missing some prerequisites will be instructed on how to fill the identified gaps
- Frontal lessons are performed using slides
- Exercises take place in the classroom: students practice exercises, even in groups, under the supervision of the lecturer and of the tutor
- Interaction with the teacher is done through interviews (on fixed office hours or by appointment) and by e-mail.
- On the web page of the course, the slides presented in each lesson are published progressively, with references to corresponding reading material available online.
Programma (contenuti dell'insegnamento)
- Pragmatica dei Linguaggi di Programmazione
- Supporto Run Time e Ambienti di Esecuzione: la Java Virtual Machine
- Programmazione basata su componenti e Frameworks
- Polimorfismo: classificazione ed esempi in vari linguaggi
- Linguaggi funzionali, Haskell, e concetti avanzati
- Stream API e espressioni lambda in Java
- Ownership e Borrowing in Rust
- Linguaggi di Scripting e Python
Syllabus
- Programming Language Pragmatics
- Run Time Support and Execution Environments: the Java Virtual Machine
- Components based programming and Frameworks
- Polymorphism: a classification and examples in several languages
- Linguaggi funzionali, Haskell, e concetti avanzati
- Stream API and lambda-expressions in Java
- Ownership and Borrowing in Rust
- Scripting Languages and Python
Bibliografia e materiale didattico
Reading material that will be indicated during the course, and linked from the web page.
Bibliography
Reading material that will be indicated during the course, and linked from the web page.
Indicazioni per non frequentanti
Gli studenti non frequentanti possono trovare sulla pagina web del corso l'elenco degli argomenti presentati per ogni singola lezione, con le slide proiettate e i riferimenti al materiale didattico rilevante. Le modalità d'esame per gli studenti non frequentanti sono identiche a quelle per gli studenti frequentanti.
Non-attending students info
Non-attending students can find on the course web page the list of topics presented for each lesson, with the slides and references to the relevant reading material. Examination methods for non-attending students are identical to those for attending students.
Modalità d'esame
Valutazione di piccoli progetti di programmazione assegnati durante il corso e esame finale orale.
Assessment methods
Evaluation of programming assignments during the course and final oral exam.
Updated: 11/09/2022 23:49