UML时序图,调用
UML sequence diagram, call
假设我们有三个 类 A, B
和 C
,以及一个实例 a
(resp. b
/c
) A
类型(对应 B
/C
)。
假设 b
是 a
的属性,c
是 b
.
的属性
在 a
的方法中调用了以下方法:b.c.operation()
我们如何在序列图中表示它?
根据 Law of Demeter,一个对象应该只与其自己的 邻居 直接通信。所以在你的情况下,a 根本不应该调用 b.c.operation(),因为 c 不是 a 的 neighbor。相反,class B应该为此提供一个接口,例如
doCOperation(){c.operation();}
这就是应该调用的。
所以操作顺序变成:
- a 调用
b.doCOperation()
- b 在
doCOperation()
中调用 c.Operation()
并将结果 returns 传递给 a.
现在看一下序列图,应该会容易得多。
在编程中有b.c.operation()
是不好的
All data should be hidden (should be private) in the class.
但是如果我们有 b.c.operation()
,在编译器中它会变为 (b.c).operation()
所以你的代码等于这个代码:
t=b.c;
t.operation();
这是您要找的东西吗?您可以在 https://www.zenuml.com.
试用
假设我们有三个 类 A, B
和 C
,以及一个实例 a
(resp. b
/c
) A
类型(对应 B
/C
)。
假设 b
是 a
的属性,c
是 b
.
在 a
的方法中调用了以下方法:b.c.operation()
我们如何在序列图中表示它?
根据 Law of Demeter,一个对象应该只与其自己的 邻居 直接通信。所以在你的情况下,a 根本不应该调用 b.c.operation(),因为 c 不是 a 的 neighbor。相反,class B应该为此提供一个接口,例如
doCOperation(){c.operation();}
这就是应该调用的。
所以操作顺序变成:
- a 调用
b.doCOperation()
- b 在
doCOperation()
中调用c.Operation()
并将结果 returns 传递给 a.
现在看一下序列图,应该会容易得多。
在编程中有b.c.operation()
All data should be hidden (should be private) in the class.
但是如果我们有 b.c.operation()
,在编译器中它会变为 (b.c).operation()
所以你的代码等于这个代码:
t=b.c;
t.operation();
这是您要找的东西吗?您可以在 https://www.zenuml.com.
试用