Specifies a basic type system for components and component interfaces.
According to this type system, a component type is just a collection of
component interface types, which describes the interfaces that components of
this type must or may have at runtime. A component type describes explicitely
the external interfaces of a component and, implicitely, its internal
interfaces. Indeed, if the type of a component c is of the following
form:
may provide several server interfaces s2XYZ of type I2 (but
no server interface of name s2 exactly),
must provide a server interface s3-controller of type
I3,
...,
must have a client interface c1 of type J1,
may have several client interfaces c2XYZ of type J2 (but
no client interface of name c2 exactly),
...
Futhermore, if this component provides access to its content, then it:
must have an internal client interface s1 of type I1,
may have several internal client interfaces s2XYZ of type
I2 (but no internal client interface of name s2
exactly),
...,
must provide an internal server interface c1 of type
J1,
may provide several internal server interfaces c2XYZ of type
J2 (but no internal server interface of name c2
exactly),
...
Moreover, each internal interface must have a corresponding external interface
of the same name (but the converse is not necessarily true). The figure below
illustrates these definitions.