Instructor: | Martin Robillard (email like a pro) |
---|---|
Time and place: | Tuesdays and Thursdays, 16:05-17:25, ENGTR 0100 |
Office hours: | See on myCourses |
Principles, mechanisms, techniques, and tools for software development, with a focus on software design.
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...
Principles | Mechanisms | Techniques | Tools | |
---|---|---|---|---|
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 |
Required Textbook: Horstmann, Cay. Object-Oriented Design and Patterns, 2nd Edition. Wiley, 2005. Available at the Paragraphe Bookstore.
Complementary Resource: Martin, Robert. Clean Code: A Handbook of Agile Software Craftmanship. Prentice-Hall, 2008. Available on-line from the McGill domain.
Assignments | 0% |
---|---|
Midterm exam 1 | 25% |
Midterm exam 2 | 25% |
Final exam | 50% |
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.
General philosophy on the value of lectures, and related policies:
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.
Date | Lecture Topics |
---|---|
2 Sep | Introduction; Software Development Process |
4 Sep | Programming with APIs |
9 Sep | Class design; Scoping and encapsulation; Cloning |
11 Sep | Polymorphism and the Iterator design pattern |
16 Sep | Design by contract |
18 Sep | Introduction to Unit Testing |
23 Sep | Object identity and life-cycle |
25 Sep | Composite and Decorator design patterns |
30 Sep | Modeling Object State |
2 Oct | Review for Midterm 1 |
7 Oct | Midterm 1 |
9 Oct | Observer Design Pattern |
14 Oct | Inheritance-based reuse |
16 Oct | Abstract Classes; Template Method Design Pattern |
21 Oct | Error Handling |
23 Oct | Software Quality Checking |
28 Oct | Introduction to GUI design with Swing |
30 Oct | Review for Midterm 2 |
4 Nov | Midterm 2 |
6 Nov | GUI Design and Implementation |
11 Nov | Threads |
13 Nov | Synchronization |
18 Nov | Generic Types |
20 Nov | Invited Lecture by the TaskNav Team |
25 Nov | Visitor Design Pattern |
27 Nov | Review for the Final |