【发布时间】:2011-02-25 10:55:12
【问题描述】:
我们应该在哪些步骤中使用序列图中的返回线?
<- - - - - -
【问题讨论】:
-
我已经用我的 cmets 在你的 seq 图和问题上更新了我的答案
标签: uml sequence-diagram
我们应该在哪些步骤中使用序列图中的返回线?
<- - - - - -
【问题讨论】:
标签: uml sequence-diagram
返回线表示从方法/函数调用返回的控制流
对于返回结果的方法/函数,它表示正在返回一个值。
例如
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
【讨论】:
表示操作的返回信息。可以使用该符号指定返回值。
【讨论】:
简单示例:
club member
|
| getName()
'------------------------>.
|
|
result: "lee" |
<- - - - - - - - - - - - '
String memberName = member.getName();
//memberName now contains "lee"
虚线箭头
【讨论】: