Martin L. Griss, Senior Scientist, Hewlett-Packard Laboratories, Palo Alto, CA.
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.
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.
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 (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:
VB is extensible enough to be the basis for a family of compatible, domain-specific kits, and has inspired the design of several similar systems. VB illustrates many important kit features:
Procedures written in C and C++ can easily be linked in. 3rd party components and tools cover many domains (e.g., database, finance, instruments), and include cross reference facility, component development kit, source code management, help builder, and basic compiler.
While kit-like features, such as those in Visual Basic or Borland’s Delphi, are extremely useful to the practical delivery of reuse, most object-oriented frameworks do not systematically include integrated problem-oriented languages, generators or other domain-specific environment extensions. It is common to design a technically excellent framework and classes that are too complex for the intended utilizers. It is critical to consider their experience, skills and process they follow. Generally, these application-oriented domain experts will greatly benefit from a custom problem-oriented language and generators; they shudder at the thought of using inheritance and C++. If generators or domain-specific languages are used, they can not be added as an afterthought. The kit components, framework and language must have a compatible design.
The Fourth International Conference on Software Reuse will be held for the first time in the USA, on April 23-26, 1996 in Orlando, Florida. More information can be found at the Web site http://www/cis.ohio-state.edu/icsr4. A new book describing the REBOOT (Reuse Based on Object Technology) approach is available [5].
In my next column, I will continue the discussion of these reuse techniques.