当前位置: 首页 > 知识库问答 >
问题:

当组合一个接口时,组合是否适用于一个实现的类?

葛炯
2023-03-14

有一个 A 类、一个 IB 接口和一个实现 IB 接口的 B 类。A 类具有 IB 类型的字段。在程序执行期间,此字段的值将成为类 B 的实例。如何为这种情况绘制类图?A和IB之间是否存在“组合”关系,组合是AB之间的关系,还是只是依赖关系?

共有1个答案

巫马泓
2023-03-14

这取决于您要为构造提供的语言和/或语义。

在具有基于引用的类(如java)的语言中:

  • B实例总是可以被共享,因此在A对象死亡后继续存在。这与UML中的组合相矛盾。
  • 聚合将允许共享B。但不幸的是,聚合语义学在UML中没有很好地定义,因此是模棱两可的。
  • 一个正常的关联是正确和明确的。

在具有基于值的类(如C)的语言中:

    < li >组合将恰当地表示对象的联合生命周期 < li >但是,在您的情况下,IB可能是多体的。多态需要一个指针。如果您使用< code>unique_ptr

但是UML不是一种编程语言。这是一种建模语言。所以你应该在模型中表达你想要的语义。如果IB对象不希望被共享,并且不应该比A活得长,那么composition appropriate显示了这一意图。如果没有,保持开放。

 类似资料:
  • 本文向大家介绍实现一个寄生式组合继承相关面试题,主要包含被问及实现一个寄生式组合继承时的应答技巧和注意事项,需要的朋友参考一下

  • 我的用户控件上有两个组合框。我的目标是,当第一个被选中(里面有一个项目)时,第二个应该处于活动状态。以下是代码片段: 当第一个是项目选择时,如何激活第二个组合框?

  • 我有两个多维数组,我想通过使用其中一个数组的值和另一个数组的键来组合它们。数组如下: 阵列1: 阵列 2: 我想生成的结果数组如下: 有没有一个PHP函数可以用来完成这个任务?

  • # 11.5 测试一个值是否实现了某个接口 这是 11.3 类型断言中的一个特例:假定 v 是一个值,然后我们想测试它是否实现了 Stringer 接口,可以这样做: type Stringer interface { String() string } if sv, ok := v.(Stringer); ok { fmt.Printf("v implements Strin

  • 我有两个二维数组: 在第一个 2D 阵列中,我有 2 个子阵列(实际上有 16 个) - 每个产品一个。它们中的每一个都为同一产品列出了不同的名称(每个产品可以有 1 到 22 个备用名称)。 在第二个 2D 阵列中,我有 2 个子阵列(实际上也有 16 个) - 每个产品每个价目表一个。它们中的每一个都列出了来自前一个 2D 数组中相应子数组的同一产品(实际上为 10 个价格选项)的不同价格(实

  • 这是一个流行的问题,但我找不到一个满足我案例的答案。 我有布尔数组,其中我试着看一个数组是不是另一个数组的子集。 示例: 在本例中,不是两者的子集,但是的子集。 我尝试了一些从布尔的真值创建整数数组的麻烦尝试,但我仍然不确定如何验证它们是按顺序排列的(即一个子集)。 这个也没用。 目标是确定一个数组是否包含另一个数组的所有元素。在这种情况下,将索引4和5作为true,这在中也是true 但是如果我