Skip to main content
CODE 48382
ACADEMIC YEAR 2025/2026
CREDITS
SCIENTIFIC DISCIPLINARY SECTOR INF/01
LANGUAGE Italian
TEACHING LOCATION
  • GENOVA
SEMESTER 1° Semester
TEACHING MATERIALS AULAWEB

OVERVIEW

The course introduces the object oriented programming paradigm, which is adopted in many modern programming languages to organize the code by means of classes and inheritance relations; the notion of data type (the theoretical counterpart of a class), some classical data types (stack, queue, dictionary) used in the construction of programs; the computational complexity of algorithms and techniques to evaluate it. The course presents the programming languages Java and Python with practical exercises.

AIMS AND CONTENT

LEARNING OUTCOMES

We introduce the principles of object-oriented programming, with practical experience by using Java and Python as reference languages. We introduce the notions of data type, implementation, computational complexity, and the basic techniques for evaluating the computational complexity of algorithms and data structures.
After attending the classes, the student will know the object oriented programming paradigm, and will be able to develop a programming project by using librarycomponents and algorithms, being aware about the computational complexity involved in the implementation choices.

AIMS AND LEARNING OUTCOMES

The course introduces more advanced programming principles with respect to "Programmazione 1", by presenting also the basic theoretical models for the production of well organized and efficient software modules. The object oriented programming paradigm supports the software organization by introducing classes (software modules) mutually related through inheritance hierarchies. The theoretical counterpart of the class is the data type, which includes values and operations acting on such values. The process leading from a data type to a software module is called implementation, and includes choices about data structures (to store the values) and algorithms (to perform the operations). The analysis of the computational complexity permits to preview the impact of such implementation choices on the performance (memory consumption, execution time) of the software that will be produced.
The version with 7 cfu will also present techniques for the experimental analysis of the performance of a program, for validating the computational complexity evaluated in theory.

The laboratory activities will cover almost half of the teaching hours. They are fundamental to learn how to program in the two selected languages, and to see the theoretical content of the lessons at work.

After attending the course, the student will

  • know the object oriented programming paradigm and the main parts of the Java and Python programming languages.
  • be able to evaluate the complexity of simple data structures and algorithms.
  • know some classic algorithms and some classic data types, know how they are implemented and how to use them conveniently.
  • be able to develop a software project of small/medium size, by applying the acquired principles.

In the version with 7 cfu, the student will also

  • Be able to experimentally analyze the computational complexity of a program.

PREREQUISITES

Knowledge of the basic concepts of an imperative programming language.

Knowledge of the basic concepts of mathematics and logics.

It is suggested, but not mandatory, to have already passed the exam of "Programmazione 1".

TEACHING METHODS

The course consists of coordinated lessons in classroom and in laboratory. About half of the teaching time will be in laboratory. For the laboratory, the students will be asked to form groups of tho persons. Each week some exercises will be given, and it will be possible (non mandatory) to deliver them and obtain useful feedback. Two projects, in Java e in Python, will be given, to be developed in the groups, that must be delivered and are part of the exam. The version with 7 cfu will include another small project (a short report), which is also part of the exam.

SYLLABUS/CONTENT

  • Object-oriented programming paradigm and Java language: Classes and objects, equality and copy of objects, constructors, clientship, inheritance, overriding, exceptions. With practical exsercises and development of a project.
  • The Python language: Interactive environment, dynamic typing, container types (list, tuple, dictionary), functions, classes, inheritance, exceptions. With practical exsercises and development of a project.
  • Concepts of data type, algorithm, implementation.
  • Introduction to space and time complexity, and evaluation techniques (for iterative and recursive algorithms).
  • Some classic data types: stack, queue, dictionary. Some algorithms for classic problems: searching and/or sorting and/or operations on graphs.
  • For the version with 7 cfu: experimental analysis of the computational complexity of a program.

RECOMMENDED READING/BIBLIOGRAPHY

The teaching material will be available on Aulaweb, including: course notes (in Italian), links to on-line resources about the used programming languages (manuals and tutorials), laboratory exercises, corrections of the delivered exercises, etc.
In general, the notes taken by the students during the lessons and the material on Aulaweb, together with the necessary laboratory work, are sufficient to prepare the exam. As additional material, the student can use the following books, as well as other books with similar content:
M.T.Goodrich, R.Tamassia, M.H.Goldwasser. Data structures and algorithms in Java. John Wiley & Sons (2014)
C.Horstmann, R.D.Necaise. Python for everyone. John Wiley & Sons (2018)

TEACHERS AND EXAM BOARD

LESSONS

LESSONS START

The class will start according to the academic calendar (first semester).

Class schedule

The timetable for this course is available here: Portale EasyAcademy

EXAMS

EXAM DESCRIPTION

The exam consists of:

  • Two laboratory projects to be developed during the teaching period
  • An oral test

The two projects have to be developed in Java and in Python, respectively. Together with the second project, a written document must be produced, evaluating the computational complexity of the developed program. The version with 7 cfu includes a third and shorter project focused on the experimental analysis of the computational complexity.
The projects must be developed in groups of two students and are mandatory in order to be admitted to the oral test. The deadline for delivering the projects is the end of the semester. After delivering, the two members of the group will be invited to a brief interview, in order to verify that both of them contributed to the work.
The projects will be evaluated with a score in a level scale like sufficient-satisfactory-good-excellent. The projects will remain valid for the entire academic year, from January to September (included). There will be no extra projects for the students who do not meet the delivering deadlines.

The oral test will consist in questions about the subjects presented during the semester and may include writing examples of computer code (in Java or Python) or pseudocode.

The final grade will take into account the oral test and the projects, with more relevance given to the oral test.

Students who have valid certification of physical or learning disabilities (DSA) can refer to this page https://corsi.unige.it/corsi/8766/studenti-disabilita-dsa to ask for accommodations regarding the exams.

ASSESSMENT METHODS

The code of the projects will be evaluated by considering the correct behavior with respect to the specifications, general organization, computational complexity, and programming style. In evaluating the documentation we will consider whether its contents are complete, correct, motivated and clearly explained. In the interview after delivering the projects, the two members of the group must be able to present the main points of their work.

For passing the oral test, the student must show understanding of the concepts and ability to use the techniques seen in the lessons, and to master the syntax of the two programming languages Java and Python.

FURTHER INFORMATION

Ask the professor for other information not included in the teaching schedule.

Agenda 2030 - Sustainable Development Goals

Agenda 2030 - Sustainable Development Goals
Quality education
Quality education
Gender equality
Gender equality