CS161 is designed to introduce students to object-oriented programming. As with CS160, the course interleaves theory, programming, and architecture concepts as needed to motivate and explain problem solving using object-oriented programming. The core of the course is explaining objects: how they represent data and how they are defined and used in Java. Fundamental concepts such as inheritance and polymorphism are introduced and explained in the context of programming assignments. Another major programming topic is recursion and its relationship to mathematical induction.

A student completing this course should be able to: implement object-oriented programs and understand the underlying principles such as encapsulation, abstraction and reuse; design and build more complex programs (multiple files and multiple objects) by dividing problems into parts that are easily solvable; and relate concepts from theory to programming and architecture, such as how recursion is programmed and implemented.

This course is essential for majors and other students who intend to use object-oriented programming to solve problems and who intend to write complex software. The course would be useful to any student intending to pursue Computer Science or Information Technology as a career.

Labs will be held during the first week of classes.