rect rect rect rect rect rect rect
You are viewing an archived version of CBSE 1998. This page has been archived via the Internet Archive Wayback Machine for the ICSA conference series history. Some links on this page might not work.
← return to the ICSA homepage.
General Navigation ../buttons - Home | Search | Contact Us | Site Map | Whats New
engineering graphic
engineering
COTS-Based Systems
Overview
Activity Areas
Products and Services
References
Briefings, Courses, and Workshops
CURE (COTS Usage Risk Evaluation)
EPIC
Publications
COTS_Spot Column
Integration of Software-Intensive Systems
Performance Critical Systems
About SEI|Mgt|Eng|Acq|Collaboration|Prod.& Services|Pubs
Rollover Popup Hints for Topic Navigation ../buttons above
Architectural Components and Object-Oriented Implementations


Guijun Wang
Applied Research and Technology
The Boeing Company
Seattle, WA 98124
guijun.wang@boeing.com

H. Alan MacLean
Applied Research and Technology
The Boeing Company
Seattle, WA 98124
alan.maclean@boeing.com

A position paper presented at the 1998 International Workshop on Component-Based Software Engineering



Abstract

An architectural component has a rich set of elements specifying its boundary, while an object interface definition in an object-oriented implementation has limited capability. These differences give rise to a gap between architectural components and objects in object-oriented implementations. Given the central importance of software architecture in component-based software engineering, bridging this gap becomes a key goal in component software development. In this paper, we describe the gap and its implications for component management. We also outline a framework to bridge the gap. In this framework, inter-component communication is separated from the components and handled by ports and links which deal with infrastructure level middleware and protocols, including CORBA IIOP and Java RMI. We then describe the prototyping of components based on the framework utilizing JavaBeans with extended JavaBeans introspection features to assist in component assembly.



1. Introduction

Component-based systems mean different things to different people. Component definitions vary depending on viewpoints and programming paradigms. As a result, we find that modules, functions, processes, objects, and so on are referred to as components in the research literature [3], [5], [6], [7] and in industry software products. In addition, composition approaches vary accordingly. While conceptually components do not need to be tied to any particular programming paradigm or point of view, the discussion here lies within the object-oriented software development domain.

Component-based software development for complex system depends upon an analysis of software architecture [1], [2], [3], [4], i.e., upon an understanding of system characteristics and functionality in terms of components and their interactions. We refer to components at the architecture level as architectural components. The boundary of an architectural component is composed of elements such as the events it generates or observes, the services it provides or requires, and non-functional properties such as resource requirement and quality of service. On the other hand, in an object-oriented implementation, an object interface definition only contains services provided in terms of object methods. In short, there is a gap between the notions of architectural components and objects in object-oriented implementations.

We believe this gap has significant implications for component management. It also reflects some differences between academic research and industrial efforts with regard to component-based software engineering. By bridging the gap, components at the architectural level can be smoothly mapped to concrete component models such as JavaBeans and ActiveX, and eventually to objects at the infrastructure level based on CORBA, Java, or COM+ technologies. In the remainder of the paper, we first describe this gap and it's implication for component management, then describe a framework for distributed component-based software development that bridges the gap and the roles of component models such as JavaBeans, ActiveX and infrastructure technologies such as CORBA, Java, and COM+.



2. Architectural Components and Object-Oriented Implementations

In our architectural component model, a component consists of a boundary and a group of internal parts. The boundary of a component is defined by these elements: the events it generates, the events it observes, the services it requires, the services it provides, and additional non-functional properties. Clearly, when the boundary of a component consists only of the element "services it provides", the component is a pure service provider. It is also possible to have a pure event generator or a pure event observer.

Based on this conceptual model, several distinguishing features of the gap that highlight the differences between components and objects can be identified: (1) components have separate interface definitions and implementations, while an object may not have a separate interface definition and implementation, (2) a component boundary consists of a richer set of elements than an object interface, (3) component dependencies are explicitly declared while object dependencies are buried in code, and (4) component relations including subtyping, equivalence, and so on are different from relations in objects and their classes. Not only are inheritance, aggregation, and containment relations between components present, but also relations among interfaces, services, events, and implementations must be managed. It is a consequence of this gap that component management is more complex than object management. The diversity of industry component models and different distributed object infrastructures also contribute to this complexity. For example, relations specifically for JavaBeans or ActiveX components, and distributed infrastructure models such as CORBA and COM+ must also be managed. In essence, component management encompasses the coherent management of elements on three major levels: the architecture level, the component level, and the infrastructure level.

In the next section, we describe a framework that is designed to bridge the gap between architectural components and object-oriented implementations.



3. Bridging the Gap: Framework and Composition

Component-based development differs from object-oriented development not so much in the low level details, but rather in the high level design abstractions. Once the boundary of a component is defined, how does an internal part of a component access services from providers outside the component boundary? How should elements in the component boundary be mapped to elements in an object-oriented interface? For distributed systems, which distributed middleware (CORBA ORB, which ORB, Java RMI, MOM ...?) or lower level protocol (TCP, RPC ...?) should be utilized? Answers to these questions clearly depend on a variety of development and deployment considerations. The choice of answers can potentially introduce strong dependencies between components and infrastructure elements, and between components themselves. We have designed and implemented a framework to address these questions, one that uses Ports and Links to bridge the gap between components and objects.

