ARCS is using the concepts component oriented programming. The main idea is to develop components (pieces of reusable software), group them into component libraries and glue them at runtime using a specific engine. Since ARCS is also a framework, it means it introduces component and application models and gives tools to implement and use them.
A software component is a piece of software that can be composed with other software components in order to produce an application. Usually software components have the ability to describe themselves and to be modified (through their properties for instance) at runtime (this is also called reflection). In ARCS, since it is using Qt intensively, the component model is inspired by Qt's meta-object system as well as the signal/slot communication paradigm.
To make it simple, component's inputs are called slots and component's outputs are called signals. Two components then are able to communicate when any signal of the first one is connected to any slot of the second one. The communication model is synchronous. It means that once a signal is triggered, the associated slots process it immediately.
In ARCS, every component is able to describe itself, that is to say to export the list of signals and slots it manages. It goes further than Qt because it can accept Qt's objects as components (native components) and also exogenous components (that is to say components we will make behave as if they were ARCS ones). Such model is described in the ARCSAbstractComponent class (which is actually a component factory). It exposes for each component recognized by ARCS the following functions:
An application, under ARCS, is divided into two parts:
The contextual part will contain all that is required by the application. It includes:
The configurational part describes how the application is structured and how component will be initialized and connected to each other. This is where the actual model application resides. To make it brief:
The engine loads the application description, then the component libraries at runtime. It instanciates components and constants if needed. Then, for each process, it will setup the first sheets. The sequence to start a sheet is the following:
The postconnection invocations performed on components may trigger signals that will trigger other component slots through connections. It may eventually trigger a signal that sends a token to the controller. It then triggers a change of state. In that case, the actual sheet must be replaced by another one. The sequence to stop a sheet is the following: