User Tools

Site Tools


principles:high_cohesion

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
principles:high_cohesion [2013-06-22 20:41]
christian
principles:high_cohesion [2019-05-29 15:09] (current)
christian old revision restored (2016-09-03 22:52)
Line 21: Line 21:
  
 Several kinds of cohesion can be distinguished some of which are strong and some of which are loose. So strong forms of coupling should be preferred: FIXME add explanation of cohesion types Several kinds of cohesion can be distinguished some of which are strong and some of which are loose. So strong forms of coupling should be preferred: FIXME add explanation of cohesion types
 +
 ===== Rationale ===== ===== Rationale =====
  
Line 29: Line 30:
  
   * Divide one large module into several smaller but more cohesive ones   * Divide one large module into several smaller but more cohesive ones
 +
 ===== Caveats ===== ===== Caveats =====
  
Line 36: Line 38:
 ===== Origin ===== ===== Origin =====
  
 +W. P. Stevens, ​ G. J. Myers, L. L. Constantine:​ //​Structured design//
  
 ===== Evidence ===== ===== Evidence =====
Line 41: Line 44:
 /​*[[wiki:​Proposed]]*/​ /​*[[wiki:​Proposed]]*/​
  
-  * [[wiki:​Examined]] +  * [[wiki:​Examined]]: There are metrics that try to measure cohesion and there are studies relating these cohesion measures to the number of errors found during testing (({{page>​resources:​A Handbook Of Software And Systems Engineering#​reference}})). This correlation is evident. The limitation of these studies is that these cohesion metrics cannot represent the cohesion notion completely. 
-  * [[wiki:​Accepted]] The concept of high cohesion is widely known and described in several well-known books for example in Craig Larman'​s //Applying UML and Patterns//+  * [[wiki:​Accepted]] The concept of high cohesion is widely known and described in several well-known books for example in {{page>​resources:​Applying UML And Patterns#​reference}}.
  
 /​*[[wiki:​Questioned]]*/​ /​*[[wiki:​Questioned]]*/​
Line 83: Line 86:
 /​*[[wiki:​Incomplete]]*/​ /​*[[wiki:​Incomplete]]*/​
 /​*[[wiki:​Complete]]*/​ /​*[[wiki:​Complete]]*/​
 +
 +==== Class level cohesion ====
 +
 +Robert Cecil Martin (Uncle Bob) describes maximal cohesion at class level as "a class in which each variable is used by each method"​.
 +
 +"In general the more variables a method manipulates the more cohesive that method is to its class." ​
 +(Clean Code: A Handbook of Agile Software Craftsmanship - Chapter 10)
  
 ===== Further Reading ===== ===== Further Reading =====
  
-  * Albert Endres and Dieter Rombach: //A Handbook of Software and Systems Engineering//​. p. 43pp.+  * Albert Endres and Dieter Rombach: //[[resources:​A Handbook of Software and Systems Engineering]]//. p. 43pp.
   * [[wp>​Cohesion (computer science)]]   * [[wp>​Cohesion (computer science)]]
   * [[wiki>​CouplingAndCohesion]]   * [[wiki>​CouplingAndCohesion]]
-  * Craig Larman//Applying UML and Patterns ​– An Introduction to Object-Oriented Analysis and Design and Iterative Development//​+  * {{page>​resources:Applying UML And Patterns#​reference}}
  
 ===== Discussion ===== ===== Discussion =====
  
 Discuss this wiki article and the principle on the corresponding [[talk:​principles:​High Cohesion|talk page]]. Discuss this wiki article and the principle on the corresponding [[talk:​principles:​High Cohesion|talk page]].
principles/high_cohesion.1371926493.txt.gz · Last modified: 2013-06-22 20:41 by christian