【发布时间】:2020-03-04 21:25:52
【问题描述】:
有一个类A、一个IB 接口和一个实现IB 接口的类B。类 A 有一个类型为 IB 的字段。在程序执行期间,该字段的值成为类B 的实例。这种情况如何绘制类图? A 和IB 之间是否存在“组合”关系,组合是A 和B 之间的关系,还是只是依赖关系?
【问题讨论】:
标签: dependencies uml composition class-diagram
有一个类A、一个IB 接口和一个实现IB 接口的类B。类 A 有一个类型为 IB 的字段。在程序执行期间,该字段的值成为类B 的实例。这种情况如何绘制类图? A 和IB 之间是否存在“组合”关系,组合是A 和B 之间的关系,还是只是依赖关系?
【问题讨论】:
标签: dependencies uml composition class-diagram
这取决于您要赋予构造的语言和/或语义。
使用基于引用的类的语言,如 java:
B 的实例始终可以共享,因此在 A 对象死亡后继续存在。这与 UML 中的组合相矛盾。 在具有基于值的类(如 C++)的语言中:
unique_ptr<IB>,您将表达一个构图。其他指针可能允许共享对象,因此正常关联将是更好的表示。 但是 UML 不是一种编程语言。它是一种建模语言。所以你应该在模型中表达你想要的语义。如果 IB 对象不希望被共享,并且不应该比 A 寿命长,那么组合适当地表明了这个意图。如果没有,请保持开放。
【讨论】:
the instance of B could always be shared and therefore continue to live after the death of the A object。如果只有A 拥有指向它的链接,垃圾收集器不会删除对象B 吗?我不知道在 Java 中是如何工作的,但在 .Net 中它是这样工作的。基于此,构成在这里吗?类A和接口有什么联系?组合还是联想?还是依赖?
Mediator 模式(也称为:Intermediary、Controller)来减少许多类之间的连接性,因为将这些链接移动到一个中介类中。因此,A 和 B 类之间没有严格的联系。这是组合 B 与 Mediator 和 a 对中介的依赖。