At the conclusion of this course, the student should be able to:
1. Write programs that use each of the following data structures: arrays, records, strings, linked lists, stacks, queues, and hash tables.
2. Implement, test, and debug simple recursive functions and procedures.
3. Evaluate tradeoffs in lifetime management (reference counting vs. garbage collection).
4. Explain how abstraction mechanisms support the creation of reusable software components.
5. Design, implement, test, and debug simple programs in an object-oriented programming language.
6. Compare and contrast object-oriented analysis and design with structured analysis and design.
I. Programming Fundamentals
A. Primitive types
D. Strings and string processing
E. Data representation in memory
F. Static, stack, and heap allocation
G. Runtime storage management
H. Pointers and references
I. Linked structures
J. Implementation strategies for stacks, queues, and hash tables
K. Implementation strategies for trees
L. Strategies for choosing the right data structure
A. The concept of recursion
B. Recursive mathematical functions
C. Simple recursive procedures
D. Divide-and-conquer strategies
E. Recursive backtracking
F. Implementation of recursion
III. Declarations and Types
A. The conception of types as a set of values together with a set of operations
B. Declaration models (binding, visibility, scope, and lifetime)
C. Overview of type-checking
D. Garbage collection
IV. Abstraction Mechanisms
A. Procedures, functions, and iterators as abstraction mechanisms
B. Parameterization mechanisms (reference vs. value)
C. Activation records and storage management
D. Type parameters and parameterized types - templates or generics
E. Modules in programming languages
V. Object-Oriented Programming
A. Object-oriented design
B. Encapsulation and information-hiding
C. Separation of behavior and implementation
D. Classes and subclasses
E. Inheritance (overriding, dynamic dispatch)
F. Polymorphism (subtype polymorphism vs. inheritance)
G. Class hierarchies
H. Collection classes and iteration protocols
I. Internal representations of objects and method tables
VI. Software Design
A. Fundamental design concepts and principles
B. Design strategy
All topics are covered in both the lecture and lab parts of the course.
Data Abstraction and Problem Solving with C++: Walls and Mirrors. 7th ed. Carrano, Frank M. and Henry, Timothy M. Pearson. 2016 (classic).