CODE 61799 ACADEMIC YEAR 2023/2024 CREDITS 12 cfu anno 2 INFORMATICA 8759 (L-31) - GENOVA SCIENTIFIC DISCIPLINARY SECTOR INF/01 LANGUAGE Italian TEACHING LOCATION GENOVA SEMESTER Annual TEACHING MATERIALS AULAWEB OVERVIEW Principles of programming languages: syntax, static and dynamic semantics, and intepreters. Functional programming: F#. Object-oriented programming: Java. AIMS AND CONTENT LEARNING OUTCOMES Students will extend their skills with foundational notions on design and principles of programming languages and on theory and practice of the object-oriented and functional programming paradigms. They will learn how to develop simple applications starting from informal requirements with the support of an integrated development environment and a collaborative version control system. AIMS AND LEARNING OUTCOMES Students will acquire the following technical and social skills: use of the basic concepts of the object-oriented paradigm for modeling data and programming in the small; development of Java programs structured modularly to favor code reuse. comprehension, correct use and implementation of common object-oriented design patterns use of the basic concepts of the functional paradigm for programming in the small; development of F# programs based on the most common functional and generic programming techniques comprehension of the specification of a programming language and the issues concerning the implementation of its interpreter collaboration within a software development team with the aim to implement a thousand LOC project; interaction with the other team members and instructors with the support of the GitHub Classroom collaborative version control system. PREREQUISITES Basic notions on imperative programming, algorithms and data types and structures. TEACHING METHODS Lectures in classroom devoted to theory, demos and discussions on individual homework assignments for learning self-assessment. Team lab assignments on programming in F# and Java. Team development of a final Java project. The team lab assignments and final project are developed with the GitHub Classroom collaborative version control system. SYLLABUS/CONTENT Principles of programming languages: overview, programming paradigms; syntax, static and dynamic semantics, development of a semantics-driven interpreter. Object-oriented paradigm (the Java programming language): objects, classes, interfaces, inheritance and dynamic binding, casting, overloading, exceptions. Advanced features: generic classes and methods. Practical uses of the standard API, iterator and visitor design pattern. Functional paradigm (the F# programming language): higher-order and polymorphic functions, polymorphic type inference, currying, functions on lists, tail recursion, user-defined types. RECOMMENDED READING/BIBLIOGRAPHY Davide Ancona, Giovanni Lagorio, Elena Zucca. Linguaggi di Programmazione. Città Studi Edizioni Raymond Gallardo, Scott Hommel, Sowmya Kannan, Joni Gordon, Sharon Biocca Zakhour. The Java Tutorial: A Short Course on the Basics (Sixth Edition), Oracle (limitatamente alla versione 8 di Java) For documentation and books on F# see the page at https://fsharp.org/learn/ Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley. (approfondimento) TEACHERS AND EXAM BOARD DAVIDE ANCONA Ricevimento: On demand, upon explicit requests by email or Teams FRANCESCO DAGNINO Exam Board DAVIDE ANCONA (President) ELENA ZUCCA RICCARDO BIANCHINI (Substitute) GIOVANNI LAGORIO (Substitute) PAOLA MAGILLO (Substitute) LESSONS LESSONS START In accordance with the teaching schedule approved by Consiglio dei Corsi di Studio in Informatica e Computer Science. Class schedule L'orario di tutti gli insegnamenti è consultabile all'indirizzo EasyAcademy. EXAMS EXAM DESCRIPTION Written test. Final Java project and individual interview on it. ASSESSMENT METHODS Learning and ability of application of the basic concepts of object-oriented programming: development of the final software project and individual interview on it; Java comprehension and programming exercises in the written test. Comprehension, use and implementation of the iterator, decorator and visitor design patterns: development of the final software project and individual interview on it; Java programming exercises in the written test. Learning and ability of application of the basic concepts of functional and generic programming: F# programming exercises in the written test. Comprehension of the specification of a programming language and the issues concerning the implementation of its interpreter: development of the final software project and individual interview on it; exercises on regular expressions and context free grammars in the written test. Collaboration within a software development team with the aim to implement a thousand LOC project; interaction with the other team members and instructors: development of the final software project and individual interview on it. OpenBadge PRO3 - Soft skills - Gestione progettuale base 1 - A PRO3 - Soft skills - Sociale base 1 - A