Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Cohesion (computer science)
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
== Types of cohesion == Cohesion is a qualitative measure, meaning that the source code is examined using a [[rubric (academic)|rubric]] to determine a classification. Cohesion types, from the worst to the best, are as follows: ;{{anchor|Coincidental}}Coincidental cohesion (worst): Coincidental cohesion is when parts of a module are grouped arbitrarily. The only relationship between the parts is that they have been grouped together (e.g., a “Utilities” class). Example: ::<syntaxhighlight lang="c"> /* Groups: The function definitions Parts: The terms on each function */ Module A { /* Implementation of r(x) = 5x + 3 There is no particular reason to group functions in this way, so the module is said to have Coincidental Cohesion. */ r(x) = a(x) + b(x) a(x) = 2x + 1 b(x) = 3x + 2 } </syntaxhighlight> ;{{anchor|Logical}}Logical cohesion: Logical cohesion is when parts of a module are grouped because they are logically categorized to do the same thing even though they are different by nature (e.g., grouping all mouse and keyboard input handling routines or bundling all models, views, and controllers in separate folders in an [[Model–view–controller|MVC pattern]]). ;{{anchor|Temporal}}Temporal cohesion: Temporal cohesion is when parts of a module are grouped according to the time in which they are processed. The parts are processed at a particular time in program execution (e.g., a function that is called after catching an exception that closes open files, creates an error log, and notifies the user). ;{{anchor|Procedural}}Procedural cohesion: Procedural cohesion is when parts of a module are grouped because they always follow a certain sequence of execution (e.g., a function that checks file permissions and then opens the file). ;{{anchor|Communicational|Informational}}Communicational/informational cohesion: Communicational cohesion is when parts of a module are grouped because they operate on the same data (e.g., a module that operates on the same record of information). ;{{anchor|Sequential}}Sequential cohesion: Sequential cohesion is when parts of a module are grouped because the output from one part is the input to another part like an assembly line (e.g., a function that reads data from a file and processes the data). ;{{anchor|Functional}}Functional cohesion (best): Functional cohesion is when parts of a module are grouped because they all contribute to a single well-defined task of the module (e.g., [[Lexical analysis]] of an XML string). Example: ::<syntaxhighlight lang="c"> /* Groups: The function definitions Parts: The terms on each function */ Module A { /* Implementation of arithmetic operations This module is said to have functional cohesion because there is an intention to group simple arithmetic operations on it. */ a(x, y) = x + y b(x, y) = x * y } Module B { /* Module B: Implements r(x) = 5x + 3 This module can be said to have atomic cohesion. The whole system (with Modules A and B as parts) can also be said to have functional cohesion, because its parts both have specific separate purposes. */ r(x) = [Module A].a([Module A].b(5, x), 3) } </syntaxhighlight> ;{{anchor|Perfect|Atomic}}Perfect cohesion (atomic): Example. ::<syntaxhighlight lang="c"> /* Groups: The function definitions Parts: The terms on each function */ Module A { /* Implementation of r(x) = 2x + 1 + 3x + 2 It's said to have perfect cohesion because it cannot be reduced any more than that. */ r(x) = 2x + 1 + 3x + 2 } </syntaxhighlight> Although cohesion is a ranking type of scale, the ranks do not indicate a steady progression of improved cohesion. Studies by [[Larry Constantine]], [[Edward Yourdon]], and [[Steve McConnell]]<ref name="McConnell"/> indicate that the first two types of cohesion are inferior, communicational and sequential cohesion are very good, and functional cohesion is superior.
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)