Ports are agents that handle service requests or events coming in and going out of a component. Links are responsible for connecting requester ports and provider ports either locally or remotely. As an implementation, Ports and Links are implemented as Java classes. Class Port is subclassed by ServicePort and EventPort. ServicePort is further subclassed by DiscreteServicePort and SessionServicePort. DiscreteServicePort is responsible for discrete service requests, while SessionServicePort handles a group of services that have partially ordered dependencies. This group of services is often defined by an interface. ServicePort is then subclassed by xxxServiceProvidePort and xxxServiceRequirePort; event port is subclassed by EventGeneratePort and EventObservePort. Further, DiscreteServiceProvidePort is subclassed by DataProducePort and DiscreteServiceRequirePort is subclassed by DataConsumePort, and so on. A port corresponds to an element in the component boundary and belongs to a component.

Class Link is subclassed by EventLink, ServiceLink, and EventServiceLink etc. ServiceLink is subclassed by DataLink, DiscreteServiceLink, and SessionServiceLink, each of which is subclassed by LocalxxxLink, RMIxxxLink, IIOPxxxLink, SocketxxxLink, HTTPxxxLink and so on. There is similar subclassing for other types of links. It is a link's responsibility to take care of the details necessary to connect two ports via either a specific type of middleware or a low level protocol. Hence, links are very middleware and protocol dependent, but they remove dependencies between components and infrastructure elements, as well as among component themselves.

Ports and Links are components in their own right. One consequence of this is that components with ports can be composed, or connected: (component parts<-->port) <--> link <--> (port<-->component parts). Note that if we degrade Ports to attribute variables and place the functionality of Links inside components, then the dependencies between components and distributed infrastructure elements, and among components themselves, would be strong and implicit. On the other hand, if Ports and Links are abstracted to the higher component level, then separation of dependency concerns is achieved. For example, ports and links can be replaced without affecting component core functionality. Common object services such as CORBA Naming, Trader, and Security can be used by smart ports or links to select interaction strategies and partners that meet their selection criteria. The framework thus provides a reasonably general and flexible foundation for component assembly: component core functionality is separated from inter-component communications, component independency is achievable, component composability and flexibility are enhanced, and decisions on communication strategies, protocols, and partners are delayed until assembly-time or run-time.

We have prototyped architectural components based on JavaBeans and implemented IIOP links based on IONA OrbixWeb. A bean component is equipped with ports if it has properties that are subtypes of Port. In order to discover what ports a component is equipped with, we extended the Java PropertyDescriptor class with a PortDescriptor class and extended the Java BeanInfo interface with a SoftBeanInfo interface. The SoftBeanInfo interface extends the BeanInfo interface with one operation "PortDescriptor[] getPortDescriptors()". Bean boundary information is discovered by introspection either on a BeanInfo object if available or on the bean itself. We further enhanced the BeanBox from BDK1.0 [8] so that it can extract PortDescriptor information, if available, from the component boundary and use such information to assist visual component assembly. By means of this extension, bean components can not only be composed using events but also be assembled using ports and links.



4. Conclusions and Future Work

In this paper we described several differences between architectural components and objects in object-oriented implementations, the implications for component management, a framework to bridge the gap, and a prototype implementation based on the framework. The key feature provided by this approach is the smooth transition between architectural, component, and infrastructure level design and development for component-based software engineering.

Future work is focused on architecture level component-based software engineering. In this regard, we are working to integrate architectural description languages and architecture analysis tools in our prototype.



References

[1] D. Luckham, J. Kenney, L. Augustin, J. Vera, D. Bryan, W. Mann, "Specification and Analysis of System Architecture Using Rapide", IEEE Transactions on Software Engineering, Vol. 21, No. 4, 1995, page 336-355
[2] Jeff Magee, Jeff Kramer, "Dynamic Structure in Software Architectures", Software Engineering Notices, Vol. 21, No. 6, November 1996, page 3-14
[3] J. Magee, A. Tseng, and J. Kramer, "Composing Distributed Objects in CORBA", the Third International Symposium on Autonomous Decentralized Systems, April, 1997
[4] R. Monroe, A. Kompanek, R. Melton, D. Garlan, "Architectural Styles, Design Patterns, and Objects", IEEE Software, January 1997, page 43-52
[5] O. Nierstrasz, D. Tsichritzis (eds.), Object-Oriented Software Composition, Prentice Hall, 1995.
[6] Chrysanthos Dellarocas, "Toward a Design Handbook for Integrating Software Components", the Fifth Symposium on Assessment of Software Tools and Technologies, Pittsburgh, PA, June 1997.
[7] G. Wang, D. Klawitter, S. Smith, "Component-Based Software Development: an Architectural View", COOTS'97 Workshop on Software Component, Portland, Oregon, June 1997
[8] JavaSoft, BDK1.0, November 1997, http://splash.javasoft.com/beans/beanbox.html


Biography

Guijun Wang is a research associate in the Applied Research and Technology organization at The Boeing Company. His current research interests are in distributed software technology and visual programming languages. He has a Ph.D degree in Computer Science from the University of Kansas.

H. Alan MacLean is manager of the Distributed Software Technology Program in the Applied Research and Technology organization at The Boeing Company. His research interests are in distributed computing. He has a Ph.D. degree in Mathematics from Kansas State University.






[papers] [presentations] [program] [next] [prev]
contact the author contact the organizers [report errors]


The Software Engineering Institute (SEI) is a federally funded research and development center sponsored by the U.S. Department of Defense and operated by Carnegie Mellon University.

Copyright 2004 by Carnegie Mellon University
Terms of Use
URL: http://www.sei.cmu.edu/papers/p9.html
Last Modified: 11 August 2004