Provides students an opportunity to refine programming and design skills. Emphasis is on techniques of data abstraction, including encapsulation and inheritance; implementation and appropriate use of common data structures (such as lists, stacks, queues, trees, and graphs); recursion; and the close relationship between data structures and algorithms. Students considering a major or minor in computer science should take the required introduction to the discipline course (COMP 105, 107, or 108) before taking this course.