Component Interoperation

Johannes Sametinger
 
Johannes Kepler University
CD Laboratory for Software Engineering
Institut für Wirtschaftsinformatik
A-4040 Linz, Austria
 
E-mail: sam@swe.uni-linz.ac.at
Tel: ++43-732-2468-9435
Fax: ++43-732-2468-9430

Abstract:

A variety of component types can be reused. Yet different composition techniques and different forms of interoperation of components make reuse difficult or impossible in many situations. We briefly introduce components and component composition. Then we describe forms of interoperation. We propose a classification by introducing an interoperation matrix where we consider control and data aspects of interoperation and distinguish among sixteen different forms of interoperation.

Keywords: software components, software composition, software interoperation, component taxonomy, software reuse

Workshop Goals: discussiondefinition of componentcompositioninteroperation

Working Groups: component certification tools, frameworks and processes; domain engineering tools

Background

The author's main research interests include software engineering, software maintenance, software documentation, object-oriented programming, component-oriented programming, and software reuse. Results in the area of reuse include a proposal for reuse documentation [1], a method for documentation reuse [2, 3], a measure for ad-hoc reuse [4], a contribution on a component taxonomy [5], and empirical studies on reuse [4, 6].

Position

Software components are self-contained, clearly identifiable pieces that describe and/or perform specific functions. This is a broad and general definition. We can have a variety of components like functions, classes, applications, subsystems, design documents, distributed processes, Ada packages, etc. We cannot necessarily reuse any of these components in a given reuse context. A classification system is important to assign components to specific categories and to limit component retrieval to categories appropriate in a certain context.

Software Composition

Constructing software systems from software components is called software composition. Composable software has a higher degree of flexibility than monolithic software. Different languages and environments realize software composition to different degrees and support different notions of components and compositions. Component-oriented software development requires that we have a selection of reusable components that are plug-compatible. No general model of software composition exists yet [7].

Software Interoperation

If two components interoperate, we have a sending component (initiating the interoperation) and a receiving component. The sending component activates the receiving component and passes control to it. The receiving component reacts to the control input; it performs some action and, depending on whether communication is synchronous or asynchronous, returns control to the sending component. Some amount of information is usually passed along with interoperation. If more extensive data exchange is needed, components may use another component for that purpose.

The receiving component may or may not be known to the sending component. This has a major influence on the flexibility of compositions. Interconnection can be between two components (peer-to-peer), to a fixed set of components (multicast), or to a dynamic set of components (broadcast). Static interconnections are peer-to-peer. Dynamic interconnections can be either peer-to-peer, multicast or broadcast. The data component also may or may not be known to both the sender and receiver of interoperation. Fig. 1 gives an overview of the categories resulting from these distinctions. We distinguish no, static, dynamic and broadcast for control and data, which leads to sixteen categories. Some forms of interoperation in this table seem somewhat exotic, for example, the combination no control and dynamic data. However, they do have practical applications.

   figure67
Figure 1: Interoperation Matrix

For software reuse it is essential that components can be composed without having to know each other. This allows component composition without modifying components (dynamic control). For example, a function calls a sort function. In order to call a function shellsort instead, the program text in the calling function has to be modified. Object-oriented programming provides more flexibility through dynamic binding; a calling object does not know the receiver of a call. This makes this object work with a variety of other objects without being modified. Component composition is easiest and most flexible when interconnections among components are not point-to-point. Reusing components is easy in environments where each component can react to events generated by any other components and create new events without being aware of any recipients.

Standardized interoperation mechanisms of components on different levels of complexity and granularity are important for software reuse. We must also increase interchangeability of components beyond programming language boundaries and benefit from the availability of different programming paradigms.

Comparison

Several definitions of components and reusable components have been provided in the literature. We distinguish two approaches. Components can be seen as some part of a software system that is identifiable and reusable; functions and classes are examples of such components. Components can also be seen as the next level of abstraction after functions, modules and classes. The term component-oriented programming (as a successor to object-oriented programming) is used in this context.

Examples of definitions in the former category have been proposed by Booch [8], by Holibaugh et al [9], by Nierstrasz and Dami [10], in the NATO Standard for the Development of Reusable Software Components [11], by Wegner [12], etc. The definitions are more or less general. Szypersky provides an example of the latter category. He sees component-oriented programming as a refined variation of object-oriented programming [13]. Without explicitly defining a component, Szypersky considers information hiding, polymorphism, late binding, and safety as crucial aspects for component-oriented programming.

