Designing a software product is the most challenging aspect about software development activities. When a software product needs to be developed then the first thing to be done is to find out the requirements of users of the software product. Even though requirement management activities are themselves challenging; nevertheless the next step to be done is to find out as to how to create a design which will fulfill all the user requirements. The requirements indicate what a software product will be doing so that needs of end users is fulfilled. However how the needs of end users can be fulfilled is the domain of software design. It is not easy to find out the best way to design a software product.
There are 2 methods which are deployed in designing a software product. The first one is known as mental method.
In mental method, a requirement is analysed to find out the nouns and verbs which are present in the requirement statement. For example, a requirement can state that the system should compare prices of 2 commodities and find out the commodity with the lower price. Here the nouns are ‘system’ and ‘commodities’ and the verbs are ‘compare’ and ‘find out’. We can create classes for the nouns and verbs will form the operations involving these nouns. Since system will be the top level entity in the software design (everything will belong to the system in the software design), we can create a class for commodity.
The next level of designing involves thinking about relationship among classes. For this ‘has a’ and ‘is a’ relationship type is determined. For example a commodity is a member of a commodity group. Similarly a commodity has a price band attached to it. All classes which have ‘is a’ relationship with the other class is a child class of this class. All classes which have ‘has a’ relationship with the other class is parallel to this class. In this step all child classes can be extended from the super classes and all parallel classes can be implemented from a common interface class.
Mental models are good for designing user interfaces. But they are good enough to build business logic which need to be implemented. It is because the business logic can not be implemented using simple hierarchy of classes. Component model is a better choice for implementing business logic.