Cohesion in Java with Example

In this article, we will learn about Cohesion in detail with examples.

1. Intent/Definition

The term cohesion is used to indicate the degree to which a class has a single, well-focused responsibility.

Cohesion is a measure of how the methods of a class or a module are meaningfully and strongly related and how focused they are in providing a well-defined purpose to the system.

2. Implementation with Example

In object-oriented design, cohesion refers all to how a single class is designed. Cohesion is the Object-Oriented principle most closely associated with making sure that a class is designed with a single, well-focused purpose.
The more focused a class is, the more cohesiveness of that class is more.
The advantages of high cohesion are that such classes are much easier to maintain (and less frequently changed) than classes with low cohesion. Another benefit of high cohesion is that classes with a well-focused purpose tend to be more reusable than other classes.

3. Two types of Cohesion

  1. Low Cohesive
  2. High Cohesive

3.1 Low Cohesive

A class is identified as a low cohesive class when it contains many unrelated functions within it. And that is what we need to avoid because big classes with unrelated functions hamper their maintaining. Always make your class small and with a precise purpose and highly related functions.
Example: In this example, the purpose of MyReader class is to read the resource. But it contains some unrelated functions such as validateLocation(), checkFTP(), ping(), hence it is low cohesive.
class MyReader {
    // -------------- unrelated functions
    public boolean validateLocation(String pathIP) {
         return ping(pathIP) && checkFTP(pathIP);
    }
    private boolean checkFTP(String pathIP) {
         return true;
    }

    private boolean ping(String pathIP) {
          return true;
    }

    // -------------- functions related to read resource

    // read the resource from disk
    public String readFromDisk(String fileName) {
         return "data of " + fileName;
    }

    // read the resource from web
    public String readFromWeb(String url) {
         return "data of " + url;
    }

    // read the resource from network
    public String readFromNetwork(String networkAddress) {
         return "data of " + networkAddress;
    }

}

3.2 High Cohesion

  1. The code has to be very specific in its operations.
  2. The responsibilities/methods are highly related to the class/module.
  3. The term cohesion is used to indicate the degree to which a class has a single, well-focused responsibility. Cohesion is a measure of how the methods of a class or a module are meaningfully and strongly related and how focused they are in providing a well-defined purpose to the system. The more focused a class is the higher its cohesiveness - a good thing.
  4. A class is identified as a low cohesive class when it contains many unrelated functions within it. And that is what we need to avoid because big classes with unrelated functions hamper their maintaining. Always make your class small and with a precise purpose and highly related functions.
Example: In this example, the purpose of MyReader class is to read the resource and it does that only. It does not implement other unrelated things. Hence it is highly cohesive.
class HighCohesive {
    // -------------- functions related to read resource
    // read the resource from disk
    public String readFromDisk(String fileName) {
         return "reading data of " + fileName;
    }

    // read the resource from web
    public String readFromWeb(String url) {
         return "reading data of " + url;
    }

     // read the resource from network
    public String readFromNetwork(String networkAddress) {
         return "reading data of " + networkAddress;
    }
}

GitHub Repository

The source code of this post is available on GitHub: Object-Oriented Design Guide.
Learn complete Java Programming with Examples - Java Tutorial | Learn and Master in Java Programming with Examples

Related OOP Posts

Comments

Post a Comment