2012-07-25 60 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如果一个父类包含被定义为不是私人的子类不会被紧紧包裹