CSC407S / CSC2103S
Software Architecture & Design

Course Information Sheet

This course is an introduction to the development of architectures and class-level designs for software systems. The goal of the course is to improve students' skills, setting them on the road to becoming competent software architects and designers.

Even if and when we fully understand the requirements for a software system it is rarely clear how to begin the programming task (except for the most trivial of programs). Important steps in-between requirements and coding are first architecture and then design.
   Architecture involves specifying the construction of the system at the highest level. What are the major modules? What are the major processes? How do the processes communicate with one another? What technologies will be used?
   Design involves specifying the construction of a single module (program). For example, when the architecture specifies an object-oriented design then what classes should we have? What are their responsibilities? With what other classes should they collaborate? What methods should they contain?

The study of both design and architecture revolves around the study of patterns. A pattern describes the core of a solution to a problem which occurs over and over again. We will study architecture and design patterns and learn how and when to apply them. We will also learn how to use standard graphical notation (UML) for specifying object-oriented designs, and how to translate those designs into object-oriented code (using Java as the exemplar).

Prerequisites

Textbook

Design Patterns: Elements of Reusable Object-Oriented Software
Gamma et. al.
Addison-Wesley (Professional Computing Series), 1995
ISBN 0-201-63361-2
In addition, you should acquire for yourselves some information on UML and Object-Oriented Analysis and Design. Two suitable books are
 
The Unified Modeling Language User Guide, Booch et. al.
Addison-Wesley, 1998, ISBN 0-201-57168-4

Object-Oriented Modeling and Design, Rumbaugh et. al.
Prentice-Hall, 1991, ISBN 0-13-629841-9


Course Grades

Your course grade will be determined using the following components.

In addition, you must achieve at least 40% on the final examination to pass the course. Otherwise, your mark will be min(your computed grade, 49%).

Lateness Policy

Assignments are due at the start of the tutorial hour (Friday at 12:00), and are to be handed in to your T.A.
Assignments handed in late on Friday will receive a late penalty of -10% (absolute).
Assignments handed in Monday morning at lecture time will receive a late penalty of -30% (absolute).
For each day after, the grade will do down by -10% (absolute).
These late penalties may be waived under extenuating circumstances as determined on a case-by-case basis by Professor Penny (e.g., sickness).
"Too much work" is not considered an extenuating circumstance.

Course Conduct

Attendance at lectures is considered mandatory. Much material and interpretation is covered during lectures that is not present in textbooks or notes. Experience has shown that your final examination grade is highly correlated with lecture attendance.
   Your individual TA will be grading your assignments. Therefore, it is wise to attend tutorials and seek help from your TA. The tutorial sections will be covering background material and going into greater depth with worked out examples. To understand what your particular TA expects to see in an assignment, you should attend the tutorials.
   You are expected to work alone on all your assignments without help from, or collaboration with, anybody else. Only in this manner will you learn the material sufficiently well to pass the final examination. High-level discussions with others regarding assignments is fine (including with the instructor and your TA, who may give you valuable design advice). Copying from others, however, is considered plagiarism, and will be dealt with accordingly.

Resources

Please read the course newsgroup ut.cdf.csc407h regularly. All announcements will be posted there. Additional resources (such as links, copies of the lecture slides, and handouts) are available from the course website: http://www.cs.toronto.edu/~penny/teaching/csc407.