Provides a foundation in programming using an object-oriented programming language. Topics include: classes and objects, inheritance, exception handling, basic data structures (linked lists, binary trees, and hash tables), big-O complexity analysis, and testing and debugging. The laboratory assignments emphasize the use of object-oriented programming constructs in the design and implementation of reasonably large programs.