Component-Based Software Engineering – CBSE




COA: Component-Oriented Analysis

COD: Component-Oriented Design

COP: Component-Oriented Programming

COM: Component-Oriented Management

CBSE promises to accelerate software development and to reduce costs by assembling systems from prefabricated software components. CBSE covers many software engineering disciplines and different techniques, which still have not been fully defined, explained, and exploited either from theoretical or practical points of view.

In traditional software engineering, software development process consists of a sequence of activities or stages, namely, analysis, design, programming, testing, and integration. In CBSE, the main development stages become analysis, design, provision,
and assembling. That is to say, the traditional programming, testing, and integration activities are replaced in CBSE by component provision and component assembling.

Andy Ju An Wang, Kai Qian Component Oriented Programming

Software Component Based


Now we have a notion about Componets, because I supposed  you read the first post about Components.

Software Component Based is an established are of software engineering.

The Software Component Based doesn’t represent in fact a significant change in how the softwares has been built. In rather than this technology  is a attempt to produce new softwares in a good time, with reusability, scalability, all the key words said in the First Post.

Unfortunately, the the lack of agreement among researchers and Universities, technology producers and consumers about what is a component and how the components can be utilized for develop and implements new systems,turns it difficult the advances of this technology.

For example, about the definition of Software Component, We have a lot of definitions:

A software component is a software building block that conforms to a component model. A Component Model defines standards for (i) properties that individual components must satisfy and (ii) methods, and possibly mechanisms, for composing components.

For F. Bachman et. al. the real component definition is:

  • an opaque implementation of functionality
  • subject to third-party composition
  • conformant with a component model

Discussion about component definitions can also be found in many recent conferences and publications [Koza 1999; Parrish 1999; Wang 2000; Yacoub 1999; Fischer2002; Fukazawa 2002]. In the book Component-Oriented Programming(Andy Ju an Wang) we can see:

A software component is a piece of self-contained, self-deployable computer code
with well-defined functionality and can be assembled with other components through
its interface.

These generic definitions allows the existence of a wide spectrum of components models, which is also happening in reality.However, it makes it more difficult to properly understand the Component-Based(CB) principles. In particular, we can see that the real principles are not clearly explained and formally defined.

Finally, Component-based development has not succeeded in providing standard principles, as for example object-oriented development. The component definition is more general – actually a component is specified through the specification of the component model. The component model itself is not specified.

Further Informations:

Volume II: Technical Concepts of Component-Based Software Engineering

C. Szyperski Components vs. Objects vs. Component Objects


What are Components?


When I hear the Component word, the other first word in my mind is Electronic. Why?

The Printed Circuit Board can be treated the as same as a software component. For example: A Capacitor was made for a X factory, a Transistor was made for a Y factory, theses capacitors and transistors have different purposes on the board, but for the Board it’s not necessary to know how each component was made, for the Board, it’s only necessary the function the component  achieve.

If some component presents some error, this component can be changed, providing a good maintainability. If you have to do other project using a similar Printed Circuit Board, you can use the same Capacitor or the same Transistor mentioned above. So, this way components provides a good reusability. If you need a better Capacitor than yours, you can change its configurations, increasing for example its capacitance. Therefore, Components provides a good adaptability and scalability.

Now you can imagine if anyone has made a capacitor, and when you want to do your printed circuit board, you must to do your own capacitor. How many time do you will spend?

When you have done your own component, you may utilize it others times, providing a good development time. With this reutilization some benefits come, how this component was utilized a lot of times, probably it was corrected and improved a lot of times too, becoming a stable component, robust and optimized.

Finally, we have some key words about Components:

  • Maintainability;
  • Reusability;
  • Adaptability;
  • Scalabity
  • (…)

The key words about Components has no only these, there are a lot others, I’ll try talk about it in next posts.

Component Oriented Programming – Get Started


Component-Oriented Programming enables programs to be constructed from prebuilt software components, which are reusable, self-contained blocks of computer code.These components have to follow certain predefined standards including interface, connections, versioning and deployment.

Components come in all shapes and sizes, ranging from small application components that can be trated online through components brokerages to the so-called large grain components that contain extensive functionality and include a company’s business logic. In principle, every component is reusable independent of context, that is to say, it should be ready to use whatever from wherever.

COP is to develop software by assembling components. While OOP emphasizes classes and objects, COP emphasizes interfaces and composition. In this sense, we could say that COP is an interface-based programming. Clients in COP do not need any knowledge of how a component implements its interface. As long as interfaces remain unchanged, clients are not affected by changes in interface implementions.

Andy Ju An Wang – Component- Oriented Programming