Intermediate problem-solving and programming principles for scientific and technical applications. Emphasis on data abstraction and object-oriented program design, including design and implementation of classes, inheritance, polymorphism, and inter-object communication. Use of templates and operator overloading; use of data structures such as stacks, queues and pointers in the implementation of algorithmic techniques including recursion, divide and conquer, and dynamic storage management. Taught using the JAVA programming language. Also listed asCIS 276.