对象之间的CBO耦合

时间:2014-12-16 23:01:19

标签: oop decoupling coupling

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

这是我找到的定义: “对象类之间的耦合是它所耦合的其他类的数量的计数。”

提前致谢。

3 个答案:

答案 0 :(得分:11)

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

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

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

答案 1 :(得分:4)

耦合是指一个类(A)依赖于(知道,需要,使用)另一个特定类(B)。这意味着当您更改A使用的公共成员B时,您还必须更改A.您希望类型之间的低耦合,以便您可以更改类而没有很多副作用。通常情况下,耦合'来'与错误的封装一起使用,因此您将拥有A应该是B私有的知识信息。

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

因此,A可以在不知不觉中使用B,C,D等中的任何一个,只要它们实现接口并且你可以改变B,C,D中的东西,只要这不会破坏公共合同(接口)

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

答案 2 :(得分:4)

以下是UML的一个示例,它补充了其他答案:

UML class diagram showing CBO for 4 different classes that are coupled in various ways

注意:

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