Skip to main content
CODE 61799
ACADEMIC YEAR 2024/2025
CREDITS
SCIENTIFIC DISCIPLINARY SECTOR INF/01
LANGUAGE Italian
TEACHING LOCATION
  • GENOVA
SEMESTER Annual
TEACHING MATERIALS AULAWEB

OVERVIEW

Programming languages ​​and functional and object-oriented programming are tools and concepts at the basis of software development.

The course provides the main notions necessary for the design, understanding, use, and implementation of a programming language: syntax, static and dynamic semantics, interpreters.

Functional and object-oriented programming techniques and methodologies are also explored in depth through learning the F# and Java languages.

The course allows students to apply the more theoretical concepts acquired in class through various practical laboratory experiences and the development of a medium-sized final project.

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

At the end of the course, students will be able to

  • apply the basic concepts of the object-oriented paradigm to small programs,  model data and develop code in Java organized modularly to encourage reuse
  • understand, apply and correctly implement some common design patterns of object-oriented programming
  • apply the basic concepts of the functional paradigm to small programs and develop code in F# based on the most common functional and generic programming techniques
  • understand the specification of a programming language and the issues underlying the implementation of an interpreter for a programming language
  • manage their social relationships with a collaborative attitude and constructive communication in different environments, and developing a software project with the help of the collaborative tool GitHub Classroom
  • make independent decisions, have a collaborative attitude and manage human resources and materials and coordination during team development of a software project.

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

Exam Board

DAVIDE ANCONA (President)

ELENA ZUCCA SCHILLANI

FRANCESCO DAGNINO (President 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

The timetable for this course is available here: Portale 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.

Exam schedule

Data appello Orario Luogo Degree type Note
15/01/2025 09:00 GENOVA Scritto
06/02/2025 09:00 GENOVA Scritto
20/06/2025 09:00 GENOVA Scritto
09/07/2025 09:00 GENOVA Scritto
10/09/2025 09:00 GENOVA Scritto

OpenBadge

 PRO3 - Soft skills - Gestione progettuale base 1 - A
PRO3 - Soft skills - Gestione progettuale base 1 - A
 PRO3 - Soft skills - Sociale base 1 - A
PRO3 - Soft skills - Sociale base 1 - A