Origin

The development of large scale, complex, distributed software systems puts ever more strain on the ability of companies to control development and maintenance costs. For that reason architectures that promote separation of concerns, loose coupling and reuse have been designed.

The OMG CORBA Component Model (CCM) is a component based architecture intended to improve the possibilities for development of complex distributed systems as described above. The full specification however proved too heavyweight for most common use and therefor a slimmed down specification was created appropriately named Lightweight CCM (LwCCM). This version trims down on little used features as navigation, introspection and such, but retains the essential properties allowing proper implementation of component based systems.

AXCIOMA is an optimized implementation of the LwCCM specification maximizing separation of concerns and reducing dependency on the traditional CORBA middleware technology underlying the original CCM specification. The Generic Interaction Support (GIS) introduced for LwCCM with the DDS4CCM (DDS for Lightweight CCM) specification is consistently applied in AXCIOMA resulting in a common connector model for interaction pattern implementations thereby completely decoupling business functionality from middleware/transport logic. By further reducing remote interface support requirements for components AXCIOMA greatly reduces dependencies on the CORBA middleware. In AXCIOMA components are by default purely local objects.

In addition AXCIOMA is based on the modern IDL to C++11 language mapping. This language mapping provides a far simpler and less error inducing programming API as the older language mapping for C++.

Component Based Architecture (CBA)

It is not the strongest of the species that survive, nor the most intelligent, but the ones most responsive to change.
— Charles Darwin

Component based architectures emphasize separation of concerns to achieve maximized decoupling. Its approach is to define, implement and/or compose loosely coupled independent (software) components that interact using clearly defined interfaces and arrange these to construct a complete system.

Each component implements some semantically related business logic organized in a separated entity. Interaction with other components is achieved using strictly defined interfaces and datatypes. The interfaces one component needs to transfer information to another component are called provided interfaces for the component on the responding (receiving) end of the communication and used interfaces for the component that drives the communication flow (sends information, executes function calls).
As the interfaces are the only way to interact with the business logic implemented in the components this effectively shields the actual implementation details from all other parts of the system. The components are said to encapsulate functionality.

Components
Figure 1. A component diagram

The encapsulation and strict interfaces are key to another important property of components which is substitutability. As components only rely on certain key aspects of the defined behavior of other components and interact over strictly defined interfaces without dependencies on actual implementation details it becomes completely feasible and even easy to replace components. As long as a component replacing another component conforms to the expected ('designed') behavior and uses or provides the same interfaces as the component being replaced the combined system should keep functioning without a problem.

For example in the system depicted by figure 1 any implementation of the Thermostat component could be combined with an implementation of the other two components to deliver a correctly functioning system as long as the Thermostat implementation provided the specified Monitor interface for the Thermometer component to use and used the Control interface provided by the Heater interface. In addition the implementation would have to comply with the expected behavior for the component which would most likely involve controlling the heater to raise or lower the temperature according to the ambient temperature reported by the thermometer.

In general it can be said that any component can be replaced by another component providing similar functionality through identical interfaces. Alternatively, any component can be rearranged to interact with different components providing and/or using identical interfaces. Loose coupling and strict interfaces used to define the interaction patterns between the components allow for maximum reusability and adaptability.

Since the definition of a component relies on the interfaces defined to interact with it combined with it’s expected ('designed') behavior rather than it’s implementation, another key feature of CBA is provided through the flexibility with which combinations of components can be composed, named assemblies.
By selectively mixing and matching components it is possible to create a reusable collection that itself can be viewed as a component. Such a collection is called an assembly.

Components
Figure 2. A component diagram showing an assembly

Figure 2 shows a component diagram with a component assembly composed of the Thermostat and Thermometer components from the previous figure. These are combined in what can be logically viewed as a ClimateControler component providing an interface Settings and using an interface Control. From the viewpoint of this component assembly the Monitor interface has now become an implementation detail.
Multiple compositions of ClimateController assemblies could be made available based on different implementations of the constituent components Thermostat and/or Thermometer.
Like a singular component, as long as an assembly conforms to the expected behavior and interacts through the same interfaces one implementation (composition) will be interchangeable with another.

Components
Figure 3. A component diagram showing an enhanced ClimateController

As figure 3 shows it would even be possible to redesign/extend and add some parts and create a more enhanced version of the ClimateController assembly that still remains interchangeable with simpler versions of the component assembly.

Encapsulation, strictly defined interfaces, substitutability and assemblies make CBA an ideal solution to implement software systems that are highly resilient to change.