Dependency (computer science) |
In computer science, dependency or coupling is the degree to which each program module relies on each other module. Coupling can be high (or tight ), or low (or loose ). 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 probably needed. In modern computing systems, performance can often be traded for lower coupling; the gains in the software development process are greater than the value of the running performance gain.
However it must be noted that the specific term coupling is used in Object-oriented programming design along with its dual notion Cohesion, while dependency is used in more traditional programming.
The types of coupling, in order of lowest to highest coupling, are as follows:
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.
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 Apt package format, as well as some versions of the RPM Package Manager 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 Computer_program, only gets linked together once all its dependencies, i.e. the objects it is built of, have been compiled.|
|