Cohesion Coupling Cohesion is the indication of the relationship within module. Coupling is the indication of the relationships between modules Cohesion shows the module’s relative functional strength. Coupling shows the relative independence among the modules. Cohesion is Intra – Module Concept. Coupling is Inter -Module Concept. While designing you should strive for high cohesion i.e. a cohesive component/ module focus on a single task While designing you should strive for low coupling i.e. dependency between modules should be less. Classification of Coupling Data coupling Two modules are data coupled, if they communicate through a parameter. An example is an elementary (primal) data item passed as a parameter between two modules, e.g. an integer, a float, a character, etc. Stamp coupling This is a special case (or extension) of data coupling Two modules (``A'' and ``B'') exhibit stamp coupling if one passes directly to the other a composite data item - such as a record (or structure), array, or (pointer to) a list or tree. This occurs when Class B is declared as a type for an argument of an operation of ClassA Control coupling If data from one module is used to direct the order of instructions execution in another. An example of control coupling is a flag set in one module and tested in another module. Common coupling Two modules are common coupled, if they share data through some global data items. Common coupling can leads to uncontrolled error propagation and unforeseen side effects when changes are made. Content coupling Content coupling occurs when one component secretly modifies data that is internal to another component. This violets information hiding – a basic design concept Content coupling exists between two modules, if they share code.