Class UML 2.3::ProtocolStateMachine
Description:
A protocol state machine is always defined in the context of a classifier.
It specifies which operations of the classifier can be called in which
state and under which condition, thus specifying the allowed call sequences
on the classifier's operations. A protocol state machine presents the possible
and permitted transitions on the instances of its context classifier, together
with the operations which carry the transitions. In this manner, an instance
lifecycle can be created for a classifier, by specifying the order in which
the operations can be activated and the states through which an instance
progresses during its existence.
Direct Superclasses: StateMachineDirect Subclasses: Class Precedence List: ProtocolStateMachine,
StateMachine,
Behavior,
Class,
EncapsulatedClassifier,
StructuredClassifier,
BehavioredClassifier,
Classifier,
TemplateableElement,
Type,
PackageableElement,
ParameterableElement,
Namespace,
RedefinableElement,
NamedElement,
ElementProperties:
![](/se-interop/image/down-arrow.png)
conformance :
ProtocolConformance (0 *); -- source
ProtocolStateMachine![](/se-interop/image/down-arrow.png)
connectionPoint :
Pseudostate (0 *); -- source
StateMachine![](/se-interop/image/down-arrow.png)
extendedStateMachine :
StateMachine (0 *); -- source
StateMachine![](/se-interop/image/down-arrow.png)
region :
Region (1 *); -- source
StateMachine![](/se-interop/image/down-arrow.png)
submachineState :
State (0 *); -- source
StateMachine![](/se-interop/image/right-arrow.png)
context :
BehavioredClassifier (0 1); -- source
Behavior The classifier that is the context for the execution of the behavior. If
the behavior is owned by a BehavioredClassifier, that classifier is the
context. Otherwise, the context is the first BehavioredClassifier reached
by following the chain of owner relationships. For example, following this
algorithm, the context of an entry action in a state machine is the classifier
that owns the state machine. The features of the context classifier as
well as the elements visible to the context classifier are visible to the
behavior.
{
readonly,
derived}
Subsets: RedefinableElement.redefinitionContext
The spec does not provide a function to compute this derived property!![](/se-interop/image/down-arrow.png)
isReentrant : Boolean (1 1); -- source
Behavior![](/se-interop/image/down-arrow.png)
ownedParameter :
Parameter (0 *); -- source
Behavior![](/se-interop/image/down-arrow.png)
ownedParameterSet :
ParameterSet (0 *); -- source
Behavior![](/se-interop/image/down-arrow.png)
postcondition :
Constraint (0 *); -- source
Behavior![](/se-interop/image/down-arrow.png)
precondition :
Constraint (0 *); -- source
Behavior![](/se-interop/image/down-arrow.png)
redefinedBehavior :
Behavior (0 *); -- source
Behavior![](/se-interop/image/down-arrow.png)
specification :
BehavioralFeature (0 1); -- source
Behavior![](/se-interop/image/down-arrow.png)
extension :
Extension (0 *); -- source
Class![](/se-interop/image/down-arrow.png)
isAbstract : Boolean (1 1); -- source
Class![](/se-interop/image/down-arrow.png)
isActive : Boolean (1 1); -- source
Class![](/se-interop/image/down-arrow.png)
nestedClassifier :
Classifier (0 *); -- source
Class![](/se-interop/image/down-arrow.png)
ownedAttribute :
Property (0 *); -- source
Class![](/se-interop/image/down-arrow.png)
ownedOperation :
Operation (0 *); -- source
Class![](/se-interop/image/down-arrow.png)
ownedReception :
Reception (0 *); -- source
Class![](/se-interop/image/down-arrow.png)
superClass :
Class (0 *); -- source
Class![](/se-interop/image/down-arrow.png)
ownedPort :
Port (0 *); -- source
EncapsulatedClassifier![](/se-interop/image/down-arrow.png)
ownedConnector :
Connector (0 *); -- source
StructuredClassifier![](/se-interop/image/down-arrow.png)
part :
Property (0 *); -- source
StructuredClassifier![](/se-interop/image/down-arrow.png)
role :
ConnectableElement (0 *); -- source
StructuredClassifier![](/se-interop/image/down-arrow.png)
classifierBehavior :
Behavior (0 1); -- source
BehavioredClassifier![](/se-interop/image/down-arrow.png)
interfaceRealization :
InterfaceRealization (0 *); -- source
BehavioredClassifier![](/se-interop/image/down-arrow.png)
ownedBehavior :
Behavior (0 *); -- source
BehavioredClassifier![](/se-interop/image/down-arrow.png)
ownedTrigger :
Trigger (0 *); -- source
BehavioredClassifier![](/se-interop/image/right-arrow.png)
attribute :
Property (0 *); -- source
Classifier Refers to all of the Properties that are direct (i.e. not inherited or
imported) attributes of the classifier.
{
readonly}
Derived union with sources: (ownedAttribute)
Subsets: Classifier.feature
![](/se-interop/image/down-arrow.png)
collaborationUse :
CollaborationUse (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png)
feature :
Feature (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png)
generalization :
Generalization (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png)
inheritedMember :
NamedElement (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png)
isFinalSpecialization : Boolean (1 1); -- source
Classifier![](/se-interop/image/right-arrow.png)
ownedTemplateSignature :
RedefinableTemplateSignature (0 1); -- source
Classifier The optional template signature specifying the formal template parameters.
{
composite}
Subsets: Element.ownedElement
Redefines: TemplateableElement.ownedTemplateSignature
Opposite: RedefinableTemplateSignature.classifier
![](/se-interop/image/down-arrow.png)
ownedUseCase :
UseCase (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png)
powertypeExtent :
GeneralizationSet (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png)
redefinedClassifier :
Classifier (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png)
representation :
CollaborationUse (0 1); -- source
Classifier![](/se-interop/image/down-arrow.png)
substitution :
Substitution (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png)
templateParameter :
ClassifierTemplateParameter (0 1); -- source
Classifier![](/se-interop/image/down-arrow.png)
useCase :
UseCase (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png)
templateBinding :
TemplateBinding (0 *); -- source
TemplateableElement![](/se-interop/image/down-arrow.png)
package :
Package (0 1); -- source
Type![](/se-interop/image/down-arrow.png)
visibility :
VisibilityKind (1 1); -- source
PackageableElement![](/se-interop/image/down-arrow.png)
owningTemplateParameter :
TemplateParameter (0 1); -- source
ParameterableElement![](/se-interop/image/down-arrow.png)
elementImport :
ElementImport (0 *); -- source
Namespace![](/se-interop/image/down-arrow.png)
importedMember :
PackageableElement (0 *); -- source
Namespace![](/se-interop/image/down-arrow.png)
member :
NamedElement (0 *); -- source
Namespace![](/se-interop/image/down-arrow.png)
ownedMember :
NamedElement (0 *); -- source
Namespace![](/se-interop/image/down-arrow.png)
ownedRule :
Constraint (0 *); -- source
Namespace![](/se-interop/image/down-arrow.png)
packageImport :
PackageImport (0 *); -- source
Namespace![](/se-interop/image/down-arrow.png)
isLeaf : Boolean (1 1); -- source
RedefinableElement![](/se-interop/image/down-arrow.png)
redefinedElement :
RedefinableElement (0 *); -- source
RedefinableElement![](/se-interop/image/down-arrow.png)
redefinitionContext :
Classifier (0 *); -- source
RedefinableElement![](/se-interop/image/down-arrow.png)
clientDependency :
Dependency (0 *); -- source
NamedElement![](/se-interop/image/down-arrow.png)
name : String (0 1); -- source
NamedElement![](/se-interop/image/down-arrow.png)
nameExpression :
StringExpression (0 1); -- source
NamedElement![](/se-interop/image/down-arrow.png)
namespace :
Namespace (0 1); -- source
NamedElement![](/se-interop/image/down-arrow.png)
qualifiedName : String (0 1); -- source
NamedElement![](/se-interop/image/down-arrow.png)
ownedComment :
Comment (0 *); -- source
Element![](/se-interop/image/right-arrow.png)
ownedElement :
Element (0 *); -- source
Element The Elements owned by this element.
{
composite,
readonly}
Derived union with sources: (ownedComment, nameExpression, packageImport, ownedRule, ownedMember, elementImport, templateBinding, substitution, ownedUseCase, ownedTemplateSignature, generalization, collaborationUse, ownedTrigger, ownedBehavior, interfaceRealization, ownedConnector, ownedReception, ownedOperation, ownedAttribute, nestedClassifier, ownedParameterSet, ownedParameter, region, connectionPoint, conformance)
Opposite: Element.owner
![](/se-interop/image/down-arrow.png)
owner :
Element (0 1); -- source
ElementConstraints:
Signature: protocol_transitions() : Boolean;
Description: All transitions of a protocol state machine must be protocol transitions.
(transitions as extended by the ProtocolStateMachines package)
Expression: region->forAll(r | r.transition->forAll(t | t.oclIsTypeOf(ProtocolTransition)))
Signature: ports_connected() : Boolean;
Description: If two ports are connected, then the protocol state machine of the required
interface (if defined) must be conformant to the protocol state machine
of the provided interface (if defined).
Expression: true
Signature: entry_exit_do() : Boolean;
Description: The states of a protocol state machine cannot have entry, exit, or do activity
actions.
Expression: region->forAll(r | r.subvertex->forAll(v | v.oclIsKindOf(State) implies
(v.entry->isEmpty() and v.exit->isEmpty() and v.doActivity->isEmpty())))
Signature: deep_or_shallow_history() : Boolean;
Description: Protocol state machines cannot have deep or shallow history pseudostates.
The OCL used here is not normative.Editor's notes: Pseudo not Psuedo, removed close paren.
Expression: region->forAll (r | r.subvertex->forAll (v | v.oclIsKindOf(Pseudostate) implies
((v.kind <> #deepHistory) and (v.kind <> #shallowHistory))))
Original: region->forAll (r | r.subvertex->forAll (v | v.oclIsKindOf(Psuedostate) implies
((v.kind <> #deepHistory) and (v.kind <> #shallowHistory)))))
Signature: classifier_context() : Boolean;
Description: A protocol state machine must only have a classifier context, not a behavioral
feature context.
Expression: (not context->isEmpty( )) and specification->isEmpty()
Operations:
No additional operations.
Send questions or comments to
[email protected].