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 revisionPrevious revision
Next revision
Previous revision
principles:high_cohesion [2013-06-15 15:29] – [Context] 94.217.39.37principles:high_cohesion [2021-10-18 21:36] (current) – +++ restored +++ christian
Line 20: Line 20:
 The cohesion of a module is a measure for how well the internal parts of a module (e.g. the methods and attributes of a class) belong together. Having a high cohesion means, that a module should only comprise responsibilities which belong together. The cohesion of a module is a measure for how well the internal parts of a module (e.g. the methods and attributes of a class) belong together. Having a high cohesion means, that a module should only comprise responsibilities which belong together.
  
-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.
 ===== Rationale ===== ===== Rationale =====
  
Line 26: Line 26:
  
  
-===== Strategies ===== 
  
-  * Divide one large module into several smaller but more cohesive ones+
 ===== Caveats ===== ===== Caveats =====
  
Line 36: Line 35:
 ===== Origin ===== ===== Origin =====
  
 +W. P. Stevens, G. van Niekerk, G. J. Myers, L. L. Constantine: //Structured design//
  
 ===== Evidence ===== ===== Evidence =====
Line 41: Line 41:
 /*[[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 76: Line 76:
  
 ===== Examples ===== ===== Examples =====
 +The donkey is good. The site is not working
  
  
Line 83: Line 84:
 /*[[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 ===== 
 + 
 +Discuss this wiki article and the principle on the corresponding [[talk:principles:High Cohesion|talk page]].
  
principles/high_cohesion.1371302963.txt.gz · Last modified: 2013-06-15 15:29 by 94.217.39.37