Introduction

Learning Objectives

By the end of this course, students will be able to:

  • Express analysis and design of an application using UML (Unified Modeling Language)

  • Specify functional semantics using OCL (Object Constraint Language)

  • Specify and evaluate software architectures; select and use appropriate architectural styles

  • Apply object-oriented design techniques

  • Select and use appropriate software design patterns

  • Participate in a design review

Course Structure

The course is divided into three parts, interleaving content lessons with exercises:

  1. Analysis — Analyzing design problems and specifying them using UML and OCL, covering both static and dynamic aspects

  2. Software Architecture — Representing architectures, the role of non-functional requirements, and refining architectural designs into implementable modules

  3. Software Design — Object design, design patterns, design principles, and design reviews

The course centers on design studies: solving each project multiple ways and systematically studying the differences, inspired by how building architects construct small-scale models to explore a design space.