Description:
A study of design methods and their use in the correct construction,
implementation, and maintenance of software systems. Topics
include design, implementation, testing, documentation needs
and standards, support tools. This course focuses on design
techniques for both small and large software systems. Techniques
for the design of components (e.g., modules, classes, procedures,
executables) as well as complex architectures will be considered.
Principles for software design and rules for helping to ensure
software quality will be discussed. The techniques will be applied
in a set of small assignments, and a large-scale project, where
students will design, implement, and maintain a non-trivial
software system.
Specific topics to be discussed may include the following:
- software design principles: coupling and cohesion, information
hiding, open-closed, interface design.
- abstract data types
- seamless software construction and process models; a rational
design process
- design-by-contract and its implementation in programming
languages and design methods; writing and testing contracts;
debugging contracts.
- abstraction and data design; choosing data structures.
- the Business Object Notation (BON) for modeling designs;
alternative modeling languages like UML, data-flow diagrams,
structure charts, etc.
- static software modeling; dynamic modeling and behavioural
modeling.
- case studies in design: designing architectures; comparisons;
design of OO inheritance hierarchies; class library design.
- methods for finding classes; designing class interfaces
- CASE tools: forward and reverse engineering of code from
models.
- software testing.
- design patterns; applications of patterns; implementing
patterns.
Prerequisites: general prerequisites, including COSC 2001
3.0 and MATH2090 3.0 and COSC2031 3.0
|