Complements of Computer Science, V, 1, 2C, 0S, 0L, 1P, E, 5


Course description

This course aims at introducing to new trends in Computer Science. Therefore, course topics may vary significantly year by year. For now we chose a key and challenging topic in software engineering:

Design Patterns

A Design Pattern is a solution to a reoccurring problem in a context. The study of design patterns can help advance the technical expertise of software professionals. Each pattern represents a best practice solution to a software problem in some context. Design patterns encapsulate proven, reusable solutions to common design issues. The course will cover the rationale and benefits of object-oriented software design patterns. Several example problems will be studied to investigate the development of good design patterns. Students are expected to practice their use in modeling, designing, building, and validating practical high-quality software systems. This course has a project assignment.

Prerequisite(s) & Corequisite(s)

"Software Development Methods". In-depth knowledge of UML and worthy experience of programming in Java or C++.

Textbook(s) and web materials

•  Gamma, Helm, Johnson, and Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software , Addison-Wesley, 1995

•  C. Larman, Applying UML and Patterns - An Introduction to Object-Oriented Analysis and Design and the Unified Process , 2/e, Prentice Hall, 2002.


Course objectives

The overall goal of this course is to gain knowledge of software design best practices. By the end of the semester, students will:

  • be conversant in the language of design patterns;
  • demonstrate a working knowledge of the worth of software reusability;
  • have the academic background to follow current literature in design patterns.
Topics covered
I. Introduction

•  Reviewing the main aspects of OOAD and UML (2h)

•  What design patterns are and how they are specified (1h)

II. Fundamental Design Patterns

•  Specialization, Composition, Delegation, Interface, Marker, Proxy (4h)

•  Low Coupling, High Cohesion, Controller (2h)

III. Design Patterns

•  Creational Patterns: Factory Method, Builder, Prototype, Singleton (5h)

•  Partitioning patterns: Filter, Composite (3h)

•  Structural Patterns: Adapter, Façade, Decorator, Iterator, Composite (5h)

•  Behavioral Patterns: Command, Observer, Template Method (5h)

III. Frameworks
•  A Framework Case Study (3h)

Laboratory consists of discussion, problem solving, and presentation of homework solutions. Pre-reading of the lecture notes and class attendance is essential and students are expected to be prepared and to actively participate in class activities. There are about 7 assignments, due two weeks after the student get them. Assignments should be prepared for the next class period. Some may be collected for grading; others will be reviewed in class.


The project to be undertaken is a team project : it is expected to work in teams of three to develop a software application . Each student is expected to work as a member of your group in this course and cooperate with his/her colleagues. Each group will be responsible for assigning tasks to its team members, but the instructor must be informed about this assignment. Each of the seven homework assignments will contribute to the completion of the final project. The project is a requirement for the competition of the course and will be graded individually, thus it is the responsibility of the students to document and give full details on his/her contribution to the project.
Project assignments include the overall development of a software application.


Grading will be for the project assignment. The points will vary depending the patterns usage, CASE tools usage, documentation quality, and effort.

Professional significance

An auxiliary objective of this course is to give the student a working knowledge of major ideas and concepts of software reusing, largely acknowledged as the major source of productivity gain in software development. This advanced course provides students in Computer Science with skills to create high quality object-oriented designs exhibiting improved flexibility, reduced maintenance costs, and with increased understanding of the resulting code.