The solution is presented in two main stages: firstly a framework for adapting components is defined; secondly a framework for retrieving components based on matching component interfaces is defined. Both of these frameworks take advantage of the formal nature of the component interfaces, as a result more sophisticated tools can be developed. For generality it is proposed that formal languages used to represent interfaces are partitioned into three separate levels of granularity - expressions, units and modules - and solutions to adaptation and retrieval are developed separately at each level. An important consideration in developing these frameworks is to ensure that certain component properties are preserved when adapting and retrieving components.
Having proposed these general frameworks, algorithms for adapting and retrieving components are defined in a more concrete and detailed sense within the CARE system. CARE was chosen because the language is relatively simple and compact, yet contains many of the features found in other formal languages, including: variables; functions; predicates; binders; application; typing; parameters; inputs and outputs (and their types); preconditions and postconditions; textual and formal parameters; separation of specification and implementation; case statements; modules; applicability conditions; encapsulation; and information hiding.
These techniques for adapting and retrieving components have been prototyped as extensions to existing CARE tools. As a means of illustrating the value that these extensions have added to the overall CARE system, several example developments using the extended tools are presented at the end of the thesis.
The approach to component reuse presented in this thesis represents
a significant advance on other similar approaches. The approach given here
is far more general than other approaches, particularly with respect to
the scope of components and their interfaces that are considered.
Also the adaptation framework goes beyond other approaches which have typically
been restricted to parameter instantiation.