|Email:||For your own protection, I only respond to student inquiries that originate from official McGill email accounts|
|Time and place:||Mondays and Wednesdays, 16:05-17:25, LEA 26|
|Office hours:||See on myCourses|
Principles, mechanisms, techniques, and tools for software development, with a focus on software design.
Principles: Single responsibility, 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 official prerequisites (COMP 206 and COMP 250) are the absolute minimum program requirements. This course targets students who have reached a basic level of Java programming fluency. This means that students registering to take COMP 303 should be able to, with a minimum of hesitation, write Java programs to solve small and well-defined problems, use a revision control system to organize their work, and use a debugger to trace through execution and inspect run-time values. COMP 302 and COMP 251 are recommend background.
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|
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.
Since this is a software design course, some of the required reading will be of source code, which will be drawn from the following two projects:
Sample Project: Solitaire.
Diagramming tool (and sample project): JetUML.
|Midterm exam 1||20%/5%/0%|
|Midterm exam 2||20%/5%/0%|
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 of the role of lectures, and related policies:
The following is the expected progression of topics. The detailed course schedule is available on myCourses.
|Design by contract|
|Introduction to Unit Testing|
|Object identity and life-cycle|
|Composite and Decorator design patterns|
|Modeling Object State|
|Observer Design Pattern|
|Abstract Classes; Template Method Design Pattern|
|Software Quality Checking|
|Introduction to GUI design|
|GUI Design and Implementation|
|Visitor Design Pattern|