Class UML 2.4.1::Transition
Description:
A transition is a directed relationship between a source vertex and a target
vertex. It may be part of a compound transition, which takes the state
machine from one state configuration to another, representing the complete
response of the state machine to an occurrence of an event of a particular
type.
Direct Superclasses: RedefinableElement,
NamespaceDirect Subclasses: ProtocolTransitionClass Precedence List: Transition,
RedefinableElement,
Namespace,
NamedElement,
ElementProperties:
container :
Region (1 1); -- source
Transition effect :
Behavior (0 1); -- source
Transition guard :
Constraint (0 1); -- source
TransitionA guard is a constraint that provides a fine-grained control over the firing
of the transition. The guard is evaluated when an event occurrence is dispatched
by the state machine. If the guard is true at that time, the transition
may be enabled, otherwise, it is disabled. Guards should be pure expressions
without side effects. Guard expressions with side effects are ill formed.
{
composite}
Subsets: Namespace.ownedRule
kind :
TransitionKind (1 1); -- source
Transition redefinedTransition :
Transition (0 1); -- source
Transition redefinitionContext :
Classifier (1 1); -- source
Transition source :
Vertex (1 1); -- source
Transition target :
Vertex (1 1); -- source
Transition trigger :
Trigger (0 *); -- source
Transition isLeaf : Boolean (1 1); -- source
RedefinableElement redefinedElement :
RedefinableElement (0 *); -- source
RedefinableElementThe redefinable element that is being redefined by this element.
{
readonly}
Derived union with sources: (redefinedTransition)
elementImport :
ElementImport (0 *); -- source
Namespace importedMember :
PackageableElement (0 *); -- source
NamespaceReferences the PackageableElements that are members of this Namespace as
a result of either PackageImports or ElementImports.
{
readonly,
derived}
Subsets: Namespace.member
member :
NamedElement (0 *); -- source
Namespace ownedMember :
NamedElement (0 *); -- source
Namespace ownedRule :
Constraint (0 *); -- source
Namespace packageImport :
PackageImport (0 *); -- source
Namespace clientDependency :
Dependency (0 *); -- source
NamedElementIndicates the dependencies that reference the client.
Opposite: Dependency.client
name : String (0 1); -- source
NamedElement nameExpression :
StringExpression (0 1); -- source
NamedElement namespace :
Namespace (0 1); -- source
NamedElement qualifiedName : String (0 1); -- source
NamedElement visibility :
VisibilityKind (0 1); -- source
NamedElement ownedComment :
Comment (0 *); -- source
Element ownedElement :
Element (0 *); -- source
Element owner :
Element (0 1); -- source
ElementConstraints:
Signature: state_is_local() : Boolean;
Description: A transition with kind local must have a composite state or an entry point
as its source.
Expression: (kind = TransitionKind::local) implies ((source.oclIsKindOf (State) and source.oclAsType(State).isComposite) or (source.oclIsKindOf (Pseudostate) and source.oclAsType(Pseudostate).kind = PseudostateKind::entryPoint))
Signature: state_is_internal() : Boolean;
Description: A transition with kind internal must have a state as its source, and its
source and target must be equal.
Expression: (kind = TransitionKind::internal) implies (source.oclIsKindOf (State) and source = target)
Signature: state_is_external() : Boolean;
Description: A transition with kind external can source any vertex except entry points.
Expression: (kind = TransitionKind::external) implies not (source.oclIsKindOf(Pseudostate) and source.oclAsType(Pseudostate).kind = PseudostateKind::entryPoint)
Signature: signatures_compatible() : Boolean;
Description: In case of more than one trigger, the signatures of these must be compatible
in case the parameters of the signal are assigned to local variables/attributes.
Expression: true
Signature: outgoing_pseudostates() : Boolean;
Description: Transitions outgoing pseudostates may not have a trigger.
The OCL used here is not normative.Editor's notes: Removed extra close paren.
Expression: source.oclIsKindOf(Pseudostate) and (source.kind <> #initial) implies trigger->isEmpty()
Original: source.oclIsKindOf(Pseudostate) and (source.kind <> #initial)) implies trigger->isEmpty()
Signature: join_segment_state() : Boolean;
Description: A join segment must always originate from a state.
Expression: (target.oclIsKindOf(Pseudostate) and target.kind = #join) implies (source.oclIsKindOf(State))
Signature: join_segment_guards() : Boolean;
Description: A join segment must not have guards or triggers.
Expression: (target.oclIsKindOf(Pseudostate) and target.kind = #join) implies (guard->isEmpty() and trigger->isEmpty())
Signature: initial_transition() : Boolean;
Description: An initial transition at the topmost level (region of a statemachine) either
has no trigger or it has a trigger with the stereotype >.
The OCL used here is not normative.Editor's notes: added () to isEmpty, but no stateMachine, no .top
Expression: true
Original: self.source.oclIsKindOf(Pseudostate) implies (self.source.oclAsType(Pseudostate).kind = #initial) implies (self.source.container = self.stateMachine.top) implies ((self.trigger->isEmpty) or (self.trigger.stereotype.name = 'create'))
Signature: fork_segment_state() : Boolean;
Description: A fork segment must always target a state.
Expression: (source.oclIsKindOf(Pseudostate) and source.kind = #fork) implies (target.oclIsKindOf(State))
Signature: fork_segment_guards() : Boolean;
Description: A fork segment must not have guards or triggers.
Expression: (source.oclIsKindOf(Pseudostate) and source.kind = #fork) implies (guard->isEmpty() and trigger->isEmpty())
Operations:
Signature: redefinitionContext.1() : Classifier;
Description: The redefinition context of a transition is the nearest containing statemachine.
Expression: result = let sm = containingStateMachine() in if sm.context->isEmpty() or sm.general->notEmpty() then sm else sm.context endif
Signature: isConsistentWith(redefinee : RedefinableElement; ) : Boolean;
Description: The query isConsistentWith() specifies that a redefining transition is
consistent with a redefined transition provided that the redefining transition
has the following relation to the redefined transition: A redefining transition
redefines all properties of the corresponding redefined transition, except
the source state and the trigger.
The OCL used here is not normative.Editor's notes: Various problems with parentheses, trans not tran
Expression: result = (redefinee.oclIsKindOf(Transition) and
let trans: Transition = redefinee.oclAsType(Transition) in
(source = trans.source) and (trigger = trans.trigger))
Original: redefinee.isRedefinitionContextValid(self)
result = (redefinee.oclIsKindOf(Transition) and let trans: Transition = redefinee.oclAsType(Transition) in (source() = trans.source() and trigger() = tran.trigger())
Signature: containingStateMachine() : StateMachine;
Description: The query containingStateMachine() returns the state machine that contains
the transition either directly or transitively.
Expression: result = container.containingStateMachine()
Send questions or comments to
[email protected].