|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.
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.
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 application we will call "Capone" (Canadian Political News). The application will access data from the Openparliament.ca 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%.
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.
|3 Sep||Introduction; Project management; Project Description|
|5 Sep||Programming with APIs|
|10 Sep||Class design; Scoping and encapsulation; Cloning|
|12 Sep||Polymorphism and the Iterator design pattern|
|17 Sep||Design by contract; Introduction to unit testing; Introduction to Object-Oriented Design|
|19 Sep||Object Identity and Lifecycle|
|24 Sep||Composite and Decorator Design Patterns|
|26 Sep||Observer Design Pattern|
|1 Oct||Inheritance-based reuse|
|3 Oct||Abstract Classes; Template Method Design Pattern|
|8 Oct||Error Handling|
|10 Oct||Preparation for the Midterm|
|17 Oct||Object-Oriented Design with UML|
|22 Oct||Software Quality Checking|
|24 Oct||Introduction to GUI design with Swing|
|29 Oct||GUI Design and Implementation|
|31 Oct||Visitor Design Pattern|
|12 Nov||Facade, Command, and Prototype Patterns|
|14 Nov||Generic Types|
|19 Nov||Advanced Testing Techniques|
|21 Nov||No Lecture|
|26 Nov||Introduction to Android Development|
|28 Nov||Review for the Final|