CSC407S Software Architecture & Design

This course is an introduction to the use of several techniques popular with the object-oriented development community to analyze and design 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 the requirements for a software system are well understood it is usually not appropriate to begin the programming task without some systematic attempt to describe the architecture of the system. The word "architecture" used in this sense is not formally defined. This course will describe an approach currently followed by many software technologists to arrive at a high level description of a system. System analysts create a set of informal diagrams and annotations that describe the operation, overall design and detailed construction of a system in terms of object-oriented concepts. The general idea is that the analysts identify domain classes that are somewhat related to the concepts held by domain experts eventually to use the system. The operation of the system can then be described in terms of "Use Cases" that illustrate how each "Actor" interacts with the system. Robustness diagrams, are used to make the step from domain classes use cases to design classes. Designers describe the methods and fields of classes implementing the system as they create "Sequence Diagrams" to show how specific objects interact to implement a given use case. This course will focus particularly on how the use of "Design Patterns" can help in this task.

Software created in this way has not been proven to be less buggy or cheaper to build although many practitioners believe this to be the case. Moreover, many believe that the process is less stressful for the individuals involved because analysis, design and implementation decisions are more "Tracable". This means that prior thinking can be better motivated, justified, debunked and/or debugged, from requirement to code.

Beyond a detailed software 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?

Our study of current design practice will revolve 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 Java object-oriented code.

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. A few suitable books are:
Use Case Driven Object Modeling with UML : A Practical Approach,
by Doug Rosenberg with Kendall Scott, Addison-Wesley, 1999.

UML Distilled (Second Edition) A Brief Guide to the Standard Object
Modeling Language, by Marting Fowler with Kendall Scott,
Addison-Wesley, 2000.









	

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 (Tues 10am), and are to be handed in to your T.A.

Course Conduct

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/~matz/instruct/csc407 .
Mathew Zaleski
$RCSfile: csc407cif.html,v $ $Revision: 1.10 $ Last modified: Fri Sep 12 22:32:02 EDT 2003