Course Details

Programming paradigms

MF0363

Course
Programming paradigms
Code
MF0363
Academic Year
2026/2027
Curriculum Year
2025/2026
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, "Java How to Program, 11/E," Pearson (alternative textbook: Claudio De Sio Cesari, "Programmazione Java, Nuove Tecniche e Paradigmi," Hoepli),Luciano Ramalho, "Fluent Python, 2nd Edition," O'Reilly.Material supplied by the teachers.
Learning Outcomes
The goal of this course is to provide students, through a combination of traditional lectures and interactive teaching methods, with 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 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 exam assesses skills through a mandatory written test lasting up to two hours and covering the theoretical and practical principles of object-oriented and functional programming, as well as the Java and Python programming languages.
The written test takes place on the official exam date via a digital platform (where feasible) and consists of a quiz with questions of varying difficulty corresponding to the following scoring levels, expressed on a 30-point scale up to a maximum score of 30 cum laude:
- 0–18/30: indicates a failing grade and certifies that the minimum understanding of the course topics has not been achieved (preparation limited to fragmentary notions, inability to apply fundamental procedures, or conceptual errors).
- 18–20/30: guarantees a passing grade and certifies a basic understanding of the course topics (overall correct foundational knowledge, application of standard procedures with minor errors, sufficient reasoning and presentation).
- 21–23/30: demonstrates a satisfactory knowledge of the course topics (fairly complete knowledge, generally correct application, adequate connecting skills and terminology).
- 24–26/30: attests to a good knowledge of the course topics (solid knowledge, correct procedures, clear reasoning, and the ability to compare main alternatives).
- 27–29/30: demonstrates a very good knowledge of the course topics (thorough and integrated knowledge, analytical autonomy, high methodological and expository accuracy).
- 30–30 cum laude: attests to an excellent knowledge of the course topics (complete and critical mastery of the content, ability to independently tackle complex or non-repetitive problems, rigorous, precise, and particularly clear argumentation). Honours (cum laude) are awarded when the exam demonstrates, beyond complete accuracy, a exceptionally high level of depth, autonomy, and critical thinking.
To prepare for the exam, systematic study of the textbook and learning materials published on the DIR platform is recommended. Furthermore, sample exam papers will be made available on the same platform.
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 9 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.

In order to achieve the minimum passing level of knowledge and skills, students are required to know and understand the basic theory of functional and object-oriented programming paradigms. To achieve an advanced level, students are expected to know how to effectively apply functional and object-oriented programming paradigms.
Last update:09-09-2026 00:14:31