J. Sametinger, On a Taxonomy for Software Components, Workshop on Component-Oriented Programming (WCOP-96), Linz, July 1996.

Object-oriented programming has been an important step forward in increasing the quality of software systems and the productivity of software engineers. Objects have brought a radical change in the way software systems are being built. Objects can be regarded as components in that they facilitate to build software systems by putting various classes (objects) together. In order to facilitate component-oriented software engineering we must loosen the dependencies among components, attain higher abstraction levels, achieve vendor/platform neutrality, and facilitate the composition of different kinds of components.
Components that are integrated into a system do not run on their own. Functions and classes (objects) belong to this category. Document-oriented computing as supported by OpenDoc and OLE provides components of higher abstraction than classes and objects. Furthermore, the advances in distributed computing suggest the use of components that run on their own, have less coupling and more autonomy.
Component composition has proofed to be successful when a particular platform, i.e., operating system, runtime system, standard, has been propagated and used, e.g., UNIX pipes and filters, VisualBasic, Corba. Yet, we have not defined a uniform model for component composition and there are many issues to be addressed.

Keywords: software components, software composition, component taxonomy, open systems, software reuse