Software Disclaimer

Class UML 2.4.1::Pseudostate

Description:

A pseudostate is an abstraction that encompasses different types of transient vertices in the state machine graph.

Direct Superclasses: Vertex

Direct Subclasses:

Class Precedence List: Pseudostate, Vertex, NamedElement, Element

Properties:

kind : PseudostateKind (1 1); -- source Pseudostate
state : State (0 1); -- source Pseudostate
stateMachine : StateMachine (0 1); -- source Pseudostate
container : Region (0 1); -- source Vertex
incoming : Transition (0 *); -- source Vertex

Specifies the transitions entering this vertex.
{readonly, derived}
Opposite: Transition.target

outgoing : Transition (0 *); -- source Vertex
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 Element

Constraints:

Signature: transitions_outgoing() : Boolean;
Description: All transitions outgoing a fork vertex must target states in different regions of an orthogonal state.
Expression: (self.kind = #fork) implies self.outgoing->forAll (t1, t2 | t1<>t2 implies (self.stateMachine.LCA(t1.target, t2.target).container.isOrthogonal))

Signature: transitions_incoming() : Boolean;
Description: All transitions incoming a join vertex must originate in different regions of an orthogonal state.
Expression: (self.kind = #join) implies self.incoming->forAll (t1, t2 | t1<>t2 implies (self.stateMachine.LCA(t1.source, t2.source).container.isOrthogonal))

Signature: outgoing_from_initial() : Boolean;
Description: The outgoing transition from and initial vertex may have a behavior, but not a trigger or a guard.
Expression: (self.kind = #initial) implies (self.outgoing.guard->isEmpty() and self.outgoing.trigger->isEmpty())

Signature: junction_vertex() : Boolean;
Description: In a complete statemachine, a junction vertex must have at least one incoming and one outgoing transition.
The OCL used here is not normative.
Editor's notes: size() not size.
Expression: (self.kind = #junction) implies ((self.incoming->size() >= 1) and (self.outgoing->size() >= 1))
Original: (self.kind = #junction) implies ((self.incoming->size >= 1) and (self.outgoing->size >= 1))

Signature: join_vertex() : Boolean;
Description: In a complete statemachine, a join vertex must have at least two incoming transitions and exactly one outgoing transition.
The OCL used here is not normative.
Editor's notes: size() not size.
Expression: (self.kind = #join) implies ((self.outgoing->size() = 1) and (self.incoming->size() >= 2))
Original: (self.kind = #join) implies ((self.outgoing->size = 1) and (self.incoming->size >= 2))

Signature: initial_vertex() : Boolean;
Description: An initial vertex can have at most one outgoing transition.
Expression: (self.kind = #initial) implies (self.outgoing->size <= 1)

Signature: history_vertices() : Boolean;
Description: History vertices can have at most one outgoing transition.
The OCL used here is not normative.
Editor's notes: size() not size.
Expression: ((self.kind = #deepHistory) or (self.kind = #shallowHistory)) implies (self.outgoing->size() <= 1)
Original: ((self.kind = #deepHistory) or (self.kind = #shallowHistory)) implies (self.outgoing->size <= 1)

Signature: fork_vertex() : Boolean;
Description: In a complete statemachine, a fork vertex must have at least two outgoing transitions and exactly one incoming transition.
The OCL used here is not normative.
Editor's notes: size() not size.
Expression: (self.kind = #fork) implies ((self.incoming->size() = 1) and (self.outgoing->size() >= 2))
Original: (self.kind = #fork) implies ((self.incoming->size = 1) and (self.outgoing->size >= 2))

Signature: choice_vertex() : Boolean;
Description: In a complete statemachine, a choice vertex must have at least one incoming and one outgoing transition.
The OCL used here is not normative.
Editor's notes: size() not size.
Expression: (self.kind = #choice) implies ((self.incoming->size() >= 1) and (self.outgoing->size() >= 1))
Original: (self.kind = #choice) implies ((self.incoming->size >= 1) and (self.outgoing->size >= 1))

Operations:

No additional operations.



Send questions or comments to [email protected].