Course Contents

CS 251 focuses on the practical aspects of object-oriented and generic 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, object-oriented, and generic programming 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 and generic programming techniques and C++ language features 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 and generic programming techniques and C++ features that address:

Several in-depth case studies will be used in class to illustrate the pattern-/object-oriented and generic design and programming process.

Unlike the CS Software Engineering course (which focuses on the overall software lifecycle and covers topics such as requirements analysis, specification techniques, modeling notations, and design documents), CS 251 focuses intensively on techniques for designing, implementing, and validating efficient, reliable, and secure C++ software developed using object-oriented and generic design and programming techniques.

Back to CS251 home page.