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