The quiz (given in week 9) will be a closed-book quiz. Here is a list of topics that have been covered this term that may appear in the quiz. You won’t be tested on obscure details of Java.
Basic Programming Notions
- Assignment semantics, aliasing and sharing
 - Class hierarchy, dynamic dispatch, inheritance
 - Subclasses and interfaces
 - Exceptions, checked and unchecked
 - Namespace and access control mechanisms
 - Static variables and methods
 - Constructors; references to this and super object
 - Hash tables and hash codes
 - Casts and runtime type checks
 - Overloading of method names
 - Runtime assertions
 - Subtyping in Java
 - Deep vs. shallow copying
 - Reference vs. value equality
 - Parametric polymorphism
 
Specification
- Declarative vs. operational specification
 - The relational model of behavior
 - Preconditions and postconditions
 - Frame conditions
 - Standard syntax for specifications
 - Non-deterministic or ‘underdetermined’ specifications
 - The idea of substitutability
 - The refinement ordering
 - Subtypes vs. subclasses
 - Co- and contra-variance
 - The object contract
 
Abstract Data Types
- The idea of representation independence
 - Encapsulating the representation
 - Representation invariants
 - Classification of operations into constructors, mutators, observers
 - Abstraction functions
 - Representation exposure
 - Arguments by structural induction
 - Mutable and immutable types
 - Beneficent side effects
 - Notions of equality
 - The basic idea of algebraic specification
 
Object Models
- Instances versus models
 - Multiplicity constraints
 - Final markings
 
Module Dependency Diagrams
- The dependence relation
 - Dependences mediated by specifications
 - Effect of dependence structure on division of labor, reuse, reasoning, testing
 - Decoupling by weakening dependences
 
Design Patterns
- The idea of design patterns
 - Effect of design patterns on dependences
 - Composite, Decorator, Iterator, Factory Method, Abstract Factory, Strategy, Template
 
Testing
- Oracles, stubs and drivers
 - Kinds of testing: unit testing, regression testing, etc.
 - Basic notion of coverage
 - Value and limitations of testing
 - Code-based vs. specification-based testing
 
Usability
- Basic principles
 - Simple cognitive model and its consequences
 - Standard heuristics
 - Methods for improving usability