Lecture 1: The Essence of Objects |
Lecture 2: Unions of Objects |
Lecture 3: Classes of Objects: Data Definitions |
Lecture 4: Classes of Objects: Interface Definitions |
Lecture 5: Interface Design: Independent and Extensible |
Lecture 6: Parametric Interface Definitions and Methods |
Lecture 7: Introducing Java: Syntax and Semantics |
Lecture 8: Union, Interfaces, and Lists in Java |
Lecture 9: Testing in Java |
Lecture 10: Parametric Interfaces in Java |
Lecture 11: Computations on Many Structural Arguments: Double Dispatch |
Lecture 12: Parameterized Types and Double Dispatch; Abstracting Values |
Lecture 13: Abstracting Computation with Function Objects |
Lecture 14: Function Objects & Parameterized Types; Anonymous Classes & Lambda |
Lecture 15: The Fundamental List Abstraction: Fold |
Lecture 17: Midterm Review |
Lecture 16: Properties of Equality: Reflexive, Symmetric, Transitive, and Total |
Lecture 19: Structural Equality with Double Dispatch; Abstracting and Overridding |
Lecture 18: More Double Dispatch |
Lecture 22: Optional, Maps, Sets, and Lifting Default Code to Abstract Classes |
Lecture 23: The Visitor Pattern |
Lecture 24: Implementing Visitors; Bank Accounts |
Lecture 25: Imperatives: Implicit Communication via Side-Effects |
Lecture 26: Aside: List Exercises |
Lecture 27: Imperatives: Cyclic Data |
Lecture 28: Imperatives: Methods over Cylic Data |
Lecture 29: BSTs, Maps, The Law of HashCode, and Comparable vs Comparators |
Lecture 30: Random access and ArrayLists |
Lecture 31: Implementing Hash Tables |
Lecture 32: Resizing Hash Tables |
Lecture 33: Simple Iterators |
Lecture 34: List Iterators and Iterator Combinators |
Lecture 35: List Iterators and Iterator Combinators |
Lecture 36: Zippers |
Lecture 37: Naive Tree Iterators |
Lecture 38: Efficient Pre-Order Tree Iterators |
Lecture 39: Drills |
Lecture 40: Drill Solutions |
Lecture 41: Wrap-up |