Practical activities (exercises and demos) are carried out during the normal lecture hours. For this reason each credi unit for laboratory work is considered equivalent to 8 lecture hours.
Furthermore, the student should have developed practical experience in using typical programming tools, including Eclipse, Intellij, git, maven.
Procedural abstraction: specification, contracts, pre and post-conditions, assertions, exceptions. Checked and unchecked exceptions, reflection and masking; overloading.
Data abstraction: abstract data types, abstract and concrete specification, invariants.
Abstraction of iteration: iterators.
OO Design with Card-Responsability-Collaboration. State, behavior and protocol. Single Responsibility Principle.
Abstraction on types: abstract classes, interfaces; substitution principle, equality, polymorphism, inheritance. Parametric types, internal classes, anonymous classes. Dependency inversion.
Functional programming in Java.
Design patterns: factory, builder, decorator, observer.
Complementary books: J. Bloch. Effective Java, Addison-Wesley Professional; 3 edition (January 6, 2018), ISBN-13: 978-
R. Martin. Clean Code: A Handbook of Agile Software Craftsmanship. ISBN-13: 978-0132350884, Prentice Hall; 1 edition (August 11, 2008).