Search for contacts, projects,
courses and publications

Software Design & Modeling


The focus of this course is on object-oriented design. The course starts with an introduction to object-oriented programming. Java is used as the reference programming language. Then, in the first part of the course students will (i) learn how to assess (both manually and automatically) the design quality of object-oriented systems, and (ii) get a deep understanding of design patterns. The course takes a hands-on, learning-by-doing approach with assignments performed on open source systems. For example, students will be required to run a "design critique" of well-known open source systems, identifying design flaws and refactoring them. In the second part of the course, students will apply the acquired expertise in the context of a group project.




  • Object-Oriented Software Engineering Using UML, Patterns, and Java, 3rd Edition. B. Bruegge, A. Dutoit. Pearson 2010.
  • Design Patterns: Elements of Reusable Object-Oriented Software. E. Gamma, R. Helm, R. Johnson, J. Vlissides. Addison Wesley 1994.
  • Refactoring: Improving the Design of Existing Code. M. Fowler. 1999



Bavota G.

Course director

Additional information

Academic year
Master of Science in Software & Data Engineering, Core course, Lecture and Laboratory, 1st year