Software Disclaimer

Class UML 2.5::StateMachine

Description:

StateMachines can be used to express event-driven behaviors of parts of a system. Behavior is modeled as a traversal of a graph of Vertices interconnected by one or more joined Transition arcs that are triggered by the dispatching of successive Event occurrences. During this traversal, the StateMachine may execute a sequence of Behaviors associated with various elements of the StateMachine.

Direct Superclasses: Behavior

Direct Subclasses: ProtocolStateMachine

Class Precedence List: StateMachine, Behavior, Class, BehavioredClassifier, EncapsulatedClassifier, StructuredClassifier, Classifier, Namespace, Type, PackageableElement, ParameterableElement, TemplateableElement, RedefinableElement, NamedElement, Element

Properties:

connectionPoint : Pseudostate (0 *); -- source StateMachine
extendedStateMachine : StateMachine (0 *); -- source StateMachine
region : Region (1 *); -- source StateMachine
submachineState : State (0 *); -- source StateMachine
context : BehavioredClassifier (0 1); -- source Behavior
isReentrant : Boolean (1 1); -- source Behavior
ownedParameter : Parameter (0 *); -- source Behavior
ownedParameterSet : ParameterSet (0 *); -- source Behavior
postcondition : Constraint (0 *); -- source Behavior
precondition : Constraint (0 *); -- source Behavior
specification : BehavioralFeature (0 1); -- source Behavior
extension : Extension (0 *); -- source Class
isAbstract : Boolean (1 1); -- source Class
isActive : Boolean (1 1); -- source Class
nestedClassifier : Classifier (0 *); -- source Class
ownedAttribute : Property (0 *); -- source Class
ownedOperation : Operation (0 *); -- source Class
ownedReception : Reception (0 *); -- source Class
superClass : Class (0 *); -- source Class
classifierBehavior : Behavior (0 1); -- source BehavioredClassifier
interfaceRealization : InterfaceRealization (0 *); -- source BehavioredClassifier
ownedBehavior : Behavior (0 *); -- source BehavioredClassifier
ownedPort : Port (0 *); -- source EncapsulatedClassifier
ownedConnector : Connector (0 *); -- source StructuredClassifier
part : Property (0 *); -- source StructuredClassifier
role : ConnectableElement (0 *); -- source StructuredClassifier
attribute : Property (0 *); -- source Classifier
collaborationUse : CollaborationUse (0 *); -- source Classifier
feature : Feature (0 *); -- source Classifier
generalization : Generalization (0 *); -- source Classifier
inheritedMember : NamedElement (0 *); -- source Classifier
isFinalSpecialization : Boolean (1 1); -- source Classifier
ownedTemplateSignature : RedefinableTemplateSignature (0 1); -- source Classifier
ownedUseCase : UseCase (0 *); -- source Classifier
powertypeExtent : GeneralizationSet (0 *); -- source Classifier
redefinedClassifier : Classifier (0 *); -- source Classifier
representation : CollaborationUse (0 1); -- source Classifier
substitution : Substitution (0 *); -- source Classifier
templateParameter : ClassifierTemplateParameter (0 1); -- source Classifier
useCase : UseCase (0 *); -- source Classifier
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
package : Package (0 1); -- source Type
visibility : VisibilityKind (0 1); -- source PackageableElement
owningTemplateParameter : TemplateParameter (0 1); -- source ParameterableElement
templateBinding : TemplateBinding (0 *); -- source TemplateableElement
isLeaf : Boolean (1 1); -- source RedefinableElement

Indicates whether it is possible to further redefine a RedefinableElement. If the value is true, then it is not possible to further redefine the RedefinableElement.
Default value: FALSE

redefinedElement : RedefinableElement (0 *); -- source RedefinableElement
redefinitionContext : Classifier (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
ownedComment : Comment (0 *); -- source Element
ownedElement : Element (0 *); -- source Element
owner : Element (0 1); -- source Element

Constraints:

No additional constraints.

Operations:

Signature: isRedefinitionContextValid(redefinedElement : RedefinableElement; ) : Boolean;
Description: The query isRedefinitionContextValid() specifies whether the redefinition context of a StateMachine is properly related to the redefinition contexts of the specified StateMachine to allow this element to redefine the other. The context Classifier of a redefining StateMachine must redefine the context Classifier of the redefined StateMachine.
Expression: result = (if redefinedElement.oclIsKindOf(StateMachine) then let redefinedStateMachine : StateMachine = redefinedElement.oclAsType(StateMachine) in self._'context'().oclAsType(BehavioredClassifier).redefinedClassifier-> includes(redefinedStateMachine._'context'()) else false endif)

Signature: isConsistentWith(redefiningElement : RedefinableElement; ) : Boolean;
Description: The query isConsistentWith() specifies that a redefining StateMachine is consistent with a redefined StateMachine provided that the redefining StateMachine is an extension of the redefined StateMachine : Regions are inherited and Regions can be added, inherited Regions can be redefined. In case of multiple redefining StateMachine, extension implies that the redefining StateMachine gets orthogonal Regions for each of the redefined StateMachine.
Expression: result = (-- the following is merely a default body; it is expected that the specific form of this constraint will be specified by profiles true)

Signature: ancestor(s1 : Vertex; s2 : Vertex; ) : Boolean;
Description: The query ancestor(s1, s2) checks whether Vertex s2 is an ancestor of Vertex s1.
Expression: result = (if (s2 = s1) then true else if s1.container.stateMachine->notEmpty() then true else if s2.container.stateMachine->notEmpty() then false else ancestor(s1, s2.container.state) endif endif endif )

Signature: LCAState(v1 : Vertex; v2 : Vertex; ) : State;
Description: This utility funciton is like the LCA, except that it returns the nearest composite State that contains both input Vertices.
Expression: result = (if v2.oclIsTypeOf(State) and ancestor(v1, v2) then v2.oclAsType(State) else if v1.oclIsTypeOf(State) and ancestor(v2, v1) then v1.oclAsType(State) else if (v1.container.state->isEmpty() or v2.container.state->isEmpty()) then null.oclAsType(State) else LCAState(v1.container.state, v2.container.state) endif endif endif)

Signature: LCA(s1 : Vertex; s2 : Vertex; ) : Region;
Description: The operation LCA(s1,s2) returns the Region that is the least common ancestor of Vertices s1 and s2, based on the StateMachine containment hierarchy.
Expression: result = (if ancestor(s1, s2) then s2.container else if ancestor(s2, s1) then s1.container else LCA(s1.container.state, s2.container.state) endif endif)



Send questions or comments to xmi-interop@omg.org.