CSC/ECE 517 Fall 2007/wiki2 7 as

From Expertiza_Wiki
Revision as of 02:20, 24 October 2007 by Snviswan2 (talk | contribs)
Jump to navigation Jump to search

Topic

Cohesion and coupling Cohesion and coupling are concepts that are reasonably easy to understand, but nonetheless, it is challenging to find good examples that are succinct. Browse the hundreds of Web pages that attempt to explain these concepts, picking your favorite examples. Many of these pages mention related concepts; list some of them and explain how they relate to cohesion and coupling. Be sure to mention the metrics that can be used to measure how well a program conforms to the principles of high cohesion and low coupling.

Definition

Coupling

Coupling is simply defined as the degree of interdependence between modules or its like a measure of the strength of interconnection of modules or objects.

  • The more the connections between one module and the rest, the harder to understand that module, the harder to re-use that module in another situation, the harder it is to isolate failures caused by faults in the module.
  • The lower the coupling the “better”.

Cohesion

Cohesion can be described as the extent to which its individual components are needed to perform the same task i.e. how tightly bound or related [a module’s] internal elements are to one another.

  • The less tightly bound the internal elements, the more disparate the parts to the module, the harder it is to understand.
  • The higher the cohesion the “better”.


Some Small Definitions

Module a lexically contiguous sequence of program statements bounded by boundary elements, having an aggregate identifier.

Relationship A relationship exists between one module and another if that module cannot function correctly without the presence of the other.

Low Coupling and High Cohesion with different methods

Assuming the state of an object is the snapshot of its attributes in the time, all methods can belong to one of these three categories:

  • Utility: doesn't use or modify object state for ex: Integer.toString(int), Math.cos(double)
  • State View: use object state for ex: TextField.getText(), Object.toString()
  • State Change: modify object state for ex: Vector.addElement(..), Hashtable.clear()


An utility method can reach the lowest possible coupling:

  • takes only input parameters, and only if it needs them to make the output
  • returns a value (primitive or handle), or alters objects passed a parameters, and it produces all its output data (it doesn't call other methods)

A State/View method with lowest possible coupling does:

  • takes input parameters and uses attributes or methods (class or instance ones) belonging to its class (i.e. in every way but not from class members of others classes, constants excluded)
  • returns a value, alters parameters or throws an exception

A State/Change method with lowest possible coupling does:

  • takes input parameters and uses attributes or methods (class or instance ones) belonging to its class (i.e. in every way but not from class members of others classes, constants excluded)
  • returns a value, alters parameters or throws an exception , or through attributes and methods (class or instance ones) belonging to its class (i.e. in every way but not with class members of others classes)