|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.
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.
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 development||The common programming-language based mechanisms used to build OO software applications||Common software development techniques||A number of software development tools|
|Describe and explain||The purpose of each principle and how it can be applied||How each mechanism works||How to apply each technique and when it should be applied||The theory underlying each tool, and the technique(s) the tool supports|
|Apply||Each principle||Each mechanism||Each technique||Each tool|
|Evaluate||Whether the application of a principle is appropriate to a given situation||The technical consequences of a solution involving the mechanism||The cost and benefits of using the technique in a given situation||The suitability of different tools for a given task|
|Create||A 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.
Required Textbook: Horstmann, Cay. Object-Oriented Design and Patterns, 2nd Edition. Wiley, 2005. Available at the Paragraphe Bookstore.
|Midterm exam (optional)||0%/25%|
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 www.mcgill.ca/students/srr 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.
|Wed 5 Sep||Introduction; Basic project management|
|Mon 10 Sep||Programming with APIs|
|Wed 12 Sep||Class design and encapsulation; Cloning|
|Mon 17 Sep||Introduction to design by contract and unit testing|
|Wed 19 Sep||Interface Types and Polymorphism|
|Mon 24 Sep||Object-oriented design with UML|
|Wed 26 Sep||Design Patterns: Observer and Strategy|
|Mon 1 Oct||Design Patterns: Composite and Decorator|
|Wed 3 Oct||Inheritance-based reuse|
|Mon 8 Oct||Thanksgiving - no class|
|Wed 10 Oct||Abstract classes and the Template Method design pattern|
|Mon 15 Oct||Error handling|
|Wed 17 Oct||Facade, Singleton Command, and Prototype patterns|
|Mon 22 Oct||Design review|
|Wed 24 Oct||Midterm|
|Mon 29 Oct||GUI design with Swing|
|Wed 31 Oct||Objects and types|
|Mon 5 Nov||Object-based mechanisms: Reflection and serialization|
|Wed 7 Nov||User interface design|
|Mon 12 Nov||Effective use of generic types|
|Wed 14 Nov||No class: replaced by extended office hours at the end of the term|
|Mon 19 Nov||Metrics and design quality|
|Wed 21 Nov||Visitor design pattern|
|Mon 26 Nov||Threads|
|Wed 28 Nov||Synchronization|
|Mon 3 Dec||Synchronization APIs|
|Tue 4 Dec||Review for the final|