This course introduces software engineering students to elementary data structures, and to the functional programming paradigm.
Software Engineering undergraduates who have taken SE 1A. It is assumed that students have experience programming in an imperative language such as C or C++.
Prerequisite: CS 137
Antirequisites: CS 116, 135, 136, 145, 146
Successor: CS 241.
Used in course:
Three hours of lecture per week, plus a one-hour tutorial. Normally available in Winter only.
Operating system and Unix concepts, programming language concepts.
C++ basics, basic types, IO, use of simply library elements (string, vector).
The stack, queue, and priority and queue ADTS; the linked list, sorted linked list; Trees, binary trees, binary search trees; the C/C++ memory model: pointers vs references, stack vs freestore; implementing and travesing linked structures; recursion and stack frams; recursive vs iterative solution to ADTs; space and time complexity of solutions; simple testing and debugging strategies.
Interface vs implementation; class definitions, instantiation, object construction and destruction; object vs pointers to objects; interface design and abstraction, responsibility allocation; the adapter design pattern.
Introduction to inheritance and its implementation in C++; introduction to generics, type parameterization, and C++ templates; the template method design pattern; use of generic data containers and the Standard Template Library; design heuristic and strategies for object-oriented programming.