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 effect :
Behavior (0 1); -- source
Transition guard :
Constraint (0 1); -- source
Transition kind :
TransitionKind (1 1); -- source
Transition Indicates the precise type of the transition.
Default value: EXTERNAL
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 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: 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].