A concept in object-oriented programming
which means the redistribution
functionality among smaller, well-defined component
s. When every component in a software system
has a clearly defined job description
, it is easier to locate any piece of functionality by looking up the component whose scope of operation
includes it. This also makes adding new functionality simpler, as it's often clear which component should take the new responsibility upon itself.
In order for such a software system to operate, components acquire services from each other to supply their own services. The requests are done via well-defined contracts of supply and demand. The benefit to having such autonomous self-contained components is that it's relatively easy to extract them from one software environment and reuse them in another.