Developing Software Components

In a component-based development process we distinguish development of components from development of systems. When developing component-based systems we focus on identification of reusable entities and selection of components that fulfils systemís requirements. When developing components our focus is on reusability. Components are developed as reusable entities to be used in many products. For this reason they must be general enough but also sufficiently specific to be easily identified, understood and used. Components communicate with their environment only through the interface, so it is the interface which provides all the information needed and it is only the interface that provides this information. For this reason it is natural that component-development is interface-focused. One of the main challenges of component development is to design an appropriate interface. Two chapters in this part address this challenge. One chapter discuss the component-based development process.

In chapter 5 Component-Based Development Process, Lars Jakobsson, Benneth Chrisiansson and Ivica Crnkovic discuss component-based system lifecycle. The development process is separated in two processes: in component development and system development; components can be developed independently of systems. The processes have however many interaction points. Components requirements are related to system requirements and an absence of their influence on each other may cause sever problems in designing both systems and components. The maintenance phases are strongly related. One-way of minimizing of the problems related to incompatibilities between these processes is to follow standards. However, the standards in component-based development are not well defined as the processes and technologies are still instable.

In chapter 6 Semantic Integrity in Component-based Development, Eivind J. Nordby and Martin Blom show that syntactic descriptions alone cannot assure semantic integrity of a component. Two dimensions of CBSE are presented where semantics play an important role. One dimension encompasses five levels of formalism in describing component semantics. The other dimension covers three phases in the life of a component, where each phase requires certain semantic considerations. Based on these two dimensions, taxonomy for component semantics is discussed. For safety, mission or business critical applications, formal semantics may be necessary, but are hardly motivated for the non-critical domains.

In chapter 7 Role-Based Component Engineering, Jilles van Gurp and Jan Bosch present how interfaces can be divided into smaller parts modeling roles. Role-based component engineering extends the traditional object orientation component paradigm and it provides a more natural support for modeling component collaborations. The idea of role-based components is to split the public interface into smaller interfaces which represent different roles. Users of a component can communicate with the component through the smaller role interfaces instead of using the full interface. The use of roles makes it possible to have multiple views of one class. These role perspectives are more cohesive than the total class-interface. The chapter discusses the usefulness of role-based approach, and the development methods for of role-based components.