Outline of the Topics Covered
Object-Oriented Programming
Classes and inheritance
Dynamic method dispatch
Class diagrams for inheritance and composition
Abstract classes and protocols
Overriding versus overloading
Immutable versus mutable
Organized approaches to designing objects and classes
Abstraction
The abstraction barrier
Client perspective versus implementor perspective
Black-box testing against specifications
Substitutability of implementations
Representation independence
Information hiding
Encapsulation
Tradeoffs between information hiding, encapsulation, and reuse
Algorithmic thinking
Asymptotic notation
Worst case, average case, best case
Amortized efficiency
Divide-and-conquer algorithms
Precomputation
Caching
Memoization and/or dynamic programming
Static types
Compile-time versus run-time
Interactions with reuse
Subtyping
Ad hoc (sum) polymorphism
Inclusion (product) polymorphism
Parametric polymorphism
Basic Design Patterns
Factory Method
Singleton
Wrapper/Adapter
Composite
Iterator
Functional Visitor
This is an outline. Lecture notes, handouts, and weekly reading assignments will guide you through the deails.
The lectures, and assignments in the two sections of the course (this one and Professor Clinger’s) will be nearly the same. You may find additional relevant information at Professor Clinger’s Section web site.