Opentopia Directory Encyclopedia Tools

Coupling (computer science)

Encyclopedia : C : CO : COU : Coupling (computer science)


In computer science, coupling or dependency is the degree to which each program module relies on each other module.

Coupling is usually contrasted with cohesion. Low coupling often correlates with high cohesion, and vice versa. The software quality metrics of coupling and cohesion were invented by Larry Constantine, original developer of Structured Design (see also SSADM).

Low coupling

Coupling can be "low" (also "loose" and "weak") or "high" (also "tight" and "strong"). Low coupling means that one module does not have to be concerned with the internal implementation of another module, and interacts with another module with a stable interface (see Information hiding). With low coupling, a change in one module will not require a change in the implementation of another module. Low coupling is a sign of a well structured computer system.

However, in order to achieve maximum efficiency, a highly coupled system is sometimes needed. In modern computing systems, performance is often traded for lower coupling; the gains in the software development process are greater than the value of the running performance gain.#redirect

Low-coupling / high-cohesion is a general goal to achieve when structuring computer programs, so that they are easier to understand and maintain.

The concepts are usually related: low coupling implies high cohesion and vice versa. In the field of object-oriented programming, the connection between classes tends to get lower (low coupling), if we group related methods of a class together (high cohesion).

In object-oriented programming, coupling is a measure of how strongly one class is connected to another.

Coupling is increased between two classes A and B if:

Disadvantages of high coupling include:

One measure to achieve low coupling is functional design: it limits the responsibilities of modules. Modules with single responsibilities usually need to communicate less with other modules, and this has the virtuous side-effect of reducing coupling and increasing cohesion in many cases.

Types of coupling

The types of coupling, in order of lowest to highest coupling, are as follows:

Data coupling
Data coupling is when modules share data through, for example, parameters. Each datum is an elementary piece, and these are the only data which are shared (e.g. passing an integer to a function which computes a square root).
Stamp coupling (Data-structured coupling)
Stamp coupling is when modules share a composite data structure, each module not knowing which part of the data structure will be used by the other (e.g. passing a student record to a function which calculates the student's GPA).
Control coupling
Control coupling is one module controlling the logic of another, by passing it information on what to do (e.g. passing a what-to-do flag).
External coupling
External coupling occurs when two modules share an externally imposed data format, communication protocol, or device interface.
Common coupling
Common coupling is when two modules share the same global data (e.g. a global variable).
Content coupling
Content coupling is when one module modifies or relies on the internal workings of another module (e.g. accessing local data of another module).
In object-oriented programming, subclass coupling describes a special type of coupling between a parent class and its child. The parent has no connection to the child class, so the connection is one way (i.e. the parent is a sensible class on its own). The coupling is hard to classify as low or high; it can depend on the situation.

Example

In the first instances of the IBM PC, BIOS, some developers used low level but undocumented internal functions to optimize their programs, instead of the public API. This approach had the advantage of bringing higher performance, but as a result the programs were more complex, more difficult to maintain, and the internal functions could change on a subsequent BIOS version.

Known uses

Dependency is also common in talking about software package management. One software package, in order to work or to be fully functional, may depend on other software packages and thus must also be installed, and their specific versions must be known if backward compatibility is broken between versions. The Advanced Packaging Tool package format, as well as some versions of the RPM package format, include dependency information between packages. This is convenient for updating software but can lead to dependency hell.

Build systems like make are also dependency driven in the sense that a more complex object, like a program, only gets linked together once all its dependencies, i.e. the objects it is built of, have been compiled.

High cohesion and low coupling are attributes of good design.

See also

 


From Wikipedia, the Free Encyclopedia. Original article here. Support Wikipedia by contributing or donating.
All text is available under the terms of the GNU Free Documentation License See Wikipedia Copyrights for details.

Search Titles
0123456789
ABCDEFGHIJ
KLMNOPQRST
UVWXYZ?

E-mail this article to:

Personal Message: