【发布时间】:2025-11-30 10:15:02
【问题描述】:
我不明白“对象类之间的 CBO 耦合”的真正含义。我发现的定义太短了,以至于我觉得我遗漏了一些东西,所以如果你能帮我举个例子就好了。
这是我找到的定义: “对象类之间的耦合是对其耦合的其他类的数量的计数。”
提前致谢。
【问题讨论】:
标签: oop decoupling coupling
我不明白“对象类之间的 CBO 耦合”的真正含义。我发现的定义太短了,以至于我觉得我遗漏了一些东西,所以如果你能帮我举个例子就好了。
这是我找到的定义: “对象类之间的耦合是对其耦合的其他类的数量的计数。”
提前致谢。
【问题讨论】:
标签: oop decoupling coupling
对象之间的耦合 (CBO) 是对耦合到特定类的类数量的计数,即一个类的方法调用另一个类的方法或访问另一个类的变量。这些调用需要在两个方向上计算,因此类 A 的 CBO 是类 A 引用的类集和引用类 A 的类的大小。由于这是一个集合 - 每个类仅计算一次,即使引用在两个方向上运行,即如果 A 引用 B,B 引用 A,则 B 只计算一次。
这是这里给出的定义 - www.virtualmachinery.com/sidebar3.htm
链接中有更多详细信息 - 以及对 Chidamber 和 Kemerer 指标的有趣一般性讨论 - CBO 是这些指标的一部分。
【讨论】:
耦合是指类 (A) 依赖(了解、要求、使用)另一个特定类 (B)。这意味着当您更改 A 使用的公共成员 B 时,您也必须更改 A。您希望类型之间的耦合度较低,这样您就可以更改类而不会产生很多副作用。通常,耦合“来”与不良封装在一起,因此您将拥有 A 知道的信息,这些信息应该是 B 私有的。
有些类型足够通用(如 C# 中的 List),您可以直接使用它们而不必担心副作用。但是,无论您为自己的应用程序定义什么类,您都需要注意这些可能会改变。所以在很多情况下,你对 B 的某些行为(或属性)更感兴趣,而不是 A 使用整个 B。在这些情况下,最好提取一个接口(以抽象所需的行为)然后 A 只知道关于抽象,而 B 将实现它。这允许您拥有多个具体的实现(每次处理数据库、网络、导入/导出等事务时很有用)并且 A 不会知道 B。
因此,A 可以在不知情的情况下使用 B、C、D 等中的任何一个,只要它们实现了接口,并且您可以更改 B、C、D 中的内容,只要这不违反公共合同(接口) .
虽然我们通常希望我们的类是解耦的,但具有凝聚力(如协同工作),但在许多情况下,耦合不会真正伤害到您,因为解耦可能需要更多的努力而不是提供价值。由开发人员确定这些情况并做出正确的决定。但是,这是有经验的,所以在此期间,尽量不要将你的课程过多地结合起来。
【讨论】: