Ricerca di contatti, progetti,
corsi e pubblicazioni

Software Design & Modeling


Software is built on abstractions, and the quality of those abstractions determines usability and maintainability of software. This course presents techniques and methods to understand the design of existing software, to improve it, and to write programs using the right abstractions. The main focus of the course are object-oriented design mechanisms (with occasional short detours into other paradigms such as functional programming). After an introductory recap of object-oriented programming, the course discusses how to assess the design quality of object-oriented systems, how to identify and use so-called design patterns, and how to introduce rigorous yet practical means of documenting design and functionality. The course mainly follows a hands-on, learning-by-doing approach with assignments to be performed on open-source systems. For example, students assess the design of an open-source application, identifying shortcomings, and suggesting ways of fixing them. Java is the reference programming language.




  • N. Fenton, J. Bieman: Software metrics: a rigorous and practical approach. 3rd edition, CRC press, 2014
  • M. Fowler: Refactoring: Improving the design of existing code. Addison-Wesley Professional, 1999
  • B. Bruegge, A. Dutoit: Object-oriented software engineering using UML, patterns, and Java. 3rd Edition, Pearson, 2010
  • B. Meyer: Object-oriented software construction. 2nd edition, Prentice Hall, 1997



Furia C. A.

Docente titolare del corso

Asadi S.


Informazioni aggiuntive

Anno accademico
Offerta formativa
Master of Science in Software & Data Engineering, Corso di base, Corso e laboratorio, 1° anno