This course is a continuation of Programming II. It will introduce students to more details of object definition and construction and event-driven programming. It will also introduce additional standard Java packages, including the file system and graphical user interface elements. Basic data structures will be introduced and implemented, including lists, stacks, queues, and simple kinds of trees (through binary search trees). This course will also give students an introduction to C++ and to programming techniques for dynamic data structures. Students will study algorithms for ordering, searching, traversing and manipulating these data structures, including some recursive algorithms. Good software engineering practices will be featured in various aspects of the course, and notations similar to the Unified Modeling Language (UML) will be employed. Through one or more team projects, students will gain experience in designing and implementing larger systems. However, the emphasis of the course will be on the use of prewritten packages and built-in language facilities, as well as design and implementation of moderately sized custom classes and algorithms, rather than on the design of whole systems.