Categories of components have also been suggested by Booch, Holibaugh, Nierstrasz, etc. Additional taxonomies have been proposed by Margono and Berard (a modification of Booch's taxonomy) [14], by Bradford Kain [15], by McGregor et al. [16], and by Dusink and van Katwijk [17]. The presented component taxonomies were created in different contexts and with different motivations. Many concentrate on source code and do not consider higher levels of abstractions.

Component types strongly influence how they are composed. Functional composition and object-oriented composition are typical for functions and classes. Nierstrasz and Dami make a distinction among functional composition, blackboard composition and composition by extension [10] and among macro expansion, high order functional composition and binding of communication channels [7]. In the literature the terms composition and interoperation are mostly used interchangeably.

References

1
J. Sametinger, ``Reuse documentation and documentation reuse,'' in TOOLS 19: Technology of Object-Oriented Languages and Systems (R. Mitchell, J.-M. Nerson, and B. Meyer, eds.), pp. 17-28, Paris, France: Prentice Hall, 1996.

2
B. Childs and J. Sametinger, ``Literate programming and documentation reuse,'' in 4th International Conference on Software Reuse (M. Sitaraman, ed.), pp. 205-214, Orlando, Florida: IEEE Computer Society Press, Apr. 23-26, 1996. 1996.

3
J. Sametinger, ``Object-oriented documentation,'' ACM Journal of Systems Documentation, vol. 18, pp. 3-14, Jan. 1994.

4
B. Childs and J. Sametinger, ``Reuse measurement with line and word runs,'' in TOOLS Pacific '96, (Melbourne, Australia), Nov. 1996.

5
J. Sametinger, ``On a taxonomy for software components,'' in WCOP-96. Workshop on Component-Oriented Programming, (Linz, Austria), July 8, dpunkt, 1996.

6
B. Childs and J. Sametinger, ``Analysis of literate programs from the viewpoint of reuse,'' Software--Concepts and Tools, to be published, 1997.

7
O. Nierstrasz and T. D. Meijler, ``Research Directions in Software Composition,'' ACM Computing Surveys, vol. 27, pp. 262-264, June 1995.

8
G. Booch, Software Components with Ada: Structures, Tools, and Subsystems. Menlo Park, CA: Benjamin/Cummings Publishing Company, Inc., 1987.

9
R. Holibaugh and J. Perry, ``Phase I testbed description: Requirements and selection guidelines,'' Tech. Rep. CMU/SEI-88-TR-13, Software Engineering Institute, Carnegie Mellon University, Sept. 1988.

10
O. Nierstrasz and L. Dami, ``Component-oriented software technology,'' in Object-Oriented Software Composition (O. Nierstrasz and D. Tsichritzis, eds.), pp. 3-28, Prentice Hall International (UK), December 1995. 1995.

11
NATO, ``NATO standard for the development of reusable software components, volume 1 (of 3 documents),'' 1994. Public Ada Library: http://wuarchive.wustl.edu/languages/ada/docs/nato_ru/.

12
P. Wegner, ``Towards component-based software technology,'' Tech. Rep. No. CS-93-11, Brown University, 1993.

13
C. Szyperski, ``Component-oriented programming: A refined variation on object-oriented programming,'' The Oberon Tribune, vol. 1, pp. 1, 4-6, Dec. 1995.

14
J. Margono and E. Berard, ``A Modified Booch's Taxonomy for Ada Generic Data-Structure Components and their Implementation,'' in Tafvelin [18], pp. 61-74. 1987.

15
J. Bradford Kain, ``Components: The Basics: Enabling an Application or System to be the Sum of its Parts,'' Object Magazine, vol. 6, pp. 64-69, April 1996.

16
J. D. McGregor, J. Doble, and A. Keddy, ``A Pattern for Reuse: Let Architectural Reuse Guide Component Reuse,'' Object Magazine, vol. 6, pp. 38-47, April 1996.

17
E. Dusink and J. van Katwijk, ``Reflections on Reusable Software and Software Components,'' in Tafvelin [18], pp. 113-126. 1987.

18
S. Tafvelin, ed., Ada Components: Libraries and Tools, (Ada-Europe International Conference, Stockholm, Cambridge University Press), May 26-28, 1987.

Biography

Johannes Sametinger is assistant professor at the Johannes Kepler University in Linz, Austria. His research interests include software engineering, software documentation, software maintenance, software reuse, object-oriented programming, and programming environments. He was a visiting researcher at Texas A&M University and at Brown University for one year each in 1995 and 1996, respectively. He received a Ph.D. in 1991 in computer science from the Johannes Kepler University. Dr. Sametinger has also worked with Siemens in Germany on the development of compilers and programming environments.