2012-07-25 88 views
5

這是我的作業問題: 下列哪些類不是緊密封裝?緊密封裝類

class A 
{ 
    private int x; 
} 
class B 
{ 
    private int x; 
    public void setX(int x) 
    { 
     this.x=x; 
    } 
    public int getX() 
    { 
     return x; 
    } 
} 
class C 
{ 
    private int x; 
    private void setX(int x) 
    { 
     this.x=x; 
    } 
    private int getX() 
    { 
     return x; 
    } 
} 

我花了一些時間在coderanch上搜索,但無法獲得所需的東西。誰能幫幫我嗎?

我認爲是C類沒有嚴格封裝;因爲這些方法是私有的。關於A類,我覺得它不是隻封裝的。由於封裝的基本定義表明「您必須隱藏您的成員並向類用戶提供符合您需要的方法」。現在類A沒有訪問者 - 增變器方法。所以A不應被視爲封裝。但我不確定。如果我錯了,請糾正我。

+0

這大概一個成員變量不會幫助你,但這個問題是以荒謬抽象的方式提出的(大概是你的教官)。一個類只在暴露客戶端所需的接口時被嚴格封裝。如果不知道某個班級的目的,就不可能有意義地說出來。 – millimoose 2012-07-25 15:41:36

回答

1

你完全正確。 A類和C類都沒有被緊密封裝,因爲緊密封裝意味着私有域與公共獲取者和設置者配對。

+0

現在我很迷茫......因爲我有4個選項: 答:A類 B:B級 C:C類 d:以上 – user1500024 2012-07-25 15:35:46

+2

你的內部直接訪問意味着封裝沒有? – jeff 2012-07-25 15:38:47

1

您對封裝的定義是正確的。但我認爲你有點偏執。

封裝意味着你不讓別人直接訪問你的內部。您公開用戶功能並管理自己的內部。

因此,如果我是銀行賬戶 - 我有一個名爲總計的私人領域。我不讓用戶直接設置我的總數。相反,我公開退出(雙重)和存款(雙重),並根據需要管理總額。

不要掛在A只有私人會員。考慮這些類片段 - 就像沒有顯示用戶功能並嘗試再次回答。

+0

其實這個問題是在4個選項的招聘能力傾向測試中提出的: A,B,C或無。其中只有一個是正確的。那麼最正確的答案是什麼? – user1500024 2012-07-25 15:38:31

+0

@ user1500024在這些選項中?我會說None,因爲'B'暴露了它的所有內部元素,'A'和'C'沒有任何暴露,因此是沒用的。這就是說有一個參數可以用來回答「B」(因爲當它暴露'x'時它至少控制對它的訪問)。就像「A」和「C」有一個論點,因爲他們根本不暴露「x」。這只是一個荒謬模糊的問題。 – millimoose 2012-07-25 15:45:08

+1

我完全同意...我是設計這樣一個問題的人。 – user1500024 2012-07-25 15:47:26

4

在你的課堂中如何定義「緊密封裝」?據我所知,Google搜索沒有關於此的學術界或行業範圍的定義。

我可以爭辯說,每個類都封裝得很好,或者封裝得很差。爲什麼客戶端暴露於私有變量X的名稱?看起來不幸。爲什麼A類不公開任何功能? C只在應該使用它的域中暴露一個getter是否「正確」?

這個問題只是歪曲了封裝的概念。您無法通過「封裝驗證程序」例程運行代碼。這是一個人性化的設計決策,你可以在這個決策中說出那個被暴露的應該是那個而不是不應該的。從根本上說,這通常要求數據是私密的,但是一種方法應該是公共的還是私人的,完全取決於它實際上的意義和所做的。

0

我認爲在封裝的定義中提到了公共訪問器的必要性,因爲它只是有意義的,沒有其他原因。所以我會說緊密封裝的類是一個隱藏其成員的類,阻止其他類的對象直接訪問它們。就這些。我會去None,因爲所有這些類都封裝了,即使其中兩個沒有多大意義。

0

這裏B級將緊密封裝的,因爲按照定義,「如果一個類被使用私有變量&公共屬性宣佈,它被認爲是緊密封裝 」

0

你所有的上述類是緊密封裝。

當且僅當所有數據成員聲明爲私有時,才聲稱一個類被嚴格封裝。在這裏,我們不應該擔心公衆訪問者或mutators是否存在。

-1

一類被認爲是「緊緊包裹」,當且僅當每一個變量聲明爲私有。(不論是否含有吸氣二傳手方法還是不行。

在您的例子所有三類緊密封裝的,因爲每個類都有每一個變量爲私有。

0

所有由你所描述的三個類是緊密封裝。

我如果一個類只有私有變量而沒有其他公共變量,那麼一個類被認爲是緊密封裝的類。

它不依賴於getter或setter方法。

我們需要有getter和setter,因爲我們需要創建變量,以便我們可以在其他類或函數中使用它們。

因此,無論公共的getter和setter方法如何,所有這三個類都是緊密封裝的。

0

緊密封裝類意味着所有的成員變量聲明爲private因此所有的類都緊密封裝 NB如果一個父類包含被定義爲不是私人的子類不會被緊緊包裹