Object Design

If you use draw, then code (the most popular approach with UML) when designing objects, the drawing overhead should be worth the effort.

Some aims of agile modeling are to reduce drawing overhead and model to understand and communicate, rather than to document (though documenting is easy with digital photos). From XP: Do the simplest thing that could possibly work.

UML CASE Tools can also add value. Guideline:
 * Choose a UML CASE tool that integrates with popular text-strong IDEs, such as Eclipse or Visual Studio.
 * Chosse a UML tool that can reverse-engineer (generate diagrams from code) not only class diagrams (common), but also interaction diagrams (more rare, but very useful to learn call-flow structure of a program).

For a three-week timeboxed iteration, spend a few hours or at most one day (with partners) near the start of the iteration drawing UML for the hard, creative parts of the detailed object design. Then transition to coding for the remainder of the iteration, using the UML drawings for inspiration as a starting point, but recognizing that the final design in code will diverge and improve. Shorter drawing/sketching sessions may occur throughout the iteration.

If agile modeling, then before each subsequent modeling session, reverse-engineer the growing code base into UML diagrams, print them out, and refer to them during the sketching session.

Static and Dynamic Modeling
//Dynamic models//, such as UML interaction diagrams, help design the logic, the behavior of the code or the method bodies. They tend to be more interesting, difficult, important diagrams to create.

//Static models//, such as UML class diagrams, help design the definition of packages, class names, attribues, and method signatures (but not method bodies).

During dynamic object modeling you're really have to think through the exact details of what objects need to exist and how they collaborate via methods. Therefore, spend significant time doing interaction diagrams, not just class diagrams. Note that it's especially during dynamic modeling that we apply //responsibility-driven design// and the //GRASP// principles.

Drawing UML is a reflection of making decisions about the design. It's important to have object design skills. Secondary is drawing UML. Fundamental object design requires knowledge of:
 * Principles of responsibility assignment
 * Design patterns