classify a large number of component models. Such
classification framework proposes three main charac-
teristics for studying component models, namely Life-
cycle, Construction and Extra-Functional Properties.
Table 1 classifies the elements that comprise C-Forge
according to the aforementioned taxonomy.
C-Forge shares many similarities with approaches
like ProCom (Vulgarakis, 2009), CHESS (Cicchetti,
2012), and RT-CCM (Lopez, 2013), since they are
all component-based approaches supported by model-
driven technologies, and they all provide certain de-
gree of control over concurrency and real-time prop-
erties. The main differences with the aforementioned
approaches are:
ProCom defines two component layers: the upper
and the lower layer. The former allows devel-
opers to define large-grained active components,
while the latter consists of basic functional pas-
sive components, which are interconnected inside
subsystem. In C-Forge, all components are active,
but this does not mean that they require their own
thread.
CHESS considers four views: Requirements, Com-
ponents, Deployment, and Analysis. Compo-
nent behavior can be defined with state-machines,
other standard UML diagrams, as well as with the
Action Language for Foundational UML (ALF,
http://www.omg.org/spec/ALF/). The Deploy-
ment view models the target execution platform,
and software to hardware components allocations.
CHESS provides generators to Ada/C/C
++
/Java
source code. C-Forge focus on a single way to
model component behavior and manage concur-
rency, which makes it easier to generate and com-
pose C
++
code only.
RT-CCM considers components as black-boxes,
where the user models the concurrency needs
(mainly threads and shared resources), so that
the component implementation can provide them.
The resulting models can be analyzed with
the MAST (http://mast.unican.es) analysis tool.
Compared to them, C-Forge considers that com-
ponents are white-boxes.
3 MODELING AND EXECUTING
COMPONENT-BASED
APPLICATIONS IN C-FORGE
As shown in Fig. 1, the development process pro-
posed by C-Forge is the following. The first step com-
prises the definition of the application datatypes, mes-
sages and activities by using WCOMM’s textual edi-
tor. Afterwards, the user can select to either generate
the code skeletons for the activities or continue mod-
eling the application (i.e. defining simple compo-
nents, modeling the application architecture and gen-
erating the deployment model). Once both parallel
steps have been completed, the user can execute the
application by passing the WCOMM and deployment
models to the FraCC model loader. This process is it-
erative, in the sense that the user can add, modify and
test components as needed. The following subsec-
tions describe the main highlights of WCOMM and
FraCC.
3.1 Modeling Component-based
Applications with WCOMM
An excerpt of the most important classes of the
WCOMM metamodel is shown in Fig. 2. WCOMM
comprises three complementary and loosely coupled
sets of meta-classes that group together the ele-
ments related to modeling (i) the common applica-
tion elements, namely data-types, messages and activ-
ities, (ii) simple components and their behavior, and
(iii) complex components. As can be seen in the fig-
ure, there are several meta-classes devoted to model
“definitions” (blue meta-classes, like ComponentDef-
inition, PortDefinition, ActivityDefinition, etc.) and
their “instances” (orange meta-classes, like Compo-
nent, Port, Activity, etc.) in order to foster model
reuse. WCOMM defines simple and complex com-
ponent definitions. Simple components are the basic
building units, while complex components are built
by assembling component instances, either from sim-
ple or complex components.
A simple component is an entity that encapsulates
its internal state and that comprises both structural
and behavioral parts. The structural part is defined by
the component ports and the message instances flow-
ing through them. Messages can carry data, and are
sent between components following the asynchronous
no-reply communication scheme, which makes possi-
ble to support any communication scheme and assures
a low coupling between components. Component re-
active behavior is defined by means of a finite-state
machine (FSM), similar to those defined in UML 2.
FSMs only model the circumstances under which
the component’s activities are executed. Thus, the
complexity of the application is mainly embedded in
the C
++
code executed by an activity. FSMs also de-
fine hierarchical and orthogonal regions, which allow
users to model independent parts of the whole com-
ponent behavior. FraCC then uses this potential con-
currency modeling to organize the threading code and
Modeling and Executing Component-based Applications in C-Forge
105