Class UML 2.3::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: Namespace,
RedefinableElementDirect Subclasses: ProtocolTransitionClass Precedence List: Transition,
Namespace,
RedefinableElement,
NamedElement,
ElementProperties:
container :
Region (1 1); -- source
Transition Designates the region that owns this transition.
Subsets: NamedElement.namespace
Opposite: Region.transition
effect :
Behavior (0 1); -- source
Transition guard :
Constraint (0 1); -- source
Transition A 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 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 isLeaf : Boolean (1 1); -- source
RedefinableElement redefinedElement :
RedefinableElement (0 *); -- source
RedefinableElement 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 Determines where the NamedElement appears within different Namespaces within
the overall model, and its accessibility.
ownedComment :
Comment (0 *); -- source
Element The Comments owned by this element.
{
composite}
Subsets: Element.ownedElement
ownedElement :
Element (0 *); -- source
Element The Elements owned by this element.
{
composite,
readonly}
Derived union with sources: (ownedComment, nameExpression, packageImport, ownedRule, ownedMember, elementImport, trigger, effect)
Opposite: Element.owner
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: 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].