How to create a OO-model

OO-model consists of class model and a set of collaboration diagrams.
I like to emphasize that classes form a model not a diagram and collaboration forms diagram. This means that one can have several class diagrams, but only one model. In the case of collaboration models equals diagrams – so they are one-to-one.
Modelling is pure analysis. When we model is about some no-existing future then question of analysis and design is more complicated. Still to keep things strait and simple I would like to call modelling analysis.
These outcomes are both necessary and sufficient. So nothing else is required. They together are a simulation model of the target reality. This means that the class model gives the static form of the world and names the most important distribution of business responsibilities. The collaboration diagrams give the objects cooperation aspect to the model.
I get a task to create an OO-model with a group of business people from some organisation.
The steps:
First we get introduced. I start telling how I am, why I here and what is my background concerning OO-modelling. First I ask everyone to introduce themselves. If there is the luxury to star with the team form a modelling training, then we spend two consecutive days in training mode. Well in most cases this is too much! So Normally I give an about 3 hour super-rapid introduction to OO-modelling. The goal of this intro is to give the modelling group the most basic skills to read class- and collaboration diagrams and to have enough understanding about the mapping between the model and reality.
Then we start the modelling. The first thing here is to have someone who deeply understand the business and the current operation describes the operation in his own words. Then it is fairly easy for me to tack a catch from this and list a few most obvious candidates for classes. Here I try to choose businesswise most fundamental concepts. At the beginning of the modelling it is good to get the participant start to think very precisely and define these very familiar concepts. It is very important that the classes are clear, distinct and crisp edged.
Here is a simplified example to illustrate this. Let’s have a book shop that need to have a new operation control system that enables the business to extend to web also. We start to create an object model of the business. The owner of the shop tells us that this is a street level shop: They have separate section for different book categories like: Fiction, Non-fiction, Hobbes, Cooking, Travelling, etc. We have a few customer types. Someone comes in and want just a particularly book from a given author. Some regular customer comes periodically and asks new books from their favourite authors. Other regular customers come in and just wanders here between shelves and pick up interesting book and buys some of them.
Now we start with the class definition part. Let’s pick class candidates like: Person, Book, BookCategory Purchase. Now we add corresponding associations. Our starting class diagram looks following:

Next thing is to add attributes and descriptions for these classes.

Here we actually have the business core of a CMR application. One sidestep on our path, a remark about CMR. Here everyone can clearly see that a minim set of classes required is actually what you see here. The important thing here is that something to be CMR (ie. customer something..) needs both the customer either role, person or organisation and a set of products. A customership concept is not a specialized subset of role concept. It is actually a relationship between a role entity and a set of products (or product description). The essential thing here is that the whole product catalog is needed within the CRM application! Without it is worthless. But let’s get back to our business.
Now we have each person’s purchase history. So this information gives us some means to categorize a buyer. At this point the shop owner turns the focus elsewhere. He starts to talk about customers visit in the shop. He says that the personnel have some time been talking of interesting information that they don’t have. This is the books that the customer have picked up and scanned trough but decided not to buy.
Then I will interrupt and say that this is very important finding about the business. Let’s put that into our model. But how is that done? Well we are modeling reality and we are emphasizing important aspects of it. This mean that we need an event that catches this behavior. Let’s call in Walk. This is an event that starts when the person enter the shop and it end when he/she reaches the cash. Now we will associate all the books that the person pick up during his/hers walk.

If this would be a model of an electronic shop, then it would be very easy to collect this information. Actually this Walk is very close to Shopincart consept implemented in most web-shop implementations. Expandind the shopincart to walk gives us menthaly easier way to all aspects of the Walk thap could also called Visit. Now you can start to ask question like: How the visit are distriputed timewise? What is the time distripution of these visit? What is the ratio between visit length and total purchase and so on.
Now how does this model behave. He I will add a collaboration diagram without any explination:

The nextextention of this model could be the quetion of customers loger term behaviour, vip-customer and so on. Adding here a Role class add alot of these possibilities.