Skip to main content
CODE 61799
ACADEMIC YEAR 2026/2027
CREDITS
SCIENTIFIC DISCIPLINARY SECTOR INF/01
LANGUAGE Italian
TEACHING LOCATION
  • GENOVA
SEMESTER Annual

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

Learning the fundamental concepts related to high-level programming languages and an in-depth understanding of object-oriented and functional programming paradigms. Learning the principles of modular design and implementation of small to medium-sized programs to favor code reuse and maintainability.

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 model data and develop small and medium-sized Java programs, organized modularly to promote code reuse
  • understand, apply and correctly implement some common design patterns of object-oriented programming
  • apply the basic concepts of the functional paradigm to develop small-sized F# programs 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, developing a software project with the help of the collaborative tool GitHub 
  • demonstrate decision-making autonomy, collaborative attitude, management of human
    and material resources and coordination during the group 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 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 (Java language): objects, classes, interfaces, inheritance and dynamic dispatch of methods, casting, overloading, exceptions. Advanced features: generic classes and methods, hints of functional programming in Java. Examples of use of the standard API, iterator, decorator and visitor design patterns.
Functional paradigm (F# language): higher-order and polymorphic functions, inference of polymorphic types, currying, functions on lists, tail recursion and accumulation parameters, 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

LESSONS

LESSONS START

According to the calendar approved by the Degree Program Board: https://corsi.unige.it/en/corsi/8759/studenti-orario 

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.

Guidelines for students with certified Specific Learning Disorders, disabilities, or other special educational needs are available at https://corsi.unige.it/en/corsi/8759/studenti-disabilita-dsa

ASSESSMENT METHODS

Learning and capability to apply the basic concepts of object-oriented programming: development of the final software project and corresponding individual interview; comprehension and Java programming exercises to be completed during the written exam.

Comprehension, use, and implementation of the iterator, decorator, and visitor design patterns: development of the final software project and corresponding individual interview; Java programming exercises to be completed during the written exam.

Learning and application of the basic concepts of functional programming: F# programming exercises to be completed during the written exam.

Comprehension of the specification of a programming language and of the core issues underlying the implementation of programming language interpreters: development of the final software project and corresponding final interview; exercises on regular expressions and context-free grammars to be completed during the written exam.

Capability to collaborate within a software development team to implement a project of around one thousand lines of code; capability to interact with other team members and with the professors: development of the final software project with the help of the collaborative tool GitHub and corresponding final interview.

 

FURTHER INFORMATION

For further information, please refer to the course’s AulaWeb module or contact the instructor.

OpenBadge

SOFT SKILLS - Gestione progettuale base 1 - A
SOFT SKILLS - Gestione progettuale base 1 - A
SOFT SKILLS - Sociale base 1 - A
SOFT SKILLS - Sociale base 1 - A