The quiz 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 JavaTM.
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 JavaTM
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 Labour, 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