Much has been written about software components over the years. The sampling on the preceding page reflects some of the many disparate and often contradictory lines of thought that I have encountered while working on this thesis. While there is considerable discrepancy of opinion over some of the finer points of the definition of software components, there is universal agreement that the goal of the discipline is to make it possible to create software, partly or fully, from prefabricated parts. Software components, in other words, facilitate software reuse.
This discipline goes by many names. Some refer to designing software with components as “Component-Based Design” (CBD) and to the branch of software engineering as “Component-Based Software Engineering” (CBSE). Others prefer “software componentry,” or “component technology.” I have elected to use the latter name in this thesis.
From a technical perspective, component technology lays down standards that enable software parts to be usable from many different environments. While software reuse in and of itself cannot be credited to component technology, the discipline does bring increased rigor. Its standards enable objects—and not just procedures—created in different environments to communicate, while insisting that interfaces are kept separate from their implementations. Some of the technology in this space bring additional features, which enable things like distributed computing and out-of-band services through declarative attributes.
The other major perspective that is often applied to component technology is the business perspective. Because component technology makes reuse possible on a grander scale than before, there is a larger market for software components than for, say, language- and vendor-specific class libraries. As a result, some envision the formation of large software component markets, offering a wide range of compatible components competing on price and functionality, ultimately leading to the transformation of the entire industry. This thesis pays very little attention to the business perspective, and almost exclusively focuses on the enabling technology.