Methods and techniques of object-oriented software design: extendibility and reusability. Information hiding, Classes, Interfaces, Objects, Inheritance, object composition and delegation. UML: class diagrams and interaction diagrams. Automated tests. Design principles and Design patterns.
Slides and tutorials available from the Moodle site of the course.
Some books for studying in deep some subjects might be suggested during the course
Learning Objectives
Knowledge acquired:
- Advanced mechanisms of Object-Oriented Programming design;
- Design principles for clean code and schemes of advanced reusable solutions to commonly occurring problem in software design.
- Base techniques for test automation
Competence acquired(at the end of the course):
students will demonstrate an understanding of object-oriented principles for designing and implementing reusable and extendible software components.
Skills acquired (at the end of the course):
skill of developing flexible software, using advanced object-oriented techniques and testing.
Prerequisites
Courses required: Programming
Courses recommended: Algorithms and data structures.
Teaching Methods
class lessons and some exercises in workshops
Further information
Further possible additional information (including meetings for questions) will be published in the Moodle site of this course, during the course.
Type of Assessment
The exam consists of a project to be done as homework (showing the student is mastering design principles and OO principles of the course) and an oral exam with interrogation on the whole program and on the project.
To access the oral exam it is necessary to pass the project.
The project must be implemented in in Java and the topic of the project is chosen by the student.
During the oral exam we evaluate the knowledge of the subjects of the course and the correct technical language.
The final grade is the average of the grade for the project and the grade for the oral exam, provided both are sufficient.
Course program
Oject-oriented techniques for software construction: design principles and language features in order to achieve extendibility, reusability and compatibility.
Classes, Encapsulation and Information Hiding.
UML (Unified Modeling Language): the class diagram for analysis, design and documentation.
Inheritance. Object composition and delegation. Abstract classes.
Classes as Types. Polymorphism by subtyping and Genericity.