Class 1: Engineering Software? [PDF] [PPTX]
How is constructing software like and dislike constructing bridges?
Course overview
Class 2: Introducing Java [PDF] [PPTX]
Expressiveness vs. Truthiness
Java
Class 3: Java Semantics [PDF] [PPTX]
Why it matters?
Objects vs. primitive types
Mutability
Class 4: Specifications [PDF] [PPTX]
What makes a good specification?
REQUIRES, MODIFIES, EFFECTS
Class 5: Validation (Slides: [PDF] [PPTX]; Notes)
Validation
Testing
Glass Box vs. Black Box Testing
Class 6: Programming Defensively (Slides: [PDF] [PPTX]
Statement Coverage Testing
Hopelessness of Analysis
Assertions
Exceptions
Class 7: Data Abstraction (Slides: [PDF] [PPTX]; Notes: [PDF])
Specifying Data Abstractions
Creators, Producers, Mutators, Observers
Problem Set 2
Class 8: Implementing Data Abstractions (Slides [PDF] [PPTX]; Notes: [PDF])
Abstraction Functions
Rep Invariants
Class 9: Data Abstraction Practice (no slides, notes from Class 8 [PDF])
Class 10: Generics (Slides [PDF] [PPTX])
Class 11: Subtyping and Inheritance (Slides [PDF] [PPTX])
Class 12: Substitution Principle (Slides [PDF] [PPTX]) [Subtyping Nodes]
Class 13: Behavioral Subtyping (Slides [PDF] [PPTX])
Class 14: Array Subtyping (Slides: [PDF] [PPTX]; Substitution principle example: [PDF])
Class 15: Concurrency (Robbie Hott) (Slides: [PDF] [PPTX])
Class 16: Problem Set 4 (Slides: [PDF] [PPTX])
Class 17: Concurrency, Object-Oriented Programming (Slides: [PDF] [PPTX])
Class 18: Concurrency (wait and notify, Priority, Mars) (Slides: [PDF] [PPTX])
Class 19: Java Security (safe programming languages, Java byte codes, verification) (Slides: [PDF] [PPTX])
Class 20: Verifying Bytecodes [PPTX] [PDF]
Class 21: Hair-Dryer Attacks [PPTX] [PDF]
Class 22: Graphical User Interfaces [PPTX] [PDF]
Class 23: Network Programming [PPTX] [PDF]
Class 24: Garbage Collection [PPTX] [PDF]
Class 25: Software Disasters! [PPTX] [PDF]
Class 26: Software Interviewing Questions (no slides)