Problem --> Code (From Cay Horstman's Object-Oriented Design & Patterns), ---------------- 1. Analysis 2. Design 3. Implementation Analysis - vague understanding of the problem is transformed into a precise description of tasks -- Completely defines task -- No internal contradictions -- Readable by experts in problem domain and software developers -- Reviewable by diverse interested parties (This is essentially the lab4 assignment) Design - structure programming tasks into interrelated classes -- Identify classes -- Identify responsibilities of these classes -- Identify the relationships among these classes (These are goals, not steps, it's an iterative process) End result -- Textual description of the classes and their most important responsibilities -- Diagrams of relationships among classes -- Diagrams (or description) of important usage scenarios (Use cases) -- State diagrams and sequence diagrams whose behavior is highly dependent on state (state changes behavior) (Not required for your lab4) Relationships -- Depending ("uses" means manipulates object of the other class) -- Aggregation/composition ("has-a") -- Generalization/inheritance ("is-a")