【问题标题】:behavior vs operation in UMLUML 中的行为与操作
【发布时间】:2013-06-09 08:11:09
【问题描述】:

据我所知,

该操作位于类图中的类的第二个隔间中。

以下是来自 UML 规范的Behavior definition(2011 年 8 月,第 445 页)

13.3.2 行为(来自 BasicBehaviors)

行为是其上下文分类器如何变化的规范 随着时间的推移状态。该规范可以是 可能的行为执行或紧急行为,或选择性 可能执行的一个有趣子集的插图。这 后一种形式通常用于捕获示例,例如跟踪 特定的执行。分类器的行为总是 行为的定义,而不是说明。它描述了 分类器实例可能经历的状态变化序列 其生命周期。它的精确语义取决于种类 的分类器。例如,协作的分类器行为 表示所有部分的紧急行为,而分类器 类的行为只是类实例的行为 与其任何部分的行为分开。当一个行为是 关联为行为特征的方法,它定义了 该功能的实现(即,生成的计算 行为特征的影响)。

1)您能解释一下上述定义中的行为是什么意思吗?

2)统一建模语言(UML)中的行为和操作有什么区别?

【问题讨论】:

    标签: behavior uml class-diagram operation


    【解决方案1】:

    操作是一个仅规范的元素 - 将其想象为 OO 编程语言中的方法签名。它有一个名称和一个参数列表。

    行为是(除其他外)操作(或其他行为特征,如接收)在调用时所做的 - 将其想象为方法的主体。

    UML 实际上将定义操作做什么的行为称为“方法”。此外,从行为(无论是活动还是状态机)来看,操作都被视为“规范”。

    还要注意,在 UML 中操作可以有多个方法。它意味着什么以及在调用操作时应该执行什么行为取决于相关工具。

    最后,行为可以是状态机或活动 - 活动很容易理解,因为它们相当于程序代码。状态机是完全不同的野兽,我承认我不明白如何将状态机用作操作的行为。

    【讨论】:

    • 非常感谢@Rafael Chaves 的澄清,非常有帮助。这是否意味着操作可以被视为“行为特征”并且实现是“行为”?那么行为分类器呢?我也不明白如何将状态机用作操作的行为。问候
    • 嗨@Rafael Chaves!我发布了一个专门的状态图问题作为操作行为,请您检查一下stackoverflow.com/questions/17389717/…
    【解决方案2】:

    确切地说:

    在 UML 类图中,一般类有 3 个公共隔间:可以更多,因为用户定义的隔间可以添加到类框形状。

    在实践中,隔间的顺序:

    1. 类名
    2. 属性
    3. 运营

    所以第三层用于“操作”。

    行为:?你所说的行为是什么意思??

    在 OO 术语中,对象具有属性(属性)[汽车有颜色],以及 行为(操作)[汽车加速、停止等]。

    在 UML 术语中,操作的实现称为方法。

    我们使用交互(顺序或协作)图来研究我们将构建或调查的系统的动态行为。

    【讨论】:

    • 谢谢@Hippias Minor 的好意。我在 UML 规范中阅读了有关行为的信息,但我不明白,所以我更新了我的问题。请你检查一下吗?
    • 首先,您是单纯学习UML还是尝试实现UML工具?
    • 因为这些东西是 UML 元模型,如果您不会实现 UML 工具,请不要为它烦恼。
    • 如果您只是尝试学习并使用 UML,那么本规范不适合您:本规范适用于工具供应商和识别标准的人。
    • 你不应该从规范中学习 UML。有关一般路线图和参考资料,请查看我的答案stackoverflow.com/questions/16546961/…
    【解决方案3】:

    行为专长: 不透明行为、活动、状态机、交互 例如,“i = i+ 1;”的不透明行为

    BehavioralFeature 的规范: 操作、接待 例如“void foo()”的操作

    组合:可以通过 BehavioralFeature 直接调用 Behavior,该 BehavioralFeature 实现为方法或 BehavioredClassifier 的分类器Behavior。

    例如,

    void foo()
    {
        i = i + 1;
    }
    

    UML 使开发人员可以灵活地“分配”具有不同“行为”的操作来调用。 例如,如果有另一个行为“MyStateMachine”,您可以简单地分配操作“foo”来调用它。

    void foo()
    {
        (new MyStateMachine(this)).run();  //Create an instance of it, pass the current classifier as context of the behavior
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-26
      • 1970-01-01
      • 2014-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多