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 (including both modules) consists of a written test to be taken at the end of the course or in any of the subsequent exam sessions.
The evaluation will be based solely on the written test composed of a theoretical part that will evaluate the student's knowledge of the object-oriented programming paradigm with closed and open-ended questions, and a practical part that will evaluate the specific knowledge of the Java language through programming exercises in this language.
An oral test will be requested at the discretion of the teacher, evaluating case by case. It is intended to adjust the grade of the written test if it is below the passing threshold or if it is explicitly requested by the student.
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: 26/11/2024