UML规范2.5.1,第17.12.11.5节提供了有关交互分类器的控制信息。约束not_contained的解释如下:
交互实例不能包含在另一个交互实例中。
inv: enclosingInteraction->isEmpty()现在,当我看图17.1,它显示了交互的抽象语法,我看到交互分类器是片段分类器的泛化。因此,交互是一个片段,反之亦然。

此外,交互分类器具有“片段”关联,"enclosingInteraction“分类器是片段分类器的关联。那么,如何将上述约束定义为交互分类器的约束呢?交互分类器应该没有属性"enclosingInteraction“。
我对抽象语法的解释是错误的吗?据我理解,上述OCL定义只适用于片段分类器,而不适用于交互分类器。
发布于 2021-03-04 06:50:36
inv: enclosingInteraction>isEmpty()
引用抽象语法,这意味着当InteractionFragment是交互时,enclosingInteraction是空的(其大小为0)。
如果没有这个约束,交互就会有一个封闭的交互,那么下面的内容可能是假的:
交互实例不能包含在另一个交互实例中。
这种关系的目标是允许交互知道其InteractionFragment,允许InteractionFragment知道其包含的交互,而且由于双向关联,不可能有:

没有意义的,但在下列情况下允许的:

没有必要的约束的一种方法是引入一个额外的类:

但这不是UML元模型中的选择。
实际上,在InteractionFragment的所有其他专门化情况下,enclosingInteraction并不是空的(其大小为1),因为它们都不能通过交互而存在:
覆盖:生命线1..1{重新定义InteractionFragment::A_covered_events::events}(相对于OccurrenceSpecification )引用OccurrenceSpecification出现的生命线。
覆盖:生命线1..1{重新定义InteractionFragment::A_covered_stateInvariant::stateInvariant}(相对于StateInvariant )引用StateInvariant出现的生命线。
ExecutionSpecification是在生命线中执行行为或行为单位的规范。
交互分类器应该没有属性"enclosingInteraction“
注enclosingInteraction是在InteractionFragment上定义的,交互继承它。
发布于 2021-03-06 00:10:35
tl;博士
在行为描述中避免循环。
长版
Interaction
交互是一个行为单元,集中在可连接元素之间可观察的信息交换上。
因此,这描述了您的代码中的某一部分。Interaction本身就是InteractionFragment
InteractionFragment是最通用的交互单元的抽象概念。InteractionFragment是交互的一部分。每个InteractionFragment在概念上就像一个单独的交互。
这反过来(抽象的)被OccurrenceSpecification具体化了
OccurrenceSpecification是交互的基本语义单元。它们所指定的事件序列是相互作用的意义。
ExecutionSpecification (也是抽象的)
ExecutionSpecification是在生命线中执行行为或行为单位的规范。ExecutionSpecification的持续时间由两个OccurrenceSpecifications表示,即start OccurrenceSpecification和finish OccurrenceSpecification。
或StateInvariant
StateInvariant是对交互参与者的运行时约束。它可用于指定各种不同类型的约束,例如属性值或变量、内部或外部状态等。StateInvariant是一个InteractionFragment,它放置在生命线上。
他们中的每一个都从不同的方面描述了行为。
Interaction具有从引用任何Interaction实例的InteractionFragment继承的+enclodingIteraction。
现在,约束只是说,一旦您有了这样一个实例,它可能只发生一次,而不是在某些递归描述中。所以你可以把行为分割成任何一个小片段,但是你不能重复其中的一个。
引用来自UML2.5元模型中的描述。
https://stackoverflow.com/questions/66469290
复制相似问题