PACKAGING SOFTWARE REUSE TECHNOLOGIES AS KITS

Martin L. Griss, Senior Scientist, Hewlett-Packard Laboratories, Palo Alto, CA.

[Version of column to appear in Object Magazine, Nov 1995]

As explained previously, systematic reuse is a significant paradigm shift requiring careful attention to many organizational and process issues. These issues also affect reuse technology choices. Appropriate technology combinations, a reuse-oriented architecture, and effective asset packaging are crucial for a successful creator/utilizer process. Beginning with this column, I will discuss several practical reuse-enhancing techniques, focusing initially on domain-specific kits and Visual Basic.

REUSE TECHNOLOGY CHOICES

Most reuse technologies are either compositional or generative[1]. Compositional reuse involves manual assembly of building blocks and components, while generative reuse involves application generation from problem-oriented languages and specifications. These techniques are often combined, e.g., when library components are assembled by the generator using templates [2] or system generation language [3].

A judicious combination of techniques is needed to balance the conflicting demands of extensive reuse, ease-of-use by application developers, and customizability of results. This balance is critical to achieve domain-specific reuse with greatly decreased application development time, and to empower non-traditional programmers. Using only objects and inheritance-based frameworks leads to very hard-to-use systems.

It is important to understand when each technique is most appropriate and how these techniques might be combined to effectively deliver reuse in different problem domains. The following are some of the techniques to consider. I will discuss several in greater detail in future columns.

I use the concept of domain-specific kit to guide the development of consistent technology combinations. Lets consider at kits in more detail.

DOMAIN-SPECIFIC KITS

A domain-specific kit[4,6] (similar to a "toolkit"[7]) is a set of compatible, reusable "elements" that work well together to make it easy to build a family of related applications in some domain. A kit developer uses domain engineering methods to structure the application domain, and kit engineering methods to build domain-specific components, framework, and tools. The kit can then be used by application developers to rapidly build one or more applications in this domain. While kits typically make visible the components and framework, domain-specific tools, languages, and generators hide complexity.

A domain-specific kit may include several kinds of kit elements:

Not all kit elements must be individually domain-specific to produce a domain-specific environment. Technology choices lead to different degrees of domain-specificity for the kit elements and the environment as a whole, and different degrees of kit extensibility and interoperability. For example, with a generic framework and glue language, it is relatively easy to combine different domain-specific components and kits. Further, some components and subsystems can be generated using distinct domain-specific tools, without disturbing other parts of the kit. Each kit element (even in one kit) can be implemented using different technologies and mechanisms, and can be parameterized and customized in different ways. Overall, the kit must capture and present to the user the appropriate programmability in a convenient, domain-specific metaphor as possible. Component and tool mechanisms and packaging be carefully designed to allow an appropriate balance between integration, coherence, domain-specificity and extensibility.

VISUAL BASIC AS A KIT

Visual Basic (VB) exemplifies many of the kit features described above, and is an interesting component-based application construction environment to use and study. VB has become very popular since 1990, because of its features, a growing set of 3rd party components and tools, and significant support by Microsoft[8]. Microsoft uses Visual Basic for Applications as a strategic embedded glue/customization/macro language for its extensible applications, and as a integration and automation language for OLE-based applications.

VB's power comes from the careful balance between: