OBJECT-ORIENTED PROGRAMMING

Academic year
2024/2025 Syllabus of previous years
Official course title
PROGRAMMAZIONE A OGGETTI
Course code
CT0114 (AF:469152 AR:256619)
Modality
On campus classes
ECTS credits
9
Degree level
Bachelor's Degree Programme
Educational sector code
INF/01
Period
1st Semester
Course year
2
Where
VENEZIA
Moodle
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 course aims to develop in the student the necessary familiarity with the Object Programming paradigm using and consolidating the programming bases acquired during the first year.

It is essential that the training path combines methodological and theoretical elements with continuous experimental and practical stimuli, through the autonomous resolution of exercises and application problems.

The student who successfully attended the course will have acquired a thorough knowledge of the Java language and of the most fundamental concepts of object-oriented programming languages.
To face the course it is essential to have a consolidated and deep competence in imperative programming. In fact, object oriented programming extends imperative programming by enriching it with mechanisms that allow to obtain desirable properties in terms of structuring, integration and partitioning of the realized code. Consequently, it is needed that the student had already studied, understood, elaborated, and applied the fundaments of imperative programming before being able to take this course successfully.
Mod. 1
---------
1) Encapsulation and abstraction
a. Classes and objects, fields and methods
b. Static and final modifiers
c. Aliasing
d. Information hiding, visibility modifiers
e. Modules
f. Documenting code, Javadoc and jar files
g. Java Virtual Machine and Java bytecode
2) Polymorphism
a. Class extension, overriding and overloading
b. Abstract and final modifiers
c. Inheritance, subtyping, subsumption/substitution principle
d. Static and dynamic types
e. Single and multiple inheritance
f. Abstract classes, interfaces, programming by contracts
g. Static and dynamic dispatching
h. Generic types
3) Java in action
a. Java class hierarchy, Object class
b. Native types, autoboxing, strings
c. Exceptions
d. Annotations
e. Reflection
f. Library management, Gradle
g. The MVC (Model-View-Controller) pattern
h. Spring

Mod. 2
---------
1) Advanced programming in Java
2) Event-driven programming, callbacks, anonymous classes
3) Exceptions, error reporting, resource tracking
4) Parametric polymorphism: generics, constraints, first-class polymorphism
5) Pure/impure functional programming in object-oriented languages: lambda expressions, function objects, closures
6) Design patterns: factory, singleton, command, listener-observer, consumer-producer
7) Advanced programming techniques: type-driven programming with objects

Mod. 1
---------
Lecture notes provided by the teacher.

Additional material:
Ken Arnold, James Gosling, David Holmes: The Java Programming Language, 4th Edition
Timothy Budd, An Introduction to Object-Oriented Programming, 3rd edition


Mod. 2
---------
Suggested books and readings:

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

Scott Meyers
"Effective Modern C++"
O'Reilly Media Inc, 2015
The exam part related to Module 1 consists of a written test to be carried out at the end of the course or in any of the subsequent appeals. For the registration of the vote, it is necessary to overcome also the part concerning Module 2, for which reference is made to the relative Syllabus.
The grade will be based only on the written exam that will be composed of a theoretical part evaluating the knowledge of the most fundamental concepts of object-oriented programming languages (through open or multiple choice questions), and a practical part evaluating the knowledge of the Java language through some programming exercises.

As far as Mod. 2 is concerned, the course includes a written exam for each exam session. However, this test will be integrated with the one for Module 1. An oral exam specifically for Module 2 may be required at the discretion of the instructor, evaluating on a case-by-case basis. The purpose of the oral exam is to adjust the written exam score if it falls below the passing threshold or if explicitly requested by the student.
It is also possible to submit a project chosen from those proposed on the Moodle page. This is entirely optional and serves primarily as a coding exercise aimed at improving the understanding of the course concepts. However, if the project proves to be of particularly high quality, the instructor may round up the exam grade accordingly.
Mod. 1
---------
Lectures on the blackboard.
Programming exercises, also performed in the classroom.

Mod. 2
---------
Frontal course with a computer screen shared on the big display.
All the code written during classes is regularly committed on a Github repository.
Italian
written
Definitive programme.
Last update of the programme: 17/10/2024