Approximation, as its name indicates, is concerned with the identification of key objects and functionality that, if possible, can be reused throughout the system.
ion, as its name indicates, is concerned with the identification of key objects and functionality that, if possible, can be reused throughout the system. Closely associated with abstraction is the principle of modularity. A module is a simple unit of the system that accomplishes a particular subtask, has a welldefined interface, and can be independently tested. It is the totality and interplay of these modules that allows a particular functionality of the overall system to be achieved. Modules can be thought of as “black boxes” in which the internal details are hidden from other modules. However, modules need to interact, and therefore each one of them has a “public” component that allows communication with the others. In the composition of each module, or even larger units, it is necessary to take into account the relationships of its internal components, or cohesiveness. We can think of cohesiveness as a measure of how well all the components are working together for a common goal. A pragmatic approach for determining whether a module is performing a single task is to try to describe its functionality through a single sentence that contains a single subject, verb, and object. If this is not possible, then the module is performing more than one task and needs to be rewritten. A tighter relationship, or high cohesiveness, in a module is desirable because it makes its functionality easier to understand, test, and document. In addition to taking into account how the internal components of a module interact to accomplish a task, it is crucial to consider how the different modules interact with one another (coupling). Coupling can be thought of as a measure of the strength of the linkages between modules, based on the amount and type of information that they exchange; that is, how closely connected the modules are. In this regard, minimal coupling is a very desirable goal in software design. The notions of coupling and cohesion are related. “Low coupling” generally correlates well with high cohesion and vice versa. Low coupling is regarded as an indicator of good design. If high cohesion among modules also exists, the desirable goals of high readability and maintainability of any individual system software component as well as of the overall system will be achieved. See also: Algorithm (/content/algorithm/022150); Computer programming (/content/computer programming/195000); Data structure (/content/datastructure/757547); Modeling languages (/content/modeling languages/801930); Programming languages (/content/programminglanguages/547550)