15.6.3 语义

活动分区

ActivityPartition(活动分区)是一种活动组,用于鉴别具有共同特点的活动节点。活动分区可以共享内容。它们通常对应一个业务模型中的组织单元。它们可以用于在活动的节点中分配特点或资源。

活动分区不影响模型中的token流。由于containedNodes(被包含节点)和containedEdges(被包含边)的执行,包括操作调用和信号发送,分区为活动行为提供了一种受约束的视角。这可能不仅与显式动作调用(参见16.3)相关,还可能涉及隐含的调用,例如转换和规约行为。根据分区所代表元素的不同,约束也相应的不同。下面列举了几种标准的约束:

  • 分类符:分区中被调用的行为是分区所代表的分类符实例的职责。所有被调用行为的上下文应该是该分类符。运行时分区内操作调用和信号发送的目标对象应为该分类符的实例。
  • 实例规约:分区中被调用的行为是由分区所代表的实例规模所建模的实例的职责。所有被调用行为的上下文应为实例规约的分类符。分区内的操作调用和信号发送的目标应为该实例规约所代表的实例。
  • 属性:分区内被调用的行为是分区所代表的属性所拥有的实例的职责。所有被调用行为的上下文应为该属性的类型。分区内的操作调用和信号发送的目标应为运行时属性所持有的实例。如果该属性持有多个值,那么被当做向每个值并发的进行调用,并且直到所有的并发实例都结束,调用才算结束。

活动分区可以表示上述除外的其它种类的元素,但是本规范没有定义对应于其它元素的语义。

活动分区可以有subpartitions(子分区)。如果活动分区的isDimension=true,那么它对子分区进行维度划分。维度分区不应该被包含在其它的活动分区中。举个例子,活动可能有一个被调用行为执行地址(由每一个子分区来表示)的维度分区和执行它们所需花费的维度分区。

如果一个活动分区代表了一个属性,并且它的子分区代表实例规约,那么该实例规约应该是对属性所持有的值的建模。子分区中被调用的行为应该与子分区的实例规约和所属活动分区的属性所需的约束一致。举个例子,一个分区可能代表被调用行为的执行地址,子分区可能代表这个(地址)属性的特定值,例如芝加哥。地址属性可能是所属活动的上下文行为分类符的一个属性,或着甚至是活动自身的一个属性。

如果一个活动分区代表的是一个分类符的属性(参见9.2),并且它被另一个分区所包含,那么superPartition应该代表的是该分类符或者是类型为该分类符的一个属性。superPartition中的所有其它非外部子分区也应该代表了该分类符的属性。在运行时,子分区内的行为调用(包括操作调用和信号发送)的目标应该是superPartition所代表分类符的相同实例的所代表属性的值。如果superPartition是以该分类符为上下文的一个封闭活动的一个分区,那么在运行时,执行中的活动的上下文对象应该与子分区中调用目标(superPartition)所代表的分类符是相同的实例。

如果一个非外部活动分区代表的是一个分类符,并且它被包含在另一分区中,那么这个superPartition也应该代表一个分类符,并且子分区的分类符必须是superPartition所代表的分类符的一个内嵌分类符或拥有的行为,或者子分区的分类符必须是与superPartition所代表分类符是一个组合关联的被包含端。如果是后者,那么在运行时,子分区中行为的调用目标,包括操作调用和信号操作,应该被认为是子分区所代表分类符的一个实例,它通过组合关联链接到__superPartition所代表分类符的一个实例上。

外部活动分区的isExternal=true。外部分区对于分区结构的规则是个有意的(intentional)例外。举个例子,一个维度分区可能有显示一个结构化分类符部分的分区。那么它就可以有一个不代表其中一个部分、而是一个完全单独的分类符的一个外部分区。在业务建模中,外部分区可以用于建模一个业务之外的实体。

活动分区为高层建模者提供了用于review的足够信息,但对于执行还是不够。举个例子,如果一个分区代理了一个分类符,那么在该分区内被调用的行为是这个分类符的实例的职责,但是这个模型可能说或者没说究竟是哪个实例。因此,一个操作的调用将被限制到是这个分类符的一个操作,但调用的输入对象流没有被指定在运行时哪个实例才是目标。这个对象流可以在开发的晚期阶段来规定以支持执行。另一种选择可能是使用代表部分的活动分区。这样,当活动在一个特定对象上下文中执行时,运行时该对象的部分将会用作上述操作调用和信号发送的目标。

可中断的活动区域

InterruptibleActivityRegion(可中断活动区域)是一种支持部分活动终止的活动组。可中断活动区域只包含活动节点。它还把一些源在区域内、目标在区域外的活动边识别为interruptingEdge(中断边)。当沿中断边的一个token被接受通过该边是,区域的所有containedNodes的执行被终止,它们所涉及的所有tokens都被删除。然而,通过中断边的token将到达它的目标,并且所有被接受的、通过源节点在区域内目标节点在区域外的非中断边的tokens仍然到达目标节点,即使在通过时发生中断。

每一流入边的区域中的AcceptEventAction在一个token进入区域时变为使能,即使这个token不以该AcceptEventAction为目标(参见16.10对AcceptEventAction的完整描述)。

如果在有些时候不希望终止区域内的所有流,那么就不要使用可中断区域。举个例子,如果活动的一个单一执行用于它所有的调用(即isSingleExecution=true),那么多个tokens流会流经相同的活动。此时,很可能不希望仅仅因为一个token离开(可中断)区域就终止区域内所有的流。当使用可中断区域是,为活动的每个调用安排单独的执行(即isSingleExecution=false),这样不同调用中的tokens就不会彼此影响。

results matching ""

    No results matching ""