Course Contents

CS 291 focuses on the practical aspects of object-oriented software design and implementation. The concepts addressed in the course cover the following topics important to developing and maintaining quality software: Abstraction based on patterns and object-oriented techniques (such as separating interfaces from implementations) will be the central concepts and guiding principles throughout the course. These concepts and principles will be analyzed and applied so that students will learn how to construct reusable, extensible, efficient, evolvable, and secure software.

Patterns will be taught to provide good role models for structuring software designs, as well as to clearly articulate the tradeoffs of alternative methods for designing systems. Object-oriented techniques will be taught so that students will learn by example how to build highly decentralized software architectures that decouple inter-dependencies between components. The course will cover object-oriented techniques that address:

Several in-depth case studies will be used in class to illustrate the OO design and programming process.

Unlike CS 277 (which focuses on the overall software lifecycle and covers topics such as requirements analysis, specification techniques, modeling notations, and design documents), CS 242 focuses intensively on techniques for designing, implementing, and validating efficient, reliable, and secure object-oriented C++ software.


Back to CS291 home page.