Basic Information

Instructor:Martin Robillard (email tips)
Time and place:Tuesdays and Thursdays, 10:05-11:25, Stewart Biology S1/4
Office hours:Tuesdays 12:00-13:00 (in MC 114N), or by appointment.


Principles, mechanisms, techniques, and tools for software development. The course involves a significant project.

Sample Course Topics

Principles: Separation of concerns, encapsulation, substitutablity, interface segregation.
Mechanism: Exception-handling, serialization support, concurrency and synchronization, reflection.
Techniques: Design patterns, design by contract, unit testing, refactoring.
Tools: Integrated software development environment, automatic testing tools, coverage analyzers, static checkers.

Learning Outcomes

The learning outcomes for this course are organized along the four main conceptual axes of the course: principles, mechanisms, techniques, and tools. The following table lists the expected learning outcomes for the course (the table reads by row, from left to right).

After this course, you should be able to...

Name, using the proper terminology The important first principles of object-oriented software developmentThe common programming-language based mechanisms used to build OO software applicationsCommon software development techniquesA number of software development tools
Describe and explainThe purpose of each principle and how it can be appliedHow each mechanism worksHow to apply each technique and when it should be appliedThe theory underlying each tool, and the technique(s) the tool supports
ApplyEach principleEach mechanismEach techniqueEach tool
EvaluateWhether the application of a principle is appropriate to a given situationThe technical consequences of a solution involving the mechanismThe cost and benefits of using the technique in a given situationThe suitability of different tools for a given task
CreateA complete object-oriented application based on the first principles of object-oriented software development, the structured use of programming language mechanisms, the application of software development techniques, and the use of software engineering tools

For a concrete look at what you should be able to do in this ourse, have a look at the best projects from 2006, 2007, and 2008, 2009, and 2010.

Reference Material

Required Textbook: Horstmann, Cay. Object-Oriented Design and Patterns, 2nd Edition. Wiley, 2005. Available at the Paragraphe Bookstore.


Midterm exam25%
Final exam50%

Important Notes:

  1. If the grade of final exam exceeds that of the midterm, the grade of the final exam will replace the midterm grade.
  2. A mark of 50% or more for the project is required to pass the course, irrespective of the total final mark.
  3. The project will be completed in groups of 3. The project grade will be allocated equally to all team members. However, each team member must make non-trivial contributions to all milestones. Students who do not contribute to a milestone receive the grade of 0 for the milestone.

The following material is subject to evaluation:

Anything presented in class, all material in the mandatory reading, operational knowledge of the tools covered in the course, anything completed to meet the learning objectives of the project. The midterm will cover all lectures up to and including the lecture immediately before it. The final will cover everything.

Official Academic Integrity Statement McGill University values academic integrity. Therefore all students must understand the meaning and consequences of cheating, plagiarism and other academic offenses under the Code of Student Conduct and Disciplinary Procedures (see for more information). Note that we reserve the right to run plagiarism detection software on all software submitted as assignments.

Language Policy In accord with McGill University’s Charter of Students’ Rights, students in this course have the right to submit in English or in French any written work that is to be graded.


The project will involve the development of an interactive application we will call "Capone" (Canadian Political News). The application will access data from the website, process it in various ways, and display it according to a user's interests. The application will include a graphical user interface for PCs and for Android devices.

Submission Policy: Project milestones are assigned to groups: only one submission per group is necessary. Deadlines are provided with each milestone instructions on the myCourses site. All deadlines are firm. This is to ensure fairness, a speedy feedback, and consistency with the course schedule. Please plan ahead!. If you are not done by the deadline, submit your partial solution. The myCourses submission site allows you to submit early and to resubmit. To avoid the usual issues with last-minute submissions, you are encouraged to submit early. Do not wait until the last minute, no matter how strong the temptation might be. After a small grace period the system will block submissions. Milestones not submitted on time are subject to a significant penalty: -10% (absolute) immediately, plus -5% (absolute) per additional hour late. For example, a project graded as 85% late 3:15 hours would obtain a grade of 85 - (10 + 3x5) = 60%.

Distinguished Projects

Three teams completed projects that stood out in terms of excellent software quality, development beyond the basic requirements, and/or notable evidence of innovativeness. Congratulations to the following students for their notable achievement (in no special order):


In-class use of mobile computing devices: Laptops, mobile phones, and other gadgets can be used in class as long as this is done in a respectful and non-disruptive manner. Please note that loud typing, continual texting, gaming, and voice communication are disruptive activities and disallowed for that reason. No audio or video recording of any kind is allowed in class without the explicit permission of the instructor. If you are inconvenienced by the in-class use of computing devices (by others than yourself), please talk to the instructor. This policy is subject to revision at any point during the term. Additional background on the in-class use of computing devices at McGill.

This schedule is subject to change. It is strongly recommended to do the readings before class. The list of readings and references to required tools can be found on the myCourses page.

Preparation for the Midterm
DateLecture Topics
3 SepIntroduction; Project management; Project Description
5 SepProgramming with APIs
10 SepClass design; Scoping and encapsulation; Cloning
12 SepPolymorphism and the Iterator design pattern
17 SepDesign by contract; Introduction to unit testing; Introduction to Object-Oriented Design
19 SepObject Identity and Lifecycle
24 SepComposite and Decorator Design Patterns
26 SepObserver Design Pattern
1 OctInheritance-based reuse
3 OctAbstract Classes; Template Method Design Pattern
8 OctError Handling
10 Oct
15 OctMidterm
17 OctObject-Oriented Design with UML
22 OctSoftware Quality Checking
24 OctIntroduction to GUI design with Swing
29 OctGUI Design and Implementation
31 OctVisitor Design Pattern
5 NovThreads
7 NovSynchronization
12 NovFacade, Command, and Prototype Patterns
14 NovGeneric Types
19 NovAdvanced Testing Techniques
21 NovNo Lecture
26 NovIntroduction to Android Development
28 NovReview for the Final