Database design 如何将包含多个操作的单个代码行转换为SD?

Database design 如何将包含多个操作的单个代码行转换为SD?,database-design,uml,sequence-diagram,Database Design,Uml,Sequence Diagram,以该代码行为例: event=eC.getEventRegistry.getEventByTitle((ListView.getSelectionModel.getselectedItem)) 事件是事件的一个实例eC是ExpressionCenter的一个距离,getEventByTitle是来自EventRegistry的一个操作,该操作在getEventRegistry()中被调用 我发现很难将此代码或任何长代码行翻译成序列图。更不用说多个操作参数了。如果将这些对象作为单独的变量调用,那么

以该代码行为例:

event=eC.getEventRegistry.getEventByTitle((ListView.getSelectionModel.getselectedItem))

事件
事件
的一个实例
eC
ExpressionCenter
的一个距离,
getEventByTitle
是来自
EventRegistry
的一个操作,该操作在
getEventRegistry()
中被调用


我发现很难将此代码或任何长代码行翻译成序列图。更不用说多个操作参数了。

如果将这些对象作为单独的变量调用,那么您的方法调用链与之没有什么不同,因此eC.getEventRegistry().getEventByTitle(…)与eC.getEventRegistry()和[return of getEventRegistry()]没有什么不同。getEventByTitle(…)在两行单独的代码上。因此,序列图可能如下所示:


当然,这里也有ListView.getSellectionModel.getsellectedItem,但为了简洁起见,我省略了它们——原理是一样的。

计算操作的顺序取决于您使用的编译器。不能作一般性发言。根据经验法则(需要通过查看编译器规范进行验证),您可以采取以下措施:

  • 点间距将从左到右进行计算
  • 在开始操作之前,需要评估操作参数
  • 实例引用将导致发送到实例的消息返回后面的任何操作/属性

例如,以下操作
A(B()).C()
将首先发出
B()
进行评估,并将结果作为参数传递给
A()
。该操作的结果是一个特定类型的动态实例(同样取决于编译器),它可以显示为一条新的生命线,例如作为
resulttofall:class
至于您将消息发送到哪里
C()

非常感谢!但是参数呢?类似于
getEventByTitle((ListView.getSelectModel.getsellectedItem))
这就是我在getEventByTitle()操作中假设的字符串类型。显然,您需要调用ListView.GetSelectionModel,然后[return of the that].GetSelectEdItem才能获得此结果。