Skip to content

Free University of Bozen-Bolzano

Object Oriented and Functional Programming

Semester 2 · 76277 · Bachelor in Computer Science · 6CP · EN


This course belongs to the type "Attività formativa caratterizzante" and the subject area is "Scientifico-Tecnologico".

The course is designed to help students develop generic, object-oriented and functional programming skills. After completing the course, students should be able to implement algorithms to solve simple programming problems and select appropriate data structures, write readable, concise, modular, and documented code.

Lecturers: Julien Louis Michel Corman

Teaching Hours: 40
Lab Hours: 20
Mandatory Attendance: Attendance to lectures and labs is optional. However, non-attending students should contact the lecturer at the start of the course to discuss the modality of their independent study. The evaluation process is slightly different for attending and non-attending students. It is described in the fields "Assessment" and "Evaluation criteria and criteria for awarding marks" below.

Course Topics
• Object-oriented design: objects, classes, interfaces, inheritance and polymorphism • Abstract data types (set, list, associative array, queue, ...) and related data structures (linked list, hash table, ...), • Composite types, type inference, generics • Basic input/output, serialization, streams, error handling, custom exceptions, debugging • Introduction to functional programming: function composition, recursion, currying, closures, function types • Functional principles applied to object-oriented programming: immutability, pure functions, lambda abstractions

Teaching format
The course includes frontal lectures and lab exercises.

Educational objectives
Knowledge and Understanding - D1.2: Know in details the fundamental principles of programming - D1.3: Have a solid knowledge of the most important data structures and programming techniques Applying knowledge and understanding - D2.2: Be able to develop small and medium size programs using different programming languages and paradigms. - D2.3: Be able to solve problems using programming methodologies. Ability to make judgments - D3.1: Be able to collect and interpret useful data and to judge information systems and their applicability. - D3.2: Be able to work autonomously according to the own level of knowledge and understanding. - D3.3: Be able to take the responsibility for development of projects or IT consulting. Communication skills - D4.1: Be able to use one of the three languages English, Italian and German, and be able to use technical terms and communication appropriately. - D4.4: Be able to work in teams for the realization of IT systems. Learning skills - D5.1: Have developed learning capabilities to pursue further studies with a high degree of autonomy. - D5.2: Have acquired learning capabilities that enable to carry out project activities in companies, public institutions or in distributed development communities. - D5.3: Be able to follow the fast technological evolution and to learn cutting edge IT technologies and innovative aspects of last generation information systems.

Assessment
The assessment is based on assignments, which focus on topics taught during lectures and are designed to motivate students to study throughout the semester while consolidating the theoretical concepts covered in class. The assignments are individual. Additionally, a written evaluates whether students have acquired the expected notions and skills.

Evaluation criteria
Final marks will be calculated as follows: up to 60 points will be awarded for assignments, and up to 40 points for the written exam. Students who attend the course and labs will benefit from an easier grading scheme, but may be asked in return to explain the code that they submitted for some assignments (during the labs).

Required readings
  • Lecture material on the course's website 
  • Kathy Sierra, Bert Bates, and Trisha Gee. Head First Java: A Brain-Friendly Guide. O'Reilly Media, Sebastopol, CA, 3rd edition, June 2022. ISBN 978-1-4919-1077-1. 
  • Herbert Schildt. Java: The Complete Reference. McGraw Hill, 11th edition, 2018. 


Supplementary readings

Joshua Bloch. Effective Java. Addison-Wesley Professional, Boston, 3rd edition, 2017. ISBN 978-0-13-468599-1. 



Further information
- IntelliJ IDEA (https://www.jetbrains.com/idea/) - Visual Studio Code (https://code.visualstudio.com) - JDK 21 (https://openjdk.org/projects/jdk/17/) - Maven (https://maven.apache.org) - As operating system, Linux or MacOS are recommended


Download as pdf

Sustainable Development Goals
This teaching activity contributes to the achievement of the following Sustainable Development Goals.

4

Request info