This course builds on the concepts learned in OOP, and focuses more on how to graphically model and represent the software solution to the problem we want to implement. The models, through it's notational syntax and semantics expose the structure and behaviour which form the basis of communicating software design. We'll try to learn how to model effectively, what are the attributes of good design, and how to embed proven design patterns into our design.