COMP 303: Software Design



General Information:

Instructor: Jin Guo

Class Time: TR 4:05 PM - 5:25 PM

Location: Bronfman Building 151

Office Hour: Instructor: Wednesday 10am-11am, MC328

                    TAs: see below.


Course Description:

This course provides an in-depth introduction to the discipline of software design for building realistic and high-quality software applications. It will focus on object-oriented programming techniques, and cover topics related to managing software complexity and verifying that they work as expected. It will use Java for all the code examples and assignments. However, the considerations during the design process apply in all languages for practical software development. 


Expected Outcome:

After completing this course successful students should be able to:

     Properly explain and apply general Design Principles (separation of concerns, encapsulation, substitutability, interface segregation, etc.) and important Design patterns;

     Properly explain and apply design techniques such as UML Diagrams and Design by Contract;

     Effective use programming language mechanisms such as exception handling, concurrency and synchronization, reflection;

     Analyze and evaluate the quality of design solutions; correctly identify design smells and apply appropriate refactoring to eliminate them;

     Gain experience on software development tools such as modern IDEs (Eclipse), automatic documentation and testing tools (JUnit and JavaDoc) and version control system (Git).



Reference Material:

·      Introduction to Software Design with Java, by Martin Robillard, lecture note for COMP 303. (LN)

·      The Pragmatic Programmer by Andrew Hunt and David Thomas, Addison-Wesley, 2000. (PP)

·      Effective Java by Joshua Bloch, 2nd ed., Addison-Wesley, 2008; 3rd ed. 2018. Either edition is fine. (EJ)


While I recommend you buy physical books, the eBooks can be accessed following the instruction here.



COMP 206 and COMP 250


Teaching Assistant:


Email Address

Mathieu Nassif

Cheryl Wang

Deeksha Arya

Shi Yan Du

Alexander Nicholson

Kian Ahrabian



TA Office Hours:



Tuesday 2pm - 3pm

Mathieu Nassif , Deeksha Arya

Wednesday 1pm – 2pm

Alexander Nicholson, Kian Ahrabian

Friday 1pm - 2pm

Shi Yan Du, Cheryl Wang

Location: Trottier 3104


Assessment and Evaluation:

Assessment Method




in class + online


Lab tests

4 sessions (Trottier 3120)



Feb 28th



Apr 30th, 9am



·      It’s important to attend the lectures in order to gain the best learning experience – it cannot be replaced by watching the videos afterward. There will be random participation/attendance sheets to collect during this semester;

·      Our TA will try their best to support your learning. But considering this is a big class – many of you will have similar questions or concerns and many of you have will answers to other people’s questions, we encourage you to discuss your questions about the lectures and exercises online;

·      The participation during the class and the online discussion will count 10% of your final grades; The top 10% contributors for the online discussions will gain bonus credits of 3%;

·      Every part of the lecture will come with assignments and exercises. Those are for your practice and will not be graded. Instead, your practical skills will be evaluated through 4 lab tests that count 20% of your final grades.

·      Lab tests start week four. You are responsible to book the slot of lab test for each session in advance with the TAs.

·      Missing any of the lab test sessions, midterm or final exam will result zero grade for that assessment.

·      Any form of plagiarism, cheating is strictly banned during midterm or final exam. Integrity is crucial to this course and your future career. Any violation against academic integrity will be taken very seriously. For more information, please refer here.



Tentative Schedule:







Jan 8th


ACM Code of Ethics and Professional Conduct

LN:M0, PP:1, 6

Jan 10th

M1-Encapsulation - 1

LN:M1, EJ3:15, 16, 17, 57,



Jan 15th

M1-Encapsulation - 2

LN:M1, PP:4, 21, 23, 24, 44, EJ3:56, 68, 71

Jan 17th

M2-Types and Polymorphism -1

LN:M2, PP:8, EJ3:14, 22, 64



Jan 22nd

M2-Types and Polymorphism - 2

LN:M2, EJ3:24, 26, 29, 30, 31

Java Generics Tutorial

Jan 24th

M2-Types and Polymorphism - 3




Jan 29th

M3-Object State - 1

LN:M3, EJ3: 10, 11, 54, 55

Jan 31st

M3-Object State - 2

LN:M3, EJ3: 1, 3



Feb 5th

M4-Unit Testing - 1

LN:M4, PP:34

Feb 7th

M4-Unit Testing - 2

LN:M4, PP:43



Feb 12th

M5-Composition - 1

LN:M5, EJ3: 13

Feb 14th

M5-Composition - 2

LN:M5, PP: 26



Feb 17th

M6-Inheritance - 1

LN:M7, EJ3:19,20

Feb 19th

M6-Inheritance - 2

LN:M7, EJ3:18



Feb 26th

Content Review


Feb 28th





Study Break




March 12th

Midterm Review


March 14th

M7-Inversion of Control - 1

LN: M6



March 19th

M7-Inversion of Control - 2

LN: M6

March 21st

M8-Design Patterns - 1

Design Patterns GOF book Visitor Pattern



March 26th

M8-Design Patterns- 2


March 28th

M9-Concurrency - 1

Java Concurrency in Practice Chapter 1,2,3



April 2nd

M9-Concurrency - 2


April 4th


Refactoring: Improving the Design of Existing Code



April 9th

M11-Design for Usability

10 Usability Heuristics for User Interface Design

Improving API Usability

April 11th

M11- Software Engineering Ethics and Wrap-up