Course Schedule

Fundamentals
Course overview, abstraction
Syntax, ASTs, static types, operator precedence
Exploring and using abstractions, calling methods
Unit tests
Refactoring
The Heart of OOP
Object modeling
Classes and objects from the outside
Classes and objects from the inside, abstraction and encapsulation
State and instance variables, objects as models of processes
Object relationships, the stack and the heap
Subtypes and Polymorphism
Polymorphism, abstract types
Object modeling revisited
Customization via subclassing
Replacing inheritance with composition
Play!
Fall Break
Closures
Closures (a.k.a. lambdas), variable capture
Event handling, closures for deferred execution
Steams, map and filter operations
Translating between loops and streams
Parallelism, concurrency, shared mutable state
More Basic Data Structures
Abstraction and APIs
APIs, contracts, decoupling, separation of concerns
Preconditions, postconditions, invariants, immutable data
Defensive programming
Projects
Thanksgiving Break
Object model of a toaster
Mastermind
Open Q&A on the reading, inheritance, interfaces, OOP, etc.
Work on conceptual puzzles
Progress Presentations!