2011-04-20 106 views
0

假設我分別具有類A,B和C的doA(),doB()和doC()方法。 ()方法應該屬於類A.它必須從類A執行。如果一個方法doA()對A負責,它存在於類B中,而不是類A中。加上B的服務。這也代表了低凝聚力和高耦合對象的耦合

我的推理是否正確?

+0

多告訴我們; doA()實際上對A類有什麼作用?它是創建一個A還是消耗一個A或更新一個A還是什麼? – 2011-04-20 16:34:29

+0

A類是信息專家。它是一個董事會對象。 doA()表示getSquare()方法。而B類表示Square對象。 – user478636 2011-04-20 16:39:05

回答

1

一個類有最大凝聚力如果它的所有方法都在它的所有成員變量上運行。

public class MyClass 
{ 
    private int value1; 
    private int value2; 
    private int value3; 

    public int Method1() 
    { 
     return value1 + value2; 
    } 

    public int Method2() 
    { 
     return value1 - value2; 
    } 

    // doesn't belong on this class 
    public int Method3() 
    { 
     return value3 * 2; 
    } 
} 

接頭有兩種形式:

  1. 一類使用另一個類的內部。這是耦合,但是在那種好它的組合物的例子在繼承

實施例:

public class MyClass 
{ 
    public void Method1() 
    { 
     var c = new MyOtherClass(); 
     c.DoSomething(); 
    } 
} 
  1. 更糟的耦合是這樣的,並且通常被稱爲Law of Demeter違反。

例子:

public class MyClass 
{ 
    public void Method1() 
    { 
     var c = new MyOtherClass(); 
     var size = c.Members.Size; 
     ... 
    } 
} 

在這種情況下,MyClass耦合不僅MyOtherClass,但結構的MyOtherClass的,這纔是你遇到麻煩,你的代碼變得硬脆。