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:
Analysis — Analyzing design problems and specifying them using UML and OCL, covering both static and dynamic aspects
Software Architecture — Representing architectures, the role of non-functional requirements, and refining architectural designs into implementable modules
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.