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
RedefinableElement
elementImport :
ElementImport (0 *); -- source
Namespace
importedMember :
PackageableElement (0 *); -- source
Namespace
member :
NamedElement (0 *); -- source
Namespace
ownedMember :
NamedElement (0 *); -- source
Namespace
ownedRule :
Constraint (0 *); -- source
Namespace
packageImport :
PackageImport (0 *); -- source
Namespace
clientDependency :
Dependency (0 *); -- source
NamedElement
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
xmi-interop@omg.org.