18

像Sonar这样的代码质量度量工具确实提供了深入到一个类并找出以下数量的能力:

  1. 传入(传入)耦合
  2. 传出(传出)耦合

这两个参数是什么?你能用一个简单的人为例子来描述吗?

4

4 回答 4

30

根据维基百科

传入耦合(Ca):其他包中依赖于包内类的类的数量是包责任的指标。传入=传入。

传出耦合(Ce):包中的类所依赖的其他包中的类的数量是包对外部性的依赖的一个指标。传出=传出。

因此,如果您有具有以下结构的类(或包或其他):

class Foo {
    Quux q;
}

class Bar {
    Quux q;
}

class Quux {
    // ...
}

然后FooBar每个有一个传出耦合,并Quux有两个传入耦合。

于 2013-03-07T14:02:29.210 回答
13

既然你提到了声纳,这里是他们的文档页面提供的定义

  • 传入耦合:类传入耦合是衡量有多少其他类使用特定类的量度。
  • 传出耦合:类传出耦合是衡量特定类使用多少不同类的量度。
于 2013-03-08T08:09:17.683 回答
10

耦合是依赖关系的一种度量。

传入耦合:

  • 谁取决于你
  • 衡量有多少其他包使用特定包。
  • 传入的依赖项。

传出耦合:

  • 你靠谁
  • 衡量特定包使用了多少不同的包。
  • 传出依赖项。
于 2018-01-17T16:52:27.647 回答
0

其他用户已经从定义的角度给出了答案。在这里,我给出了用于包级粒度的传入耦合 ( Ca )传出耦合 ( Ce )的示例。

假设package1有 3 个类(即ABC),而package2有 2 个类(即PQ)。对于 package1,A类有 2 个出边,B类有 1 个出边,C类有 1 个入边。类似地,对于 package2,P类有 2 个入边,Q类有 1 个入边和 1 个出边。[见图]。

传入和传出耦合

要计算包的Ca,请计算包中依赖于它的类的数量。您可以对该包的所有类一一进行,然后合并依赖类。

要计算包的Ce,请计算所分析包中依赖于其他包的类的数量。计算该包的所有类,然后取联合。

所以,计算如下——

包1

Ca = {} union {} union {Q}  
   = {Q} 
   =  1

Ce = {P, Q} union {P} union {}
   = {P, Q,}
   = 2

包2

Ca = {A, B} union {A}
   = {A, B}
   = 2

Ce = {} union {C}
   = {C}
   = 1

传入耦合和传出耦合也用于计算封装的不稳定性 ( I )。不稳定性是传出耦合 (Ce) 与总封装耦合 (Ce + Ca) 之间的比率。公式是

I = Ce / (Ce + Ca)

不稳定的值在0到1之间。向1的值表示不稳定的包(即容易改变),向0的值表示稳定的包。

对于此示例, Instability for package1 = 2/(1+2) = 0.67 并且,

Instability for package2 = 1/(2+1) = 0.33

因此,我们可以通过测量传入和传出耦合得出结论 package1 比 package2 更不稳定。

有关其他信息,您也可以查看本文

于 2021-09-07T14:54:34.727 回答