Course Details

Programming paradigms

MF0363

Course
Programming paradigms
Code
MF0363
Academic Year
2024/2025
Curriculum Year
2023/2024
Degree Programme
CHEMISTRY
Curriculum
000 - CORSO GENERICO
Course coordinator
Credits
9
Lecture Hours
72
Scientific Disciplinary Sector (SSD)
INF/01 - Computer Science
Course Type
Single-subject learning activity
Course Delivery
OBB - Obbligatoria
Year
2
Teaching period
Primo Semestre
Campus
ALESSANDRIA
Teaching language
Italian
Course Contents
The course consists of two parts.
In the first, object-oriented programming in Java and the Test-based program development methodology are introduced.
In the second part, functional programming is introduced using the Python language.
Reference Texts
Paul J. Deitel - Harvey M. Deitel
Programmare in Java, 11° edizione, Pearson.

Recommended: Marco Buttu, Programmare con Python. Guida completa, pro Dgital Life Style.
Reference: Steven F. Lot, Functional Python Programming: Discover the power of functional programming, generator functions, lazy evaluation, the built-in itertools library, and monads, 2nd Edition Paperback – April 13, 2018
Material supplied by the teacher.
Learning Outcomes
The goal of this teaching is to know the theoretical foundations of object-oriented and functional programming. The student that passes the exam are supposed:
- to model an application by identifying the components and the best paradigm for their description;
- to design and implement the chosen solution using both Java and Python;
- to perform tests with Junit;
- to master the Java and Python Collections framework;
- to be able to recognize and manage non-standard cases through exception.
Prerequisites
Formal prerequisites: passing grade in the Programming 1 and 2 courses.
Substantial prerequisites: mastering the principles of imperative programming.
Teaching Methods
Lectures that introduce theoretical concepts and laboratory exercises that apply them.

In the lessons, theoretical topics are addressed through slide presentations, with examples and some questions to verify students' learning.

In laboratory exercises, students are guided in the implementation of simple projects aimed at putting into practice the theoretical knowledge acquired.
Additional Information
The student is presented with weekly exercises (optional), which solution is started during the lab sessions and that should be completed by the student. The exercises are discussed and corrected both individually and in the classroom. The final tests (described in " Assesment methods") assess the student autonomy with respect to the design, implementation and testing of object-oriented programs implemented in Java.
Students with physical disabilities, Learning Disabilities or Special Education Needs can request specific services and tools via the Staff Sviluppo e Coordinamento Carriere e Servizi alle Studentesse e agli Studenti, consulting the University webpage: https://www.uniupo.it/en/services/services- students-physical-or-learning-disabilities Students with disabilities, learning disabilities or special education needs, once they have contacted the University Staff, can refer to the tutor in charge of the course to define the examination modalities, concerning academic aspects.
Assessment Methods
The examination consists of three parts: a written examination on the principles of object-oriented programming, a written examination on the principles of functional programming, and the discussion of a more detailed project carried out in Java.

The written exams are aimed at ascertaining the concepts presented in class on the topics of object-oriented programming and functional programming, respectively, and can be taken in any order. Each of the two exams consists of 4 questions on the theoretical concepts, followed by a practical PC implementation of a simple program in Java or Python (respectively). During the lessons, examples of the exercises that will be assigned in the examination will be presented. The minimum threshold to pass the written paper is to answer at least two out of four questions correctly and completely and to have performed the exercise at least 80% of the requirements. The two written tests count for 65% of the overall assessment.

The oral discussion will only be sustainable once the minimum threshold in the written tests has been exceeded, and it requires the implementation of a personal or group project. it aims at ascertaining both the ability to structure a problem and its implementation using Java libraries. The project (handed in before the test) is discussed during an oral examination and is worth 35% of the overall grade.

The final mark is determined collectively, taking into account the marks for the three tests.
Detailed Syllabus
Introduction to Java.
Objects, classes, methods
Basic types, syntactic structures for flow control, arrays.
Wrappers for primitive types and auto-boxing/unboxing
Interfaces, polymorphism, inheritance
Parametric programming
Exception handling
Overview of the core libraries
New functional features of Java 8 and new collections libraries
Test-Driven Development Pattern
Programming Model-View-Controller
Introduction to functional programming in Python.
Functions as values
Higher order functions
Immutable data
Lazy evaluation
Working with Collections: recursion and reduction
Expected Learning Outcomes
Knowledge and understanding: familiarity with the principles of object oriented and functional programming, the model/view/controller architecture and the methodologies for software testing.

Applying knowledge and understanding: ability to design and implement a project using object programming tools, with the specific Java language, and functional programming tools, with Python language, and deriving code from tests.

Making judgments: ability to recognize 1) good and bad programming practices, 2) when a programming paradigm is appropriate and 3) to evaluate the architectural quality of a project.

Communication Skills: mastering the specific terminology of object programming and functional programming and improving teamwork skills.

Learning Skills: ability to learn autonomously the use of other languages and other object oriented and/or functionally structured libraries.
Last update:09-09-2026 00:14:31