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.

 

Prerequisites:

COMP 206 and COMP 250

 

Teaching Assistant:

Name

Email Address

Mathieu Nassif

mathieu.nassif@mail.mcgill.ca

Cheryl Wang

wenting.wang@mail.mcgill.ca

Deeksha Arya

deeksha.arya@mail.mcgill.ca

Shi Yan Du

shi.du@mail.mcgill.ca

Alexander Nicholson

alexander.nicholson@mail.mcgill.ca

Kian Ahrabian

kian.ahrabian@mail.mcgill.ca

 

 

TA Office Hours:

Time

TAs

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

When

Weight

Participation

in class + online

10%

Lab tests

4 sessions (Trottier 3120)

20%

Midterm

Feb 28th

30%

Final

Apr 30th, 9am

40%

 

·      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:

Week

Date

Content

Reading/Reference

 

1

Jan 8th

Introduction

ACM Code of Ethics and Professional Conduct

LN:M0, PP:1, 6

Jan 10th

M1-Encapsulation - 1

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

 

2

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

 

3

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

LN:M2

 

4

Jan 29th

M3-Object State - 1

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

Jan 31st

M3-Object State - 2

LN:M3, EJ3: 1, 3

 

5

Feb 5th

M4-Unit Testing - 1

LN:M4, PP:34

Feb 7th

M4-Unit Testing - 2

LN:M4, PP:43

 

6

Feb 12th

M5-Composition - 1

LN:M5, EJ3: 13

Feb 14th

M5-Composition - 2

LN:M5, PP: 26

 

7

Feb 17th

M6-Inheritance - 1

LN:M7, EJ3:19,20

Feb 19th

M6-Inheritance - 2

LN:M7, EJ3:18

 

8

Feb 26th

Content Review

 

Feb 28th

Midterm

 

9

 

Study Break

 

 

10

March 12th

M7-Inversion of Control - 1

LN: M6

March 14th

M7-Inversion of Control - 2

LN: M6

 

11

March 19th

M8-Design Patterns - 1

 

March 21st

M8-Design Patterns- 2

 

 

12

March 26th

M9-Concurrency - 1

 

March 28th

M9-Concurrency - 2

 

13

April 2nd

M10-Refactoring

 

April 4th

M11-Design for Usability

 

14

April 9th

M11- Software Engineering Ethics

 

April 11th

Wrap-up