Java Review Code reuse Subtyping Inheritance What is the relationship between these two? Interfaces Declared vs. Actual types Relationship to dynamic dispatch Subtype polymorphism With containers, requires downcast to extract References vs. objects Specifications Relationship to testing As compared to implementation Formal vs. Informal Benefits External vs. Internal Testing Generating tests For each test Provide input Determine correctness of output (oracle) Coverage Techniques paths in specification boundary conditions common mistakes Black box vs. White box Coverage criteria Statements Branches (edges) Conditions Advantages/Disadvantages Testing in general When/what to test Unit vs. Integration testing Test as you go Automated Testing Enviroments (JUnit) Advantages/Disadvantages Debugging Methodology Relationship to testing Design Patterns Goal and General principles Questions How does each pattern meet these principles? What is the relationship between different patterns? OMT notation Particular Patterns For each pattern, consider Problem Solution Benefits Iterator Internal vs. External Mutation Singleton/Type-safe Enum Adapter Proxy Examples Compare to Decorator Observer Subject vs. Observers Abstract vs. Concrete role pull- vs. push-based information retrieval observing multiple subjects observing some, not all, events Decorator Understand the alternative class hierarchy State vs. switch() statement relationship to Singleton Composite What is "recursive composition?" Strategy Relationship to visitor? Abstract Factory Compare to direct creation of classes Bridge Understand the alternative class hierarchy Command Relationship to Strategy Compare to inheritance-based approach Visitor Compare to per-class methods drawback/benefits Traversal within object structure within visitor iterator Why double dispatch? Maintaining state within a visitor Refactoring What is the process? How does it differ from normal software development? When to refactor?