Hide menu

TDDB84 Design Patterns

Course information

This page is currently reflecting the proposed format for the Fall 2014 edition of the course. The contents of this page is still subject to minor changes.

Course goals

After the course, students will be able to
  1. Identify and explain software design principles and design patterns in existing object-oriented software.
  2. Apply software design principles and design patterns when working with existing object-oriented software.
  3. Describe the purpose and consequences of design patterns in object-oriented software
  4. Critically evaluate software design principles and design patterns in relationship to desired software qualities.
  5. Analyze the relationship between software design principles, design patterns and and programming languages and application domains.

Course organization

The course is organized around two main activities: writing and sharing papers on a selected set of topics related to Software Design principles and Design Patterns, and conducting a series of programming assignments related to understanding design principles and patterns. To support those activities, there will be a series of larger seminars and a set of lab sessions scheduled. Furthermore, there will be recorded lecture material on concrete design patterns as well as on the use of design principles in the course. For students who take the course in Norrköping, there will be an opportunity to take the course locally through video conferencing facilities used for seminars, and a locally available lab assistent during the lab sessions.

Course activities


There will be a series of weekly seminars in the course, with the following themes:
  • The lab environment: Questions about FreeCol, GitLab, Eclipse, the course web and forums
  • Finding Design patterns: Questions about the first lab
  • Paper seminar 1: Review of scientific literature on design principles and patterns.
  • Paper seminar 2: Submission of abstract along with the grade you are aiming for, and peer-review of abstract by peer students. Discussions about the topics and format of your papers
  • Refactoring code: Questions about the second lab
  • Paper seminar 3: Submission of the first draft paper, and peer-review of papers by peer students. Discussions about the scope of your papers and general topics about your selected topics. Revision of grade aims possible (see description of examination below).
  • Paper seminar 4: Submission of the second draft paper, and peer-review of paper by peer students. This is supposed to be the final seminar where you provide feedback to, and receive feedback from your peers. Following this seminar, your papers will be reviewed and you will receive feedback from the examiner, especially to students who need to work on their papers to ensure they get they get the grade they strive for.
  • Paper seminar 5: Presentation of a selected set of papers.

Lab assignments

The course will have three main lab assignments that you perform in groups. There will be an oral examination at the end of the lab series, where you get to bring your work and reflections individually to a lab assistant and talk about your work. The lab assignments are:
  1. Analyzing an application with respect to design decisions taken and the design patterns that are found to be implemented or needed.
  2. Introducing new tests in an application and studying what will be required to run tests in the application.
  3. Extending the application, sharing the extensions with other students and reflecting on the outcome.


The examination of the course is divided between labs and the submitted, individual papers. The labs are examined by written reports on your work in the first two labs, and an oral examination with a lab assistant at the end of the lab course. See more information on the page describing the labs. The papers that you write during the course can be on any of a number of different topics for you to choose from when you write your essays:
  • A comparison of programming paradigms and design patterns, e.g. comparing functional reactive programming to the Observer pattern
  • A study of the relationship between software qualities and the use of design patterns.
  • Application frameworks, metaprogramming and the implementation of design patterns: describing implementations of design patterns in application frameworks such as PostSharp, Spring, or other frameworks of your choice.
  • A study of design patterns in dynamic languages: Implementing design patterns in a dynamic language such as Lisp, Ruby, or Javascript.
For grade 3, you are required to provide
  • Submissions and reviews as required before seminars. Failure to comply means that you will have to do a separate submission to the examiner, and no higher grade is possible than 3. Seminar attendance is not required for pass, but submissions and reviews are.
  • A 5-page report in English on your selected topic, using peer-reviewed sources. You will need to reflect on the rationale for and implementations of design principles and design patterns within the scope of your selected topic. The report shall conform to the standards of a scientific report with respect to its use of sources and its structure. You are required to provide annotated code examples (not necessarily your own) that demonstrate that you have understood the topic at hand, and you need to take the comments from your peers and the examiner into account in your report.
For grade 4, you are required to
  • Do what is required for grade 3, and also
  • generalize your results by referring to at least two different applications, languages, paradigms or domains, with code examples and reasoning pertaining to both.
  • On-time submission of an abstract or report drafts to seminars, as well as peer reviews
For grade 5, you are required to
  • Do what is required for grade 4, and also
  • provide your own code examples of at least two implementations of design patterns for the purpose of your report. If your report concerns metaprogramming, your implementations need to use metaprogramming. If your report concerns design patterns in dynamic languages, your implementations need to be in the dynamic language(s) you have chosen. If you compare programming paradigms and design patterns, you will need to provide your own example of, for instance, functional reactive programming and another programming paradigm. Et cetera...

Page responsible: Ola Leifler
Last updated: 2014-03-19