Estelle is an extension of ISO standard Pascal. The extensions
are mainly concerned with expressing Finite State
Machines and their associated States, Transitions and Events.
Modules may be paramaterised. Process type modules are
dynamic, and are initialized (created/instatiated) or destroyed
as a system runs.
A module may have a separate Body and Header, so
that we can define a consistent service supported by a module
without going into detail of how the service is provided. (E.g.
a train or a plane will get you to Edinburgh, but work in a
totally different way. They might be parameterised by cost -
e.g. the plane is usually cheaper, but not during the festival,
and certainly have internal interactions that are different
e.g. with the railway tracks provider or runway providers).
State identifiers are chosen by the user, according to some
understanding of a particular system. They form an enumerated
set of constants, and each is associated with some module or
Transitions are specified between states, and have
associated transition blocks which contain almost
standard Pascal definitions of the Actions to be
performed on a transition.
A specification is made up from Modules, which
interact via Channels and Interaction Points.
A Module is essentially either a process (which may be a system
(top level) process), or else an activity. The intention behind
this is to enable the specification of active chunks of a
system, and passive (i.e. event handling) pieces of a system.
In implementation, this might be
reflected in the difference between modules that are scheduled and run continuously
til they explictly complete, and modules that are fired up on a one off basis.
A module definition contains a list of interaction points that
events will occur on. These are essentially a list of the
Channels that the module will accept events on, or will
generate events on.
A channel is essentially a queue which a process or activity
can generate events on. The channel definition says what the
relationship of any modules using the channel should be (i.e.
which module will generate what events on a channel, and which
will accept events on a channel).
The association of modules via channels, with interaction at
the end points is controlled by connecting and
disconnecting the modules to and from a channel.