====== Kmelia Glossary ======
(//Glossary of the Kmelia Model//)
===== Overview =====
[[metamodel]]
===== Component =====
* (component) interface : a set of provided service names, a set of required service names
* types : a set of (user) type definitions
* (component) state
can be divided into observable/non observable parts
* constants : a set of triple (name, type, value)
* variables : a set of couple (name, type)
* invariant : a set of named Kml predicates
* initialisation : a set of Kml assignments
* properties : a set of named Kml predicates
===== Service =====
==== Basics ====
* qualifier e.g. required, provided, protocol : an annotation that classify the service. A service has to be either required or provided. A provided service can be qualified as a protocol.
some service features varies according to this qualifier
* interface (//service dependency//)
* subprovides : a set of provided service names (assumed to be subservices)
* intrequires : a set of provided service names (assumed to be provided services of the same component)
* calrequires : a set of required service names (assumed to be provided services or subservices of the CALLER component)
* extrequires : a set of required service names (assumed to be in the required part of the component interface)
* I/O messages (__New optional feature__) : set of message definitions used in the service\\
by default msg(ANY)
* Virtual context : only present for a required service
* variables : a set of couple (name, type)
* invariant : a set of names Kml predicates
* assertions
* precondition : a Kml predicate
* postcondition : a Kml predicate
* eLTS
* state : a step in the service process (a name)
* init = 1 state
* final = set of states
* transition : a triple ''(source-state, label, target-state)'' the label can be an action or a block of actions.
==== Action ====
* elementary action : a Kml expression or assignment
* communication action : a message action or a service action ''channelExpr(comOperator)name(param)''
* message action
* send a message (''comOperator = ?'')
* receive a message (''comOperator = !'')
* service action (from the caller point of view)
* service call (''comOperator = !!'')
* service return (''comOperator = ??'')
* service action (from the callee point of view)
* service call (implicitely being in the initial state)
* service return (''comOperator = !!'')
service actions are **horizontal service structuring mechanisms**
==== Channel expression ====
The general syntax is
channelExpr:[](!|?|!!|??)comName(param*)
* channel
* caller communication channelExpr = __CALLER
* internal communication channelExpr = __SELF
* external communication channelExpr = _reqServName
* role (only for shared services) : subset of the callers (see multipart communications)
* selector (only for shared services) : index in the subset of the callers and maybe roles (see multipart communications)
==== Annotation ====
annotations are **vertical service structuring mechanisms**
* state annotation / optional behavior : a (sub)provided service is callable in the state
st <>
* transition annotation / mandatory behavior : a (sub)provided service is called during the transition
label = [[serv_name]]
in each case ''serv_name'' belongs to the service ''subprovides'' interface of the depending service
==== Subservice ====
a **subservice** (of a service) is a provided service that belongs to the ''subprovides'' interface of another provided service.
==== Extension ====
* protocol : a special kind of provided services of a component whose eLTS includes simple expressions and subservices,
* shared service (see N-part assemblies),
* virtual context,
* query provided service : no side effect
===== Assembly =====
==== Basics ====
An assembly is a set of component instances definition together with assembly links.
* component instance declaration name : ComponentType
* component instance collection declaration name[Integer] : ComponentType
* assembly links : a couple a service names (a,b) where one is provided and the other is required, syntactically
direction C1.s1 C2.s2
where direction is ''p-r'' or ''r-p'', C1 and C2 are component instance denominations and s1 and s2 are service names.
* a sublink is a link in the context of another link. It is related to service interface.
* context mapping (recent) : a (relational) mapping of the variables of the virtual context of a required service to the component context of a provided service\\
the context mapping is associated to a link.
* message mapping (not accepted yet) : a (relational) mapping of the messages of the required service (or its calling context) to the messages of a provided service\\
the context mapping is associated to a link.
==== Assembly (Type) ====
An assembly type is just the generalisation into a reusable structure.
ASSEMBLY typename
componentOrAssembly declarations
links declaration
Hence an assembly can be defined from component instances or assembly instances.
==== Assembly (matching) ====
* link : services
* sublinks : (sub) services
* context mapping : from virtual context to concrete context (component ibservable) state)
* message mapping : names and parameter (?)
Pour chacun
* service name mapping : implicite
* service param mapping : adaptation
* context mapping : var_virt = expr_var_conc
* message name mapping : explicite
* message param mapping : adaptation
a voir plus tard : le partage de sous-liens
Assemblage
ASSEMBLY Stock
Components
sm : StockManager;
ve : Vendor
Assemblies
a1 : A1;
...
Links
l1: p-r sm.newReference, ve.addItem
context mapping
ve.catalogEmpty = ...
...
message mapping
n1 = n2
...
sublinks : {sl1, sl2, ...}
===== Composition =====
A composition is the encapsulation into a (composite) component of a set of assembly instances definition together with promotion links and promoted (sub)component observable variables.
* assembly instance declaration : ass_name : AssemblyType
* subcomponent : a component of an assembly instance
* composite component : a component that results from the composition (''SELF'')
* promotion links (service promotion) :
a couple a service names (a,b) where both are either provided or required, syntactically
direction C1.s1 C2.s2
where direction is ''p-p'' or ''r-r'',
C1 and C2 are component instance denominations (either ''SELF'' or a subcomponent name) and s1 and s2 are service names.
* observable variable promotion :
a variable vi of a subcomponent Ci become visible in the composite level.
v : T FROM Ci.vi
where the type of vi is compatible with T.
Composition
COMPONENT
...
COMPOSITION
Assembly
same as assembly
End
Promotion
Links
l1: p-r sm.newReference, ve.addItem
context mapping
ve.catalogEmpty = ...
...
message mapping
n1 = n2
...
sublinks : {sl1, sl2, ...}
Variables
ve.catalogEmpty = ...
...
END_COMPOSITION
===== Datatypes and Predicates =====
* types
* operators
* functions
* predicates
* expressions
see details [[kmelia:types:start|here]]
===== N-part assembly =====
* shared service (more than one caller)
* multipart communications (see Channel expression above) and broadcast
* shared links
* component instance collections
===== Aspects =====
* ComponentAspect
* Adaptors
* Weaving