ion, encapsulation, information hiding, and generalization playa primary role in design. Software design hinges on the ability to disregard inessential details and focus on the essential. The goal of 000 is to arrive at a system as simple as possible that meets the stakeholders' requirements while allowing a certain amount of flexibility. 000 entails the modeling of a system's structure and behavior in terms of objects and interactions among objects. 000 tackles the development of object models that represent a solution to a problem in a specific problem domain. These object models represent a solution to a problem in the solution domain (technology-specific, less abstract, geared toward being implemented in code) while maintaining conceptual consistency with the problem domain. 000 builds on the products developed during analysis by refining and mapping these into an object-oriented programming language (OOPL). Analysis, design, and coding are closer to each other in the world of objects than in other paradigms. For this reason, the notations used during analysis and the early stages of design are very similar. However, in 000, technology-specific concepts that were nonexistent in analysis need to be specified, such as the datatypes of the attributes of a class, or the business logic in a class's methods. Knowing when analysis ends and design begins is usually hard for those new to modeling. Some would argue that it's more of an art than a science. 1. Craig Lannan, Applying UML and Patterns (Prentice Hall PTR, 2001).