对象之间的CBO耦合

Abd*_*ebi 5 oop coupling decoupling

我不明白"对象类之间的CBO耦合"究竟意味着什么.我发现的定义太短了,我觉得我错过了一些东西,所以如果你帮我举个例子会很棒.

这是我发现的定义:"对象类之间的耦合是它所耦合的其他类的数量的计数."

提前致谢.

小智 12

对象之间的耦合(CBO)是耦合到特定类的类的数量的计数,即一个类的方法调用方法或访问另一个类的变量.这些调用需要在两个方向上进行计数,因此类A的CBO是类A引用的类集的大小以及引用类A的类.因为这是一个集 - 每个类只计算一次,即使参考在两个方向上操作,即如果A引用B和B引用A,则B仅计数一次.

这是这里给出的定义 - www.virtualmachinery.com/sidebar3.htm

链接中有更多细节 - 以及对Chidamber和Kemerer指标的有趣的一般性讨论 - CBO是这些指标的一部分.


Fuh*_*tor 6

这是UML的示例,它补充了其他答案:

UML类图显示了以各种方式耦合的4个不同类的CBO

笔记:

  • CBO不在乎依赖关系的方向。D的CBO为1,因为C依赖于CBO,即使D不依赖于其他类。B和C是类似的情况。
  • 可以通过属性(组成),关联,局部变量,实例或注入的依赖项(方法参数)进行耦合。


Mik*_*eSW 5

耦合是指一个类(A)依赖(知道、需要、使用)另一个特定的类(B)。这意味着当您更改 A 使​​用的公共成员 B 时,您也必须更改 A。您需要类型之间的低耦合,以便您可以在没有很多副作用的情况下更改类。通常,耦合“来”与糟糕的封装一起出现,因此您将拥有 A 知道应该对 B 私有的信息。

有些类型足够通用(如 C# 中的 List),您可以直接使用它们而不必担心副作用。但是无论您为自己的应用程序定义什么类,您都需要意识到这些类可能会发生变化。因此,在许多情况下,您对 B 的某些行为(或属性)更感兴趣,而不是 A 使用整个 B。在这些情况下,最好提取一个接口(以抽象所需的行为),然后 A 将只知道关于抽象,而 B 将实现它。这允许您拥有多个具体实现(每次处理数据库、网络、导入/导出等内容时都很有用)并且 A 不会知道 B。

因此,A 可以在不知不觉中使用 B、C、D 等中的任何一个,只要它们实现了接口,只要不违反公共合同(接口),您就可以更改 B、C、D 中的内容。

虽然我们通常希望我们的类是解耦的,但是是有凝聚力的(比如一起工作),但在许多情况下,耦合不会真正伤害你,因为解耦可能需要更多的努力而不是提供价值。由开发人员确定这些情况并做出正确的决定。然而,这需要经验,所以同时,尽量不要把你的课程结合得太多。