Design Patterns

Learning Outcomes

  1. recognize symptoms of inadequate software design
  2. discuss advantages of dynamic polymorphism, templates, and duck typing
  3. explain the major principles of software design and recognize cases of their violation
  4. evaluate the quality of multiple software designs based key design principles
  5. recognize different design patterns in uncommented code
  6. compare the adequateness of different design patterns in the context of a given design problem
  7. apply design principles for conceiving high-quality software components

Forms of Teaching


The course includes two hours of lectures per week.


The course includes four laboratory exercises.

Grading Method

Continuous Assessment Exam
Type Threshold Percent of Grade Threshold Percent of Grade
Laboratory Exercises 40 % 20 % 40 % 0 %
Mid Term Exam: Written 0 % 40 % 0 %
Final Exam: Written 0 % 40 %
Exam: Written 50 % 80 %
Exam: Oral 20 %

Week by Week Schedule

  1. Introduction to object oriented design, Overview of UML, Structure diagrams
  2. Dynamic dispatch: definition of method-call, Subtyping, Object-oriented idioms for encapsulation, Data layout for objects and activation records
  3. Simplicity, regularity, orthogonality
  4. Introduction to software design patterns, Design patterns, Refactoring designs using design patterns
  5. Behavioral patterns
  6. Behavioral patterns
  7. Structural patterns, Eager vs; delayed evaluation
  8. Midterm exam
  9. Creational patterns, Static and dynamic linking
  10. Structural patterns
  11. Collectional patterns
  12. Structural patterns
  13. Behavioral patterns
  14. Creational patterns
  15. Final exam

Study Programmes

University undergraduate
Computer Engineering (module)
Elective Courses (6. semester)
Computer Science (module)
Elective Courses (6. semester)
Computing (study)
Elective Courses (6. semester)
Electrical Engineering and Information Technology (study)
Elective Courses (6. semester)
Software Engineering and Information Systems (module)
Elective Courses (6. semester)
University graduate
Computer Engineering (profile)
Elective Course of the profile (2. semester)
Computer Science (profile)
Profile obligatory course (2. semester)
Software Engineering and Information Systems (profile)
Profile obligatory course (2. semester)


(.), Design Patterns. Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Addison-Wesley Professional. 2009.,
(.), Agile Software Development: Principles, Patterns, and Practices. Robert C. Martin. Prentice Hall. 2003,

For students


ID 183426
  Summer semester
L1 English Level
L1 e-Learning
30 Lectures
15 Exercises
8 Laboratory exercises

Grading System

89 Excellent
76 Very Good
63 Good
50 Acceptable