We will be looking for code that follows sound object-oriented design principles and conforms to these criteria: Classes/Interfaces * Correct types on fields * No missing fields * Each class has a defined constructor (don't rely on a default constructor) * Constructor is logically correct * Correct choice between using interfaces/abstract classes (after HW1) Examples of Data * Examples for all types of data (not just simple examples) Methods * Every method documented with a purpose * Types of arguments and return values are correct * Logic is correct * Method names are consistent across variants of the same type Test Cases * Adequate set of test cases provided for each method * Each test case commented with explanation of what is being tested Program Structure * Duplicate code/fields abstracted where appropriate/possible (after HW1) * File formatted in a way that is readable (consistent indentation) * Program uses only those constructs approved for the assignment OO Programming Issues * Program relies on dynamic dispatch (does not do explicit type-checking of objects)