📄 umlsemantics011.htm
字号:
<font face="Times New Roman"><p></font>迁移是关系的子类型。</p> </blockquote> </blockquote> <p>实例化 实例化是行为类的实例与行为的关联,表明该行为类的实例是该行为类的具体实现。行为类的实例是对行为类的实例化。</p> <p>内部迁移 内部迁移是状态到迁移集合的组合聚集。命名的迁移是状态的内部迁移。</p> <p>激发 激发是动作到操作的共享聚集。动作是操作的激发。</p> <font face="Times New Roman"><p></font>激发是动作到信号的共享聚集。动作是信号的激发.<font face="Times New Roman"></p> </font><p>发生 发生是调用事件到操作的共享聚集。调用事件是操作的发生。</p> <p>发生是信号事件到信号的共享聚集。信号事件是信号的发生。</p> <p>发生是定时事件到时间表达式的共享聚集。定时事件是在时间表达式中显示的定时事件的发生。</p> <p>引用 引用是动作表达式和动作集合之间的关联,表明动作表达式引用给定的动作。动作表达式引用零个或多个动作。</p> <p>源 源是状态顶点和迁移之间的双向关联。一个状态顶点可以是多个迁移的源,单个迁移也可以有多个状态顶点作为其源。</p> <p>状态变量 状态变量是状态到属性集合的组合聚集。这些属性是该状态的状态变量。</p> <p>子状态 子状态是组合状态到状态顶点集合的组合聚集。这些状态顶点是该组合状态的子状态。</p> <p>目标 目标是状态顶点和迁移之间的双向关联。 一个状态顶点可以是多个迁移的目标,单个迁移也可以有多个状态顶点作为其目标。</p> <font face="Times New Roman"><p></font>目标是动作到其目标的共享关联。其实例是动作的目标。</p> <p>迁移集 迁移集是状态机到迁移集合的组合聚集。迁移集是状态机的直接迁移。</p> <p>触发 触发是迁移到至多一个事件的组合关联。事件触发迁移。</p> <p>顶点 顶点是状态机到状态顶点集合的组合聚集。这些状态顶点是状态机的直接状态顶点。</p> </blockquote> <b><font face="Arial" size="5"><p></font></b><font size="5">10.2 </font><a name="10.2"></a>基本语义</p> <p>行为类是模型元素的抽象子类型。行为类的责任是给效果命名。</p> <p>行为实例类是模型元素的子类型。行为实例类的责任是指定一个行为类的实例的具体实现。行为类的实例提供效果的规格说明,而行为实例类的实例是在时空中实现行为类的实例,也就是说行为实例类的实例体现了时空中效果的发生。</p> <p>实例化是行为实例类的实例与行为类的实例之间的关联。实例化的责任是指定行为实例类的实例是行为类实例的具体实现。每个行为类的实例可以有零个或多个行为实例类的实例,而每个行为实例类的实例对应的行为类的实例不超过一个,在大多数情况下,对应的行为类的实例有且仅有一个。但也有可能指定行为实例类的实例没有对应的行为类,例如在不完整和/或演化模型中常有这种情况。</p> <p>状态机是行为类的子类型。状态机的责任是指定一状态变化序列中执行的动作的集合。状态机实例的名字是一个名字实例,表示状态机的名字;其值可以非空。状态机实例定义一个命名空间。在状态机实例之外,状态机实例的任何部分都不可见;在状态机实例以内,状态机实例的任何部分都可见,甚至在嵌套的情形下也是如此(这时,如果在其范围外使用名字必须加限定)。</p> <p>状态顶点是模型元素的抽象子类型。状态顶点的责任是说明迁移实例的源或目标。</p> <p>顶点是状态机实例到状态顶点实例集合的组合聚集。顶点的责任是指定组成状态机实例的直接状态顶点的实例。因为每个状态机实例都定义一个命名空间,所以一个状态机的状态顶点实例的名字必须是唯一的。</p> <p>布尔表达式是表达式的子类型。布尔表达式的责任是指定一个取值为布尔值实例的表达式。</p> <p>迁移是关系的子类型。迁移的责任是指定从一个状态顶点到另一个状态顶点的转移,这种转移体现了状态的变化。迁移实例的名字是一个名字的实例,说明了该迁移的名字;一般为空。迁移实例的guard(迁移条件)属性是指定迁移实例触发条件的布尔表达式。guard实现的默认值为真。guard的值不必是静态的,但可以包括由迁移实例可见的名字中抽取出的布尔表达式的实例。</p> <p>迁移集是状态机实例到迁移实例集合的组合聚集。迁移集的责任是指定组成状态机实例的直接和嵌套的迁移。</p> <p>源是状态顶点实例和迁移实例的双向关联。源的责任是指定迁移实例的源。每个给定状态顶点的实例可以是零个或多个迁移实例的源,每个迁移实例可以有零个或多个源。隐含情况下任一迁移实例必须有至少一个源(没有悬空的迁移实例)。并且,一个迁移实例可以有多个源;此时为一个合并,体现源之间的同步,每个源必须是并发状态实例。有多个源的迁移实例必须有且仅有一个目标。</p> <p>目标是状态顶点实例和迁移实例之间的双向关联。目标的责任是指定迁移实例的目标。每个给定状态顶点可以是零个或多个迁移实例的目标,每个迁移实例必须有至少一个目标(没有悬空的迁移实例)。并且,一个迁移实例可以有多个目标;此时为分支,表示导致并发状态实例的并发迁移实例集合。有多个目标的迁移实例必须有且仅有一个源;这种迁移实例的目标必须引用并发状态顶点实例。</p> <p>状态是状态顶点的子类型。状态的责任是指定在时空中某个给定时刻的实例的情况。状态实例的名字是一个名字的实例,说明该状态的名字;必须为非空。状态实例定义一个命名空间。</p> <p>动作状态是状态的子类型。动作状态的责任是指定一个状态实例,这类状态实例没有子状态,有且仅有一个内部迁移实例,其效果的动作表达式实例取值为只激发一个操作实例的动作实例。</p> <p>状态变量是状态实例到属性实例集合的组合聚集。状态变量的责任是指定状态的属性。每个状态实例可以有零个或多个属性实例,每个属性实例可以是零个或多个状态实例的状态变量。状态变量在包含状态实例的范围内说明。</p> <p>内部迁移是状态实例到迁移实例集合的组合聚集。内部迁移的责任是指定状态实例的内部迁移。内部迁移体现了源和目标为同一个状态实例的迁移实例,但内部迁移带有动态语义,触发一个内部迁移并不离开原来的状态实例,也不会导致执行状态实例的entry、do、exit迁移。事实上,如下所述,entry、do和exit是预定义的内部迁移。也可能定义其它内部迁移。内部迁移是迁移的实例,因此可以有迁移条件、触发和效果。</p> <p>伪状态是状态顶点的子类型。伪状态 的责任是指定所有表示非实际状态的顶点,包括初始化、终止和历史连接。伪状态的kind属性指定顶点的类型。king的默认值是初始化。初始化伪状态实例体现了状态的开始;初始化伪状态不能是任何迁移实例的目标。状态机实例必须有且仅有一个初始化伪状态实例为其直接组成部分,对组合状态实例也有同样要求。以初始化伪状态实例为源的迁移实例不能有触发(但可以有一个效果)。终止伪状态实例体现了状态的终止;终止伪状态不能是任何迁移实例的源。历史连接伪状态实例说明一个历史标记,该标记的操作对状态实例的动态语义产生影响,历史连接伪状态实例可以是迁移实例的源。终止和历史连接伪状态实例是可选的;状态机和组合状态实例可以不包括伪状态实例。</p> <p>组合状态是状态的子类型。组合状态的责任是指定包含一个或多个子状态实例的状态。组合状态实例的名字是一个名字的实例,说明组合状态的名字;必须非空。组合状态实例作为一种状态,定义一个命名空间。组合状态实例的isConcurrent属性为布尔值,说明给定状态实例的子状态是否并发的。isConcurrent的默认值为假。并发状态实例体现了一种互不相关的状态,它所参加的控制流程与对等并发状态实例无关。</p> <p>子状态是组合状态实例到状态顶点实例的组合聚集。子状态的责任是指定作为组合状态实例部件的状态顶点实例。每个组合状态实例可以有一个或多个子状态,每个子状态只属于一个组合状态实例(状态顶点实例若是状态机实例的直接顶点,则不属于任何组合状态实例)。</p> <p>事件是模型元素的抽象子类型。事件的责任是指定时空中特定的发生。事件实例没有名字实例。</p> <p>触发是迁移实例到至多一个事件实例的组合聚集。触发的责任是指定引发从迁移实例的源到目标的状态变化的事件实例。每个迁移实例可以有零个或多个事件实例,而每个事件实例只是一个迁移实例的部分。附注:迁移实例可能没有触发;这样的迁移实例认为是无条件的迁移。</p> <p>布尔表达式是表达式的子类型。布尔表达式的责任是提供取值为布尔值实例的表达式实例。</p> <p>时间表达式是表达式的子类型。时间表达式的责任是提供取值为时间实例的表达式实例。本上下文中所用的时间实例体现了触发迁移实例的绝对或相对定时事件。</p> <p>信号事件是事件的子类型。信号事件的责任是指定由激发(发送)信号实例所触发的事件实例。</p> <p>调用事件是事件的子类型。调用事件的责任是指定由激发操作实例所触发的事件实例。</p> <p>定时事件是事件的子类型。定时事件的责任是指定由时间所触发的事件实例。</p> <p>发生是信号事件、调用事件和定时事件实例分别到信号、操作和时间表达式实例的共享聚集。发生指定可能触发迁移实例的信号实例的激发(发送)、操作实例的激发或时间表达式实例的定时事件。每个信号、操作和时间表达式实例可以应用于零个或多个事件实例实现,而每个事件实例只能是一个信号、操作或时间表达式实例的发生。</p> <p>动作表达式是表达式的子类型。 动作表达式的责任是提供一个取值为一个或多个动作实例的引用的表达式实例,此引用表示对动作实例发生的使用,而不是对动作实例发生的定义。referencedActions操作返回被动作表达式实例引用的动作实例列表。</p> <p>引用是动作表达式与动作实例集合之间的关联,表明动作表达式实例引用动作实例集合。引用的责任是建立动作实例和引用该动作实例的动作表达式实例之间的关系。每个动作实例可在零个或多个动作表达式实例中被引用,每个动作表达式实例引用零个或多个动作实例。引用是一种隐含关系,说明这种关系不明显,但可以从动作表达式本身的值推导出来。</p> <p>效果是迁移实例到动作表达式实例的组合聚集。效果的责任是指定迁移的效果。每个迁移实例可以有不多于一个作为效果的动作表达式实例,而每个动作表达式只是一个迁移实例的效果。附注:迁移实例可能没有效果。</p> <p>动作是模型元素的子类型。动作的责任是指定为引起状态变化的效果而执行的工作。动作实例没有名字。</p> <p>激发是动作实例到信号或操作实例的共享聚集。激发的责任是指定信号或操作实例的激发。每个信号或操作实例可以应用于零个或多个动作实例,但每个动作实例是且仅是一个信号或操作实例的激发。</p> <p>目标是动作实例到实例类实例的共享关联。目标的责任是指定被动作实例激发的信号或操作实例的目标。每个实例类的实例可以是零个或多个动作实例的目标,而每个动作实例的目标实例类实例不超过一个。</p> <p>实际参量是动作实例到实例类的实例的共享关联,表示由动作实例激发的操作实例的实际参量。每个实例类的实例可以是零个或多个动作实例的实际参量,每个动作实例的实际参量可以有零个或多个实例类的实例。如果动作实例有实际参量,且该动作是操作实例的激发,则这些实例类的实例是有序的,且必须其数值、次序和类型必须与相应操作实例的形参相匹配。如果动作实例有实际参量,且该动作是信号实例的激发,则这些实例类的实例是有序的,且必须其数值、次序和类型必须与相应信号实例的属性实例相匹配。</p> <p>状态机实例是可以执行的;状态机实例的执行体现了它的动态行为。</p> <p>状态机实例有运行至结束的特点,说明其不可中断。状态机实例在任何时间只能响应一个外部实例类的实例使用的事件实例。一旦事件实例激发,状态机实例执行直到稳定状态,在该状态等待另一个事件实例,或者响应新的或已存在于队列中的事件实例。这隐含地说明了体现定时事件发生的事件实例并不引入超时。</p> <p>状态机实例的执行开始于初始化伪状态实例,初始化伪状态实例是状态机实例的直接组成部分,并且必须是一个没有触发的迁移实例的源。如果该迁移实例带有效果,执行时对其效果进行求值。</p> <p>初始化伪状态实例可能是多个迁移实例的源源,每个迁移实例都不带有触发,但迁移实例可以有迁移条件。到底执行哪个迁移需要遵守离开状态实例的语义,参见后面部分说明。从初始化伪状态实例迁移总是可能的。</p> <p>效果的求值包括对给定的动作表达式中引用的每一个动作实例的求值,求值按照被引用动作返回的列表中发生的次序进行。每个动作实例的求值会激发以给定目标实例类的实例为目标的相关联信号或操作实例。激发操作实例的动作实例中使用实际参量来完成相关联操作实例的激发。效果的求值是不可中断的;所有的动作实例运行直至完成。触发事件实例的信号、操作或时间表达式进入队列。</p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -