One of the goals of the software engineering community has been the establishment of a reusable software components industry. With increasingly wide acceptance of the Ada language, many of us feel that this goal may be within reach. The Ada language provides a powerful abstraction facility with constructs such as packages, user-defined types, and generic units with which to construct such components.However, the successful development of reusable software components written in Ada depends also upon the language's abstraction composition qualities. That is, it depends on how easily smaller abstractions (or components) may be combined to create larger and more powerful abstractions.This paper discusses in detail the most important methods by which abstractions may be composed in Ada and their limitations. A companion paper, titled "
Using the Re-Export Paradigm to Build Composable Ada Software Components
", will be published in a succeeding issue of Ada LETTERS. It demonstrates the techniques described here and concludes with suggestions for improvements that would enhance the composability of Ada software.