Software Disclaimer

Class UML 2.4.1::Transition


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, Namespace

Direct Subclasses: ProtocolTransition

Class Precedence List: Transition, RedefinableElement, Namespace, NamedElement, Element


container : Region (1 1); -- source Transition
effect : Behavior (0 1); -- source Transition
guard : Constraint (0 1); -- source Transition
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

A name which allows the NamedElement to be identified within a hierarchy of nested Namespaces. It is constructed from the names of the containing namespaces starting at the root of the hierarchy and ending with the name of the NamedElement itself.
{readonly, derived}

visibility : VisibilityKind (0 1); -- source NamedElement
ownedComment : Comment (0 *); -- source Element
ownedElement : Element (0 *); -- source Element
owner : Element (0 1); -- source Element


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 = implies ((self.trigger->isEmpty) or ( = '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())


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