Basic Information

Instructor:Martin Robillard (email tips)
Time and place:Mondays and Wednesdays, 11:35-12:55, ENGMD 279
Office hours:Mondays 13:30-14:30; Wednesdays 16:00-17:00 (in MC 114N).
TAs:Emil Davinov, Jelena Vlasenko, Gayane Petrosyan, Gias Uddin (email tips)
TA availability (in TR3110):Gayane: Tu 14:30-15:30; Emil: We 13:00-14:00; Jelena: We 17:00-18:00; Gias: Th 13:00-14:00


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 exam (optional)0%/25%
Final exam65%/40%

Important Notes:

  1. Writing the midterm exam is optional. For students who do not write the midterm, the weight of the final will be 65%. For students who write the midterm, the respective weights of the midterm/final will be either 25%/40% or 0%/65%, whathever produces the highest final 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 4. 50% of the total project grade will be allocated equally to all team members, and 50% of the grade will be adjusted based on each member's contributions, as reported in a project group report submitted with each milestone. However, each team member must make contributions to all milestones. Teams should report any student who does not contribute anything to a milestone. Students who do not contribute to a milestone receive the grade of 0 for the milestone.
  4. It will be possible to obtain bonus marks worth up to 5% of the maximum total grade through voluntary participation in class activities. Details will be provided in class.

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 card game called Five Hundred (a.k.a 500, or "Cinq Cent" in French). See all project details, resources, and deadlines on the myCourses site. The game will pit one human player and one robot player against a team of robot players. Alternately, the game engine will also support completely automatic playing, for the purpose of testing and evaluating the skills of the robots.

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%.


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.

DateLecture Topics
Wed 5 SepIntroduction; Basic project management
Mon 10 SepProgramming with APIs
Wed 12 SepClass design and encapsulation; Cloning
Mon 17 SepIntroduction to design by contract and unit testing
Wed 19 SepInterface Types and Polymorphism
Mon 24 SepObject-oriented design with UML
Wed 26 SepDesign Patterns: Observer and Strategy
Mon 1 OctDesign Patterns: Composite and Decorator
Wed 3 OctInheritance-based reuse
Mon 8 OctThanksgiving - no class
Wed 10 OctAbstract classes and the Template Method design pattern
Mon 15 OctError handling
Wed 17 OctFacade, Singleton Command, and Prototype patterns
Mon 22 OctDesign review
Wed 24 OctMidterm
Mon 29 OctGUI design with Swing
Wed 31 OctObjects and types
Mon 5 NovObject-based mechanisms: Reflection and serialization
Wed 7 NovUser interface design
Mon 12 NovEffective use of generic types
Wed 14 NovNo class: replaced by extended office hours at the end of the term
Mon 19 NovMetrics and design quality
Wed 21 NovVisitor design pattern
Mon 26 NovThreads
Wed 28 NovSynchronization
Mon 3 DecSynchronization APIs
Tue 4 DecReview for the final