This course builds on CSC 121 and introduces programming
topics such as sets, recursion and dynamic data types. Data
type abstraction and implementation are introduced by
studying structures, such as lists, stacks, queues and
binary trees. The object-oriented implementation of these
structures is emphasized. Tools for algorithm analysis are
introduced, and comparisons of functional, object oriented
and imperative programming paradigms are made. The concept
of tradeoffs (i.e., time vs. space, iteration vs. recursion,
static vs. dynamic and imperative vs. functional) recurs as
a theme throughout the course. This course will be taught in
Java, and will follow up on the Java topics covered in CS 1.
This course can be considered as being composed two sets of
overlapping and complementary ideas: the art and science of
program design and implementation, and the fundamentals of
computer science. The program design and implementation
component will entail completing several programming
assignments during the semester. These assignments, taken as
a whole, will be larger in scope than the projects you
completed in the first Computer Science course, and they
will be tied directly to ideas studied in the fundamental
concepts component of the course. A large part of the
outside work associated with the course will involve
assignments designed to enhance lecture concepts.