Software Disclaimer

Class UML 2.4.1::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: StateMachine

Direct Subclasses:

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

Properties:

conformance : ProtocolConformance (0 *); -- source ProtocolStateMachine
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
ownedPort : Port (0 *); -- source EncapsulatedClassifier
ownedConnector : Connector (0 *); -- source StructuredClassifier
part : Property (0 *); -- source StructuredClassifier
role : ConnectableElement (0 *); -- source StructuredClassifier
classifierBehavior : Behavior (0 1); -- source BehavioredClassifier
interfaceRealization : InterfaceRealization (0 *); -- source BehavioredClassifier
ownedBehavior : Behavior (0 *); -- source BehavioredClassifier
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 (1 1); -- source PackageableElement
owningTemplateParameter : TemplateParameter (0 1); -- source ParameterableElement
isLeaf : Boolean (1 1); -- source RedefinableElement
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
templateBinding : TemplateBinding (0 *); -- source TemplateableElement
ownedComment : Comment (0 *); -- source Element
ownedElement : Element (0 *); -- source Element
owner : Element (0 1); -- source Element

Constraints:

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].