Object-Oriented Analysis and Design is a course that presents an introduction to the design and construction of software systems using techniques that view a system as a set of objects that work together to realize the system's functionality. This perspective stands in contrast to more traditional "procedural" or "structured" design techniques that viewed systems as a set of procedures that manipulate shared data structures. Proponents of object-oriented techniques point to the flexibility and extensibility of object-oriented systems along with other benefits such as increased modularity, abstraction, and encapsulation.

In this class, we will examine fundamental objected-oriented analysis and design techniques and show how decisions made during analysis and design impact the implementation of software systems. This class does not focus on object-oriented programming; however we will examine many examples of object-oriented systems written in Java, Python, and Ruby.

By the end of the class, students will have been exposed to the major steps of object-oriented software development life cycles and will understand the tools and techniques that are used in these steps. They will also have applied these skills to the development of a group project and the analysis of real-world object-oriented frameworks.

Kenneth M. Anderson, 2008