Coupling Cohesion
Coupling Cohesion
• Identify: d3 d4
d1
- modules
- control relationships among modules
- interfaces among modules.
High-level design
• The outcome of high-level design:
–program structure, also called software
architecture.
Modularity
• In technical terms, modules should display:
– high cohesion
– low coupling.
Layering
Superior
Inferior
:Sourc
e
Bad
design
may look
like this…
Coupling: Degree of dependence among
components High coupling makes
modifying parts of the
system difficult, e.g.,
No dependencies Loosely coupled-some dependencies modifying a component
affects all the components
to which the component is
connected.
Print-inventory();
Register-Student();
Issue-Book();
};
Logical cohesion
• All elements of the module perform
similar operations:
– e.g. error handling, data input, data output, etc.
• An example of logical cohesion:
– a set of print functions to generate an output
report arranged into a single module.
Logical Cohesion
module print{
void print-grades(student-file){ …}
void print-certificates(student-file){…}
void print-salary(teacher-file){…}
}
Temporal cohesion
• The module contains functions so that:
– all the functions must be executed in the same
time span.
• Example:
– The set of functions responsible for
• initialization,
• start-up, shut-down of some process, etc.
init() {
Check-memory(); Temporal
Check-Hard-disk(); Cohesion –
Example
Initialize-Ports();
Display-Login-Screen();
}
Procedural cohesion
• The set of functions of the module:
– all part of a procedure (algorithm)
– certain sequence of steps have to be carried
out in a certain order for achieving an
objective,
• e.g. the algorithm for decoding a message.
Communicational cohesion
• All functions of the module:
– Reference or update the same data structure,
• Example:
– The set of functions defined on an array or a
stack.
Communicational Cohesion
handle-Student- Data() {
Static Struct Student-data[10000];
Store-student-data();
Function A
Search-Student-data();
Function B
Print-all-students(); Function C
}; Communicational
Access same data
Sequential cohesion
• Elements of a module form different parts
of a sequence,
– output from one element of sort
the sequence is input to the
search
next.
display
– Example:
Functional cohesion
• Different elements of a module cooperate:
– to achieve a single function,
– e.g. managing an employee's pay-roll.
• When a module displays functional cohesion,
– we can describe the function using a single
sentence.
Write down a sentence to describe the function of the
module Determining
– If the sentence is compound, Cohesiveness
• it has a sequential or communicational cohesion.
– If it has words like “first”, “next”, “after”, “then”,
etc.
• it has sequential or temporal cohesion.
– If it has words like initialize,
• it probably has temporal cohesion.
Coupling
• Coupling indicates:
– how closely two modules interact or
how interdependent they are.
– The degree of coupling between two
modules depends on their interface
complexity.
Coupling
• There are no ways to precisely measure coupling
between two modules:
– classification of different types of coupling will help
us to approximately estimate the degree of coupling
between two modules.
• or an array or structure in C.
Control coupling
• Data from one module is used to direct
– order of instruction execution in another.
• Example of control coupling:
– a flag set in one module and tested in another
module.
Common Coupling
• Essentially means:
– low fan-out
– abstraction
Morphology
Characteristics of Module Structure
• Depth:
– number of levels of control
• Width:
– overall span of control.
• Fan-out:
– a measure of the number of modules directly
controlled by given module.
Characteristics of Module Structure
• Fan-in:
– indicates how many modules
directly invoke a given module.
– High fan-in represents code reuse
and is in general encouraged.
Example
Module Structure
Fan out=2
Fan out=1
Fan in=1
Fan in=2
Fan out=0
Goodness of Design
• A design having modules:
– with high fan-out numbers is
not a good design.