Computer Programming Ii

A.Y. 2022/2023
6
Max ECTS
64
Overall hours
SSD
INF/01
Language
Italian
Learning objectives
The course aims to expand the procedural programming skills acquired during the "Programming" course, by presenting some abstractions and concepts useful for the design, development and maintenance of large size programs. The focus is on the object-oriented paradigm, with particular emphasis on the process of specification, modeling of data types, and design. Fundamental concepts of functional programming may also be introduced
Expected learning outcomes
By the end of the course the student will be able to:
- explain fundamental concepts and main properties of the object oriented programming and, possibly, functional programming
- comprehend and define the specification of a program, design and implement it with object oriented programming methodologies and, possibly, functional programming methodologies
Single course

This course cannot be attended as a single course. Please check our list of single courses to find the ones available for enrolment.

Course syllabus and organization

Single session

Responsible
Lesson period
First semester
Course syllabus
The course will address the design, implementation, and analysis of programs according to the object-oriented paradigm. Furthermore, the basics of functional programming and software engineering will be presented.

The topics addressed during the course are:

- Fundamentals of the object-oriented programming
-- Abstraction
-- Encapsulation and Information hiding
-- Inheritance and Composition
-- Polymorphism
- Principles of Java programming
-- Basic data types
-- Flow control constructs
-- Functions and Methods
-- Classes (concrete, abstract, internal)
-- Interfaces (and default methods)
- Notions of software engineering
-- Debugging and verification techniques
-- Design patterns
- Notions of functional programming
-- Immutability, Pure functions, First class, and Higher-order functions
-- Lambda calculus
Prerequisites for admission
Having passed the Programming exam is mandatory for the Programming II course. Specifically, the students are required to know at least one imperative programming language and to be able to write programs that use the fundamental constructs of the imperative programming.
Teaching methods
The course is divided into a theory part and a laboratory part. The theory part consists of lectures. The laboratory part alternates lectures and exercise activities.
Teaching Resources
The textbook for the teaching is: "Program development in Java" by Barbara Liskov and John Guttag.
Additional teaching material (slides, exercise repository) will be made available on the official Ariel website of the teaching.
Assessment methods and Criteria
The exam consists of a written test, which lasts indicatively 3 hours, with theory and laboratory parts.
The theory part consists of open and closed-ended questions regarding the topics covered during the course.
The laboratory part consists of exercises that require to project and implement (or comprehend and modify) programs, based on assigned specifications.
The weighof the theory and laboratory parts will be indicatively 0.5/1 for each, with possible variations based on the difficulty of the actual exercises.

During the exam, the students will be able to consult the official java API specifications.

The exam aims to evaluate
* the knowledge of the topics covered during the course.
* the ability to apply this knowledge to the resolution of concrete problems through the design and the implementation of code.

Exam results will be notified through SIFA.
INF/01 - INFORMATICS - University credits: 6
Laboratories: 32 hours
Lessons: 32 hours
Shifts:
Professor: Ahmetovic Dragan
Turno A
Professor: Ahmetovic Dragan
Turno B
Professor: Valtolina Stefano
Professor(s)
Reception:
On appointment
via Celoria 18, Third floor, Room 3006