Any discussion of Object-Oriented-Programming, -Design, or -Analysis has to recognize that one of the first, most important tasks is figuring out what the objects and their classes ought to be. Whether developing an accounts receivable system or an embedded system to control some machinery in real-time, the salient fact of objects is that they encapsulate both data about the problem and the allowable operations on that data. If a proposed development method does not deal with both those facets of objects, it is simply not supporting object-oriented development. Whether explicitly or not, every successful effort to solve a software problem will include the construction of a model of the problem. The software engineer can choose to construct this model explicitly at the outset of the project or simply allow it to grow implicitly in his mind as the project progresses. Obviously, I would argue that the model should be explicit and be built as early as possible.