We have presented the beginnings of a methodology for designing generic architectures, utilizing the principles of separation of concerns and genericity. Fundamental to this approach are the notions of concept, content, and context, and their role in thinking about how generic components "fit together". To illustrate these ideas we have presented the examples of a generic Stacks and generic Sort concept.
We have also considered issues relating to more complex generic architectures. Fundamental to mastering the complexity of such architectures is a multi-level approach, where context at the higher levels is "higher-order invariant". That is, context is fixed not as specific subsystem content, but as a specific generic architecture representing a range of subsystem instantiations.
We are currently using the work discussed in this paper in a number of projects at the University of Maine, one of which is SEER. SEER is concerned with the development and presentation of information webs surrounding the Booch components [Booc 87], a collection of approximately 500 commercially available Ada components. Under the premise that a tremendous amount of replication of content exists in these components, we are applying our methodology to "sort out" underlying component architectures. In doing so we are extending our SEER prototype to include a description of such architectures.
We are also exploring a number of "higher level" architectures. One such example is the configurable database management system generic architecture. Other examples are the generic editor architecture in [Whee 88], and the architecture of our SeeGraph system [Lato 88].