哪个UML图是合适的?两个对象相互作用,一个正在改变另一个对象的状态

哪个UML图是合适的?两个对象相互作用,一个正在改变另一个对象的状态,uml,Uml,我的需求:我想根据下面描述的案例,提出一个合适的UML图。我需要知道哪个UML最适合这种情况 案例:两个对象A和B以“应用程序表单”的形式相互交互。对象A中的某个事件触发对象B的状态变化。两个对象都为用例相互交互 我尝试使用状态图,但它失败了,因为在这里,两个对象相互作用来改变一个对象的状态,而状态图只适合描述一个对象的状态变化,而不显示与另一个对象的相互作用导致状态变化 我的要求是在同一个图中同时显示交互和状态变化。可能吗 关于这一点的任何建议,哪种UML图适合于此?在状态图中对您的状态进行

我的需求:我想根据下面描述的案例,提出一个合适的UML图。我需要知道哪个UML最适合这种情况

  • 案例:两个对象A和B以“应用程序表单”的形式相互交互。对象A中的某个事件触发对象B的状态变化。两个对象都为用例相互交互

  • 我尝试使用状态图,但它失败了,因为在这里,两个对象相互作用来改变一个对象的状态,而状态图只适合描述一个对象的状态变化,而不显示与另一个对象的相互作用导致状态变化

    我的要求是在同一个图中同时显示交互和状态变化。可能吗


    关于这一点的任何建议,哪种UML图适合于此?

    在状态图中对您的状态进行建模:(对象/对象状态)

    例如:
    状态(A/未初始化),(A/已初始化)


    UML为每个行为使用两个不同的图,一个用于状态()和一个用于交互(或交互)

    由于类的接口在其状态改变时不会改变(by),因此从调用方的角度来看,交互不应该真正改变,当然,内部可能会发生各种事情,但这并不重要

    我对此建模的方法是描述对象所处的状态以及将出现的场景。这将导致一些交互,并可能导致状态更改。然后选择一个新场景,或者使用前一个场景的结束状态作为起点,或者描述一个新的开始状态

    通过这种方式,每个场景都得到了明确定义,交互图显示了对象是如何交互的,高亮显示活动状态的多状态图可以显示状态的变化,从而显示不同对象的行为

    没有一个图表能够完美地将两者结合起来,因为其中一个(状态机)是一个静态图表,显示了所有可能的选项,而另一个描述了交互


    当然,您可以按照交互类型图中的不同对象的建议(ObjectA/State),使用创造性的命名,但这不会产生非常清晰的画面。这里您要描述的是一个故事,一系列事件,以及这些事件如何影响对象的不同状态。因此,您的场景是高层次的故事,通信图是更详细层次的故事,状态机图是特定情况的快照。

    状态图、序列图、通信图和@jessehouwing的整个答案都很好,但我认为有一种更简单、更自然的方法:

    (1),图3。提交费用

    注意,这是活动图。当前的UML表示法略有不同。虚线表示
    对象流
    :第3.90.2.2章对象流…输入到动作或从动作输出的对象可以显示为对象符号。A. 虚线箭头从动作状态绘制到输出对象,虚线箭头从输入对象绘制到动作状态。同一对象可能是(通常是)一个动作的输出和一个或多个后续动作的输入

    (2)


    演示如何将对象状态和
    UML活动图结合起来的示例。这些图片是活动图,橙色矩形突出显示具有状态的对象(处于[某些状态]的部分)所在的点。紫色矩形显示了被抢劫的作者。

    更适合于:你的答案是正确的,实际上我在自己的版本中使用了它。但就目前而言,它有点生。你有什么要补充的吗?我会考虑一下。安布勒的建议实际上是个非常糟糕的主意。他引入了两个非UML符号(活动图中的虚线箭头,以及表示同一实体的两个状态的两个UML对象的概念),但没有解释它们,这违背了使用标准化符号的目的。如果您决定使用这种性质的快捷方式,您必须用大量的文本注释您的图表,否则实际了解UML的人最多也不会理解,或者最坏也会完全误解。@Uffe这是一个很好的观点。事实证明,虚线箭头表示UML1.4中的对象流(我现在在编辑的答案中对此进行了澄清)。同样的图表也在UML圣经中使用,Tom Pender,John Wiley&Sons©2003,附录A:UML 1.4符号指南,图A-44。所以虚线箭头现在已经过时了,好吧,表面上的改变,但你所说的问题“两个UML对象代表同一实体的两个状态”是什么意思?通常你会在图表上粘贴一次
    文档
    ,然后将所有箭头指向它,可能会用函数调用来注释箭头。现在,该图有一个文档的4个不同实例,这不是真的,事实上,只有一个。@jessehowing它是一个活动图。文档(或对象)在活动之间流动,它自然会显示很多次,甚至总是在它离开一个活动进入另一个活动时。我会将一个
    Document
    作为参与者放在序列图中,但在活动图中有控制节点和对象节点流过()