What is LCOM4?

Cohesion is the degree to which the methods of a single class are tied together. When two methods in a class do not use a common attribute or a common method, it means that they share nothing and should probably not belong to the same class to respect the Single Responsibility Principle. In other words you can split your class into several new classes to gain modularity at class level.

Sonar computes the LCOM4 (Lack of Cohesion of Methods) metric based on Hitz & Montazeri. Here is a good introduction: http://www.aivosto.com/project/help/pm-oo-cohesion.html#LCOM4.

The best value for this metric is 1.

How to Hunt for Bad LCOM4?

Add the LCOM4 widget (was Chidamber & Kemerer widget for Sonar versions prior to 3.3) on your dashboard:

Drill down:

Example

Bad LCOM4

Project with one single class: Client.

 

package example;

public class Client {
  
  public String firstname;
  public String lastname;
  public String street;
  public String city;
  public String zipCode;

  public String getFullName() {
    return firstname + " " + lastname;
  }

  public String getFullAddress() {
    return street + " " + city + " " + zipCode;
  }
  
}

 

The project has an average LCOM4 value of 2:

The Client class has an LCOM4 value of 2:

It shows that there should be two different objects: Client and Address.

Good LCOM4 after Refactoring

After creating a new Address class and creating an Address object in Client:

package example;

public class Address {
  
  public String street;
  public String city;
  public String zipCode;

  public String getFullAddress() {
    return street + " " + city + " " + zipCode;
  }
package example;

public class Client {
  
  public String firstname;
  public String lastname;
  public Address address;

  public String getFullName() {
    return firstname + " " + lastname;
  }

  public String getFullAddress() {
    return address.getFullAddress();
  }
  
}

The LCOM4 of the project is down to the best value:

Thanks to the fact that Client and Address have an LCOM4 value of 1:

Related Topics

See the following blog post: Clean Up Design at Class Level with Sonar.