Final review ADT specification: - signature and algebraic specification - algebraic reasoning - implementation in java - static methods (and static variables) - substitutability More on Java: - type system - subclassing - canonical methods - implicit specs - boxing / unboxing Debugging and testing: - unit/integration testing - whitebox/blackbox testing - exceptions Inheritance: - dynamic dispatch - visibility - abstract classes - recipe for implementing a specification using subclasses - nested classes Interfaces: - non-tree subclassing hierarchies - multiple inheritance - interfaces (e.g., Comparable) - iterators (functional, Java, relationship between the two) Generics; - generic interfaces - generic classes - generic methods (know they exist and what they look like) - subtyping arrays versus subtyping generics (know the issues, the rules) Design patterns: - patterns for static properties (Immutability, Singleton) - Adapter design pattern - Visitor design pattern - Transformer design pattern - Observer design pattern Misc: - a model of mutability - basic UML class diagrams (see readings) - assertions (see readings)