askvity

What is an example of logical cohesion?

Published in Software Design 3 mins read

An example of logical cohesion is a module that groups together functions that perform similar but ultimately unrelated operations, such as handling all I/O operations for an application within a single module.

Let's break this down:

  • Cohesion in Software Design: Cohesion refers to the degree to which the elements inside a module belong together. High cohesion is generally desired, as it leads to more maintainable, understandable, and reusable code.

  • Logical Cohesion Explained: Logical cohesion occurs when a module contains functions or code sections that perform logically similar operations, but are otherwise unrelated. This means the functions are grouped together because they seem related from a high-level perspective, rather than because they directly contribute to a single, well-defined purpose.

  • The I/O Module Example (Expanded): Imagine a module named "IO_Operations". This module might contain functions such as:

    • Read_From_File()
    • Write_To_File()
    • Print_To_Console()
    • Send_Network_Request()

    While all these functions deal with input/output, they are fundamentally different operations. Reading from a file is quite distinct from sending a network request. The only thing they have in common is that they are I/O operations.

  • Why Logical Cohesion is Problematic:

    • Reduced Reusability: It becomes harder to reuse individual functions when they are tightly coupled within a module that performs diverse tasks. You might need Read_From_File() for a specific task, but you're forced to import the entire IO_Operations module, even if you don't need the other functions.
    • Increased Complexity: The module becomes more complex and harder to understand, as it handles multiple unrelated responsibilities.
    • Maintenance Difficulties: Changes to one I/O operation (e.g., modifying the Send_Network_Request() function) might inadvertently affect other unrelated functions in the module.
    • Lower Testability: It becomes harder to write focused unit tests for individual functionalities when they're bundled together in a logically cohesive module.
  • A Better Approach (High Cohesion): A more cohesive approach would be to separate the I/O operations into distinct modules based on their purpose. For example:

    • File_IO_Module (containing Read_From_File() and Write_To_File())
    • Console_IO_Module (containing Print_To_Console())
    • Network_IO_Module (containing Send_Network_Request())

    This promotes single responsibility principle, enhances reusability, and simplifies maintenance.

In summary, logical cohesion, while seemingly organized, can lead to increased complexity and reduced maintainability in software design. A higher degree of cohesion, where each module focuses on a single, well-defined task, is generally preferred.

Related Articles