Components have to be generalized in a sufficient number of different contexts to allow for reuse. A software component is a system element offering a predefined service and able to communicate with other components. Software components are binary units of independent production, acquisition and deployment that interact to form a functioning system. Insisting on independence and binary form is essential to allow for multiple vendors and robust integration. Different software components are composed into composite systems, called
Component Software.