Academic year
2020/2021 Syllabus of previous years
Official course title
Course code
CT0372 (AF:320634 AR:172526)
On campus classes
ECTS credits
Degree level
Bachelor's Degree Programme
Educational sector code
2nd Semester
Course year
Go to Moodle page
This course is one of the basic educational activities of the Bachelor course in Computer Science that enable the student to gain knowledge and understanding
major programming paradigms and acquire the ability to design and implement software.
The aim of the course is to provide knowledge related to the object-oriented programming paradigm as well as specific knowledge of the Java language.

The syllabus will be updated before the beginning of the course.
The course aims to develop in the student the necessary familiarity with the Object Programming paradigm and at the same time consolidate the programming bases acquired during the first year.

As with any course in programming it is essential that the training path combines methodological elements with continuous experimental stimuli, through the invitation to autonomous resolution of exercises and application problems.

The student who has successfully attended the course will have acquired a thorough knowledge of the Java language and advanced programming techniques, such as design patterns. At the same time, it will be able to count on a general competence regarding object designation and the rules that underlie the design and development of software according to this paradigm. Skills that can be easily transferred to different languages and contexts.
Basic object-oriented programming taught in the first part of the course: Java, classes, interfaces, polymorphism, subtyping.
Imperative algorithms on basic data structures: arrays, lists, collections, trees.
. Advanced programming in Java
. Event-driven programming, callbacks, anonymous classes
. Exceptions, error reporting, resource tracking
. Parametric polymorphism: generics, constraints, first-class polymorphism
. Pure/impure functional programming in object-oriented languages: lambda expressions, function objects, closures
. Design patterns: factory, singleton, command, listener-observer, consumer-producer
. Advanced programming techniques: type-driven programming with objects
Joshua Bloch
"Effective Java Third Edition"
Addison-Wesley Professional, 2017

Kamalmeet Singh, Adrian Ianculescu, Lucian-Paul Torje
"Design Patterns and Best Practices in Java"
Packt Publishing Ltd, 2018
The teaching is aimed at allowing the student to gain practical competences in the design and development of complex computer programs using object oriented methodologies.

Testing is performed through a written exam and an optional oral exam.

The written test consists of exercises aimed at evaluating the skills acquired in solving design problems and in the representation of data structures with complex operations by means of an advanced use of types. During the written test the use of books, notes, or electronic media is not allowed.

During the oral exam (optional) the student must demonstrate knowledge of the arguments presented during the course and competence in the formal exposition of the concepts.
The oral exam will either be mandatory or not according to the teacher and the result of the written exam.
Lectures will mostly be in classroom. Occasionally students will bring their laptop computer or attend classes in laboratory.
Another important resource for learning Java is the official online documentation by Oracle.

The Java Language Specification (Java SE 11 Edition)

The Java Developer Kit (JDK 11)
Definitive programme.
Last update of the programme: 23/04/2020