Only the design details will be discussed in detail.
So we will consider requirements for a system will be given and the problem is to decide on a set of classes that will be needed to build such a system.
Is there some guide how to use the requirements to discover what classes might be appropriate?
Caution: Initially, when building classes, it may frequently occur that you realize you need another member function in the class. After some practice in building classes, there may be a tendency to compensate for this by including a number of member functions that you really don't need for this system. It isn't clear when to stop adding member functions for possible future systems. Remember the client who immediately says "Great! But can you add this other feature." (A feature that wasn't in the requirements.) Adding member functions that seem match the class type, indepently of whether they are actually needed for this system, can make the class easy to use for new features. The cautionary point is not to let this future planning delay the development for the current system. At some point you have to actually deliver the system to the client.