The following table gives the topics we will cover in the class and the approximate number of lectures to be spent on each topic. The "Reading" column lists the reading material for the class. You should do the reading for a class or lab before you attend it.
This schedule is tentative: as the course progresses, I'll revise/refine it as needed. The entries above the "blank" table row are reasonably polished; the entries below are more tentative and likely to change
| Dates | Topics | Readings |
| 8/27 | Course overview | |
| TYPES | ||
| 8/29 | Extended example What are types? Typed and untyped languages, type safety, type equality, static and dynamic typing, strong and weak typing. |
Chapter 1 |
| 8/31 | Objects, classes, subclasses, and subtypes | 2.1, 2.2, 2.3 and Snyder (OOPSLA 86) |
| 9/5 | Covariance and contravariance | 2.4 |
| 9/7 | Overloading versus overriding Assignment 1 due |
2.5 |
| 9/10 | Type problems in O-O languages | Chapter 3 |
| 9/12 | Adding expressiveness to O-O languages/Java | 4.1 and Java Generics tutorial |
| 9/14 | Adding expressiveness to O-O languages/Eiffel | 4.2 |
| 9/17 | Adding expressiveness to O-O languages (cont) | Chambers |
| 9/19 | Subtyping of non-object types | Chapter 5 |
| 9/21 | Subtyping continued | |
| 9/24 | Discuss handout from previous class on explicit and implicit reference conversions in C# and Java | |
| 9/26 | Improving C++'s generics | Gregor et al. (Sections 1-3) |
| 9/28 | Type restrictions on subclasses, Variations in O-O languages | Chapter 6 |
| 10/1 | Variations in O-O languages | Chapter 7 |
| 10/3 | Midterm 1. You must bring a blue book. | |
| 10/5 | Dynamically-typed O-O languages | The Smalltalk-80 system (Byte) |
| 10/8 | Guest lecture by Jeremy Siek: Gradual typing | Read Jeremy's paper |
| 10/10 | Adding expressiveness to O-O languages (Discussion) | Growing a language, Guy Steele |
| 10/12 | Lambda calculus. Key concepts: lambda, application, currying,
typing rules, free variables Assignment 3 due |
8.1 until "substitution" on page 128 |
| 10/15 | Evaluating lambda calculus expressions. Key concepts: substitution, reduction | Remainder of 8.1 |
| 10/17 | Type checking lambda calculus. Key concepts: typing for record, union, etc. types | 8.2 |
| 10/19 | Continuation of lambda calculus with record, etc. | |
| 10/22 | Parametric polymorphism
|
9.1 |
| 10/24 | Recursive expressions | 9.2 |
| 10/26 | Parametric polymorphism and information hiding Assignment 4 due |
9.3 |
| 10/29 | Pack and Unpack continued | |
| 10/31 | Bounded quantification | 9.4 |
| 11/2 | SML | SML tutorial, Harper upto and including page 40 |
| 11/5 | Polymorphism in SML | |
| 11/7 | Midterm 2. You must bring a blue book. | |
| 11/9 | Information hiding in SML | Christoph's notes |
| 11/12 | SOOL | Chapter 10 |
| 11/14 | SOOL (cont) | |
| 11/16 | Assignment 5 due | |
| 11/26 | Translating SOOL types | 11.1, 11.2 |
| 11/28 | Modeling SOOL expressions | 11.3 |
| 11/30 | Modeling classes | 11.4, 11.5 |
| 12/3 | Improved modeling for classes | 12.1, 12.2 |
| 12/5 | Summary of translation | 12.3 |
| 12/7 | Soundness Assignment 6 due |
13.1 (just browse the theorems but skip their proofs), 13.2, 13.3, 13.4 |
| 12/10 | Continuing soundness discussion | |
| 12/12 | Super | 14.1 |
| 12/14 | Nil Practice questions (these will not be graded and I'll keep adding to this list as I come up with ideas) |
14.2 |
| 12/20 | Final exam at 7:30 a.m.. You must bring a blue book. |