Computer programming ii

A.Y. 2021/2022
Overall hours
Learning objectives
The course, which is a natural prosecution of "Programming" course, aims to present some abstractions and concepts useful for the design, development and maintenance of programs large size. The focus is on the object-oriented paradigm, with particular emphasis on the process of specification, modeling of data types, and design, and on some of the main design patterns.
Expected learning outcomes
The student is able to deal with core aspects of object oriented programming and she knows some of the most common design patterns. She can evaluate code bases with respect to their qualities (such as Reusability, Verificability, Evolvibility, Maintainability) and she is able to design a set of interfaces and classes suitable to solve a simple problem whose specification is given in natural language.
Course syllabus and organization

Single session

Lesson period
First semester
Course syllabus
The main topics that will be covered during the course are:
- Encapsulation
- Information Hiding
- Type and Interfaces
- Object states
- Unit testing
- Mocking e Composition
- Law of Demeter
- Inheritance
- Abstract class
- Inversion of Control
- GUI, JavaFX
- Design Pattern: Composite, Decorator, Adapter, Command, Template, Observer, MV*
Prerequisites for admission
Knowing how to write and develop programs that use the fundamental constructs of imperative programming; knowing and being able to use profitably at least one imperative programming language.
Teaching methods
The theory part is carried out through lectures. The laboratory part alternates lectures with exercises and practical activities carried out individually or in small groups.
Teaching Resources
The reference text is:

M.P.Robillard - Introduction to Software Design with Java, Springer 2019.

For some topics we use readings recommended by:

J.Bloch - Effective Java - Addison-Wesley Professional, 2017.

Slides presented in class and repositories with the code presented and discussed in class or in laboratories are also provided.

The material is available from the course website:
Assessment methods and Criteria
The exam consists of a laboratory test and an oral test.
In the laboratory test, lasting 4 hours, exercises are assigned that require you to create (or understand and modify) programs in Java that highlight the skills acquired regarding the structuring and design of software also through the use of design patterns.

The exam ends with the oral test, which is accessed after passing the laboratory test, which focuses on the discussion of the laboratory test relating to some topics covered in the course.

At the end of the oral exam, the overall evaluation is expressed in thirtieths, taking into account the following parameters: degree of knowledge of the topics, ability to apply knowledge to the resolution of concrete problems, ability of critical reasoning, clarity of exposition and language properties.
INF/01 - INFORMATICS - University credits: 6
Laboratories: 32 hours
Lessons: 32 hours
Turno A
Professor: Bellettini Carlo Nicola Maria
Turno B
Professor: Monga Mattia
By appointment only
Office 5004, Via Celoria 18, Milan