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


  • 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


  • 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


  • Basic principles
  • Simple cognitive model and its consequences
  • Standard heuristics
  • Methods for improving usability