Object-Oriented Design Winter Term 2006

Object-Oriented Design
Winter Term 2006 COMP 304B (CRN 835)

General Information

Course title Object-Oriented Design
Course number COMP 304B (CRN 835)
Credits 3
Prerequisites COMP 206 (software systems).
COMP 251 (data structures and algorithms),
COMP 302 (programming languages and paradigms),
If you do not have the pre-requisites for the course, the course will be
deleted from your record by the Faculty of Science.
Course venue Trottier 1090 (check Minerva).
Monday, Wednesday, and Friday 14:35 - 15:25
Tutorials (CRN 6986)Trottier 0070 (check Minerva).
Thursday 18:05-19:25 (only when announced).
Enrollment Cap Enrollment is limited to 68 students.
Instructor Prof. Hans Vangheluwe
McConnell Engineering room 328
tel.: +1 (514) 398 44 46
e-mail: hv@cs.mcgill.ca (send course-related mail in WebCT)
Office hours Monday 16:00 - 18:00
TA Ximeng Sun (xsun16@cs.mcgill.ca)
TA Office hours Wednesday 11:00 - 12:30
McConnell Engineering room 202
Course website http://www.cs.mcgill.ca/ ~ cs304
Course e-mail Discussion forum in WebCT
Assignments hand in via WebCT

Calendar Course Description

The object model, objects and classes, verification and testing, object-oriented analysis, unified modelling language and design patterns.

Introduction and Rationale

The complexity of software systems to be built increases with the number of components, the diversity of these components, the level of interactiveness and re-activeness, as well as with the need for integration with real-world systems. These issues are amplified when designing real-time, embedded systems. While the complexity of systems increases, so does the demand for reliability, reduced production time, and maintainability. Thanks to extensive research in algorithms and datastructures, as well as suitable -object-oriented- programming languages, re-usable libraries of "components" have been developed. Examples are the Standard Template Library (STL) for C++ and AWT/Swing for Java. Given the complexity of software-to-be-built, it is necessary to focus, not only on coding and programming, but also on the design of software. The design effort provides a framework for reasoning at a level of abstraction higher than that of code (which is, certainly in modern, object-oriented languages, already at a high level of abstraction compared to the level of machine instructions). Thanks to this high level of abstraction

Course Content

The above introduction highlights the need for object-oriented design as opposed to coding. This will put object-oriented programming in its proper context and allow one to tackle complex problems in a structured fashion. The object-oriented paradigm, with all the support such as object-oriented languages, type theory, tools, UML notation, and design patterns, has reached a sufficient level of maturity to allow a comprehensive presentation.
The goal of the course is to give in-depth insight in the nature of object-oriented analysis and design, integrating the following related aspects:
  1. understanding the (object-oriented) software development process.

  2. software testing as an integral part of the process;

  3. understanding the object-oriented paradigm;

  4. standardized representation for design: the Unified Modelling Language (UML);

  5. which criteria allow one to assess the quality of a design;

  6. how to go from design to code in a structured (and possibly automated) fashion;

  7. design patterns for high-level design re-use.

The course is not about a particular design method, nor a particular language or tool. We will however use the programming language Python for most examples and all assignments.
The important concepts of the course as well as their inter-relationships are given in a "concept map" (in UML Class Diagram syntax) in Figure 1.

Figure 1: Object-Oriented Design Concept Map

Learning Outcomes

By the end of the course, you will

Course Material

  1. Meilir Page-Jones. Fundamentals of Object-Oriented Design in UML. Object Technology Series. Addison-Wesley, 2000. ISBN 0-201-69946-X.
  2. Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns, Elements of Reusable Object-Oriented Software. Professional Computing Series. Addison-Wesley, 1995. ISBN 0-201-63361-2.
Several copies of these books are put on reserve at the Schulich Library.
The McGill bookstore has a reduced-price "package" containing both books. ISBN 0130391123.
Additional material will be made available via the course website and in class (blackboard notes).

Assignments and Evaluations

6 assignments (3 × 2-week, 3 × 1-week). The assignments improve on a spreadsheet application presented in class. The implementation language for all assignments is Python (http://www.python.org).
Grades distribution:
A supplemental exam, worth 50%, covers the whole course.
There is no opportunity to re-do or increase grades obtained for assignments.
Assignments will be judged on (in this order of importance):
Example assignments from previous incarnations of the course: 2005, 2004, 2003, 2002.
Example exams from previous incarnations of the course.

The Rules of the Game

Original Work

McGill University values academic integrity. Therefore all students must understand the meaning and consequences of cheating, plagiarism and other academic offences under the code of student conduct and disciplinary procedures (see www.mcgill.ca/integrity for more information).
You are encouraged to help each other formulate the ideas behind assignment problems, but each student is required to submit his or her own original work. Handing in work that is not your own, original work as if it is your own is plagiarism. All re-use, collaboration, inspiration must be explicitly mentioned in the assignment.

Class Attendance

You are expected to attend class. Information may be made available on the web for your convenience, but is not a substitute for class attendance. Should you miss a class, you are responsible for finding out what material or announcements you may have missed.

Hans Vangheluwe January 2006.