Computer programming ii

A.Y. 2021/2022
Overall hours
Learning objectives
The course, part of the ideal path starting with the "Programming" course and prosecuting with the "Software Engineering" one, 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.
Expected learning outcomes
The students must be able to apply the concepts, techniques and tools shown in the lectures to the design and development of programs of considerable size, involving a non negligible number of suitably organized data types. The student must fully understand and be able to discuss, with clear and appropriate language, his solutions and their possible criticalities, comparing them to other available solutions.
Course syllabus and organization

Single session

Lesson period
First semester
Synchronous videolessons (if the course will be taught remotely). Videolessons, in case, will not be recorded.
Course syllabus
The course is centered around the design, implementation and analysis of programs according to the object oriented paradigm. To this end, the course includes both a more abstract and principled treatment of the topic, and a more practical and concrete presentation, carried out through examples based on the Java programming language.

Regarding the principles, the following are introduced and discussed:

* the use of abstractions of various levels (such as methods, abstract data types, external iteration, extension and delegation),

* some conceptual tools for reasoning about such abstractions (such as the representation invariant, abstraction function, pre/post-conditions, side effects, induction on data types ),

* some criteria for assessing the quality of the object oriented code project (such as encapsulation, data hiding, maintainability, reuse and extensibility),

* some verification techniques (such as unit tests) and debugging techniques.

Regarding the Java language, the following aspects of the language are presented:

* flow control constructs (sequence, iteration and selection),

* basic data types,

* functions (static methods),

* classes (concrete, abstract and internal),

* interfaces (with default methods),

* heredity and polymorphism,

* generic types (use and introduction to design and implementation, type and wildcard constraints).
Prerequisites for admission
Here is some preliminary knowledge that it is good to have acquired in a solid way before attending the lessons:

* programming,

* basic demonstration techniques,

* elementary aspects of formal languages.
Teaching methods
Lectures. Attendance is recommended.
Teaching Resources
Course textbooks are:

* Barbara H. Liskov, John Vogel Guttag (2000) Program Development in Java: Abstraction, Specification, and Object-Oriented Design Addison-Wesley Professional,

* Joshua Bloch (2017), Effective Java, Addison-Wesley Professional.
Assessment methods and Criteria
There are no ongoing tests. The final test (that has a duration of approximatively three hours) consists on the design and development of a software according to assigned specifications; the written test, in case the vote exceeds 23/30, is followed by an individual oral interview (that is mandatory for votes above 27/30, and optional in the other case). The candidate must demonstrate:

* knowledge of definitions and fundamental notions regarding the aspects of object orientation and programming,

* the ability to apply this knowledge to a simple concrete case through the development of code fragments.
INF/01 - INFORMATICS - University credits: 6
Practicals: 24 hours
Lessons: 32 hours
Educational website(s)
room S207 via Comelico, 39