【问题标题】:What exactly does the return line (dotted line) represents in a sequence diagram?返回线(虚线)在序列图中究竟代表什么?
【发布时间】:2011-02-25 10:55:12
【问题描述】:

我们应该在哪些步骤中使用序列图中的返回线?

<- - - - - - 

【问题讨论】:

  • 我已经用我的 cmets 在你的 seq 图和问题上更新了我的答案

标签: uml sequence-diagram


【解决方案1】:

返回线表示从方法/函数调用返回的控制流

对于返回结果的方法/函数,它表示正在返回一个值。

例如

    result
<-------------

否则,对于 void 方法/函数,它只是箭头

<-------------

对于异步调用,由于调用者不会控制被调用的方法/函数,我只会在返回结果时使用返回行(例如非 void 方法/函数)

希望有帮助

编辑

这是我为搜索用例创建的序列图示例 example of a sequence diagram I created for a search use case http://web10.twitpic.com/img/107669708-1d6f9df82534756bfe2a684d4480cc43.4c00f3b0-full.png

请注意,匿名用户只进行异步调用,因为作为人类,他们不会将控制权交给应用程序,因此没有返回箭头

还要注意 search() 调用的返回箭头,它返回 'results'

最后,创建箭头( ------|> )没有返回箭头,因为它们隐式返回实例化对象

编辑 2

针对您更新的问题:

我不会为用户的操作设置返回箭头,例如 login(),因为结果不会以与对象相同的方式返回给用户,而是通常输出到某种 UI。另一种看待它的方式是,用户在程序的范围之外,所以直接返回结果是没有意义的。

根据您的图表,我的解释(在一种伪代码中)是:

class User{
    public void login()
    public void sendEmail()
}

class Patient{
    public void getPatient()
}

class Doctor{
    public void getDoctor()
}

class Appointment{
    //This method returns something, but it's not clear what, so I assumed a boolean
    public boolean checkAvailability()
}

如您所见,除了其中一种方法之外,所有方法都不会返回任何内容。如果那是您想要的,那很好,但我怀疑情况并非如此。

我还怀疑您不打算将 sendEmail() 方法放在 User 类中。

您还应该考虑 checkAvailability() 返回时发生的情况,因为控制流似乎返回给 User,然后莫名其妙地跳回 Appointment

【讨论】:

  • 序列图中的对象应该总是对应于类图中的一个对象,还是可以包含更多?
  • 它们通常对应于类图中的一个类,是的。我还应该注意,演员(匿名用户)应该被描绘成一个火柴人,但我用于此的程序还不完全支持 UML2
  • 好吧,根据这个,我现在感觉我的处境很糟。我试图建模的内容如下:用户以患者(角色)身份登录系统以要求预约。患者应输入医生,然后约会。系统应验证该日期的可用性,如果可用性应创建新约会并向用户发送电子邮件。如果用户以医生(角色)身份登录,它会有所不同,但现在我不想包含该电子邮件我不确定是否可以
  • 我知道您想要达到的目标,但现在没有时间提供我的建议。希望你能等到周日我才能给出合适的回应
  • 好吧,也许不是。但是,我认为我们开始偏离最初的问题。您应该考虑发布一个新问题,询问处理/设计您描述的用例的最佳方法(如果您确实在一个新问题中提出它,如果您在评论中链接到我可以在我回来时查看它)
【解决方案2】:

表示操作的返回信息。可以使用该符号指定返回值。

【讨论】:

    【解决方案3】:

    简单示例:

    club                       member
      |
      |           getName()
      '------------------------>.
                                |
                                |
           result: "lee"        |
       <- - - - - - - - - - - - '
    
     String memberName = member.getName();
     //memberName now contains "lee"
    

    虚线箭头

    【讨论】:

      猜你喜欢
      • 2011-07-31
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      • 2016-04-21
      • 2020-11-08
      • 2017-03-20
      • 2015-08-18
      相关资源
      最近更新 更多