我们假设我们有三个类A, B
和C
,以及一个类型为a
的实例(分别为b
/ c
) A
(分别为B
/ C
)。
假设b
是a
的属性,而c
是b
的属性。
在a
的方法中,调用以下内容:b.c.operation()
我们如何在序列图中表示这一点?
答案 0 :(得分:4)
根据Law of Demeter,对象应该只与其自己的邻居直接通信。所以在你的情况下,a根本不应该调用b.c.operation(),因为c不是的邻居。相反,B类应该为此提供接口,例如
doCOperation(){c.operation();}
这应该是应该打电话的。
所以操作顺序为beocomes:
b.doCOperation()
c.Operation()
内调用doCOperation()
并将结果返回给。现在快速浏览序列图,它应该更容易。
答案 1 :(得分:1)
在编程中,b.c.operation()
应该在班级中隐藏所有数据(应该是私人的)。
但如果我们有b.c.operation()
,则在编译器中它会更改为(b.c).operation()
所以你的代码等于这段代码:
t=b.c;
t.operation();
答案 2 :(得分:0)
这是你要找的东西吗?您可以在https://www.zenuml.com处尝试。