【问题标题】:What is the meaning of "not_contained" constraint of Interaction in UML 2.5.1UML 2.5.1中交互的“not_contained”约束是什么意思
【发布时间】:2021-03-04 05:46:47
【问题描述】:

UML 规范 2.5.1,第 17.12.11.5 节提供了有关交互分类器约束的信息。约束 not_contained 解释如下:

一个交互实例不能包含在另一个交互实例中。

inv: enclosingInteraction->isEmpty()

现在,当我查看显示交互的抽象语法的图 17.1 时,我看到交互分类器是片段分类器的泛化。因此,Interaction 是 Fragment,反之则不然。

另外,Interaction 分类器具有“fragment”关联,“enclosureInteraction”分类器是 Fragment 分类器的关联。那么,如何将上述约束定义为交互分类器的约束呢?交互分类器应该没有属性“enclosureInteraction”。

我对抽象语法的解释是错误的吗?据我了解,上述 OCL 定义只适用于 Fragment 分类器,不适用于 Interaction Classifier。

【问题讨论】:

    标签: uml language-lawyer interaction


    【解决方案1】:

    inv: enclosureInteraction->isEmpty()

    引用抽象语法,这意味着当 InteractionFragment 是 Interaction 时,enclosureInteraction 为空(其大小为 0)。

    如果没有该约束,Interaction 可以有一个封闭的Interaction,然后以下可能为假:

    一个交互实例不能包含在另一个交互实例中。


    关系的目标是让一个Interaction知道它的InteractionFragment,并且一个InteractionFragment知道它包含的Interaction ,由于双向关联,不可能有:

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

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

    但这不是 UML 元模型中的选择


    事实上,在 InteractionFragment 的所有其他特化情况下,enclosureInteraction 不是空的(它的大小为 1),因为它们都不能存在于一个 互动:

    covered : Lifeline [1..1]{redefines InteractionFragment::covered}(与 A_covered_events::events 相反)引用 OccurrenceSpecification 出现的生命线。

    covered : Lifeline [1..1]{redefines InteractionFragment::covered}(相反 A_covered_stateInvariant::stateInvariant) 引用出现 StateInvariant 的生命线。

    ExecutionSpecification 是生命线中行为或动作单元执行的规范


    交互分类器应该没有属性“enclosureInteraction”

    注意enclosureInteraction是在InteractionFragment上定义的,Interaction继承了它。

    【讨论】:

    • @qwerty_so 标准中没有直接说明,但它们不能存在于交互之外,因此它们具有封闭的交互
    • @qwerty_so 你是说即使他们在互动中,他们的 enclosingInteraction 也是空的?这对我来说毫无意义
    • @qwerty_so 如果没有 LifeLine 就没有 OccurrenceSpecification 也没有 StateInvariant 也没有 ExecutionSpecification,那么有什么问题?
    【解决方案2】:

    tl;dr

    避免在你的行为描述中出现循环。

    加长版

    Interaction

    交互是一个行为单元,专注于可连接元素之间可观察到的信息交换。

    这样就描述了你的一段代码。 Interaction 本身就是 InteractionFragment

    InteractionFragment 是最通用交互单元的抽象概念。 InteractionFragment 是交互的一部分。每个 InteractionFragment 在概念上就像一个 Interaction 本身。

    这反过来(抽象的)由OccurrenceSpecification具体化

    OccurrenceSpecification 是交互的基本语义单元。它们指定的出现顺序就是Interactions的含义。

    ExecutionSpecification(也是抽象的)

    ExecutionSpecification 是生命线中行为或动作单元执行的规范。 ExecutionSpecification 的持续时间由两个 OccurrenceSpecification 表示,即开始 OccurrenceSpecification 和结束 OccurrenceSpecification。

    或StateInvariant

    StateInvariant 是对交互参与者的运行时约束。它可用于指定各种不同类型的约束,例如属性或变量的值、内部或外部状态等。 StateInvariant 是一个 InteractionFragment,它被放置在生命线上。

    他们每个人都从不同的方面描述行为。

    Interaction 有一个 +enclodingIteraction 继承自 InteractionFragment,它引用任何 Interaction 实例。

    现在约束只是说,一旦你有这样一个实例,它可能只出现一次,而不是在某些递归描述中。因此,您可以将行为拆分为任何小块,但不能重复其中一个。


    引用自 UML 2.5 元模型中的描述。

    【讨论】:

    • 非常感谢您的回答,确实两个答案都解决了我的问题,我只是接受了布鲁诺的回答,因为这是第一个答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    相关资源
    最近更新 更多