1

这可能是重复的问题,但我还没有找到答案。

链接 1

封装:

封装是使类中的字段成为私有并通过公共方法提供对字段的访问的技术。如果一个字段被声明为私有,则类外的任何人都无法访问它, 从而隐藏了类内的字段。因此,封装也称为数据隐藏

链接 2

封装:

“它 [...] 是指围绕一些事物集合构建一个胶囊,在这种情况下是一个概念障碍。” — [Wirfs-Brock 等人,1990 年]

“作为一个过程,封装是指将一件或多件物品封装在 […] 容器内的行为。封装作为一个实体,是指容纳(包含、封装)一件或多件物品的包装或外壳。”

“如果封装是‘与信息隐藏一样’,那么人们可能会提出‘所有被封装的东西也被隐藏’的论点。这显然不是不正确的。”

我应该和哪一个一起去?还是我误解了定义?

4

4 回答 4

3

主要的一点是,这并不重要。任何人都可以用稍微不同的方式定义一个术语,并且通常不同的作者会根据他们使用这些术语的各种上下文来调整含义。

试图弄清楚哪一个是“正确的”,哪一个是“错误的”,你不会得到任何启发。断章取义的引用尤其缺乏信息。

重要的是在不参考用来指代它们的词汇项目的情况下理解潜在的想法。

于 2013-09-24T11:34:48.030 回答
2

对于封装的定义是否应包括数据隐藏存在分歧,因此这将是一个严格的意见答案。我相信后一种定义更正确,因为数据隐藏并不是面向对象编程所独有的。它是一个单独的功能,不排除封装,即函数/方法与一组变量的绑定。事实上,数据隐藏是 C 和 Pascal 等语言早期模块化编程的标志。

于 2013-09-24T11:42:47.680 回答
1

第一个定义非常以 Java 为中心。第二个更通用。两者都是正确的。至于选哪一个,这是一个主观问题。由于两者都是正确的,我建议您选择您喜欢的那个...

于 2013-09-24T11:34:56.080 回答
0

封装不仅仅是数据隐藏。它将内部数据表示实现与公共接口解耦。多亏了封装,只要不破坏接口契约,就可以在外界不知道的情况下更改内部实现。所以我会说封装=数据隐藏+实现隐藏。

于 2013-09-24T12:34:03.733 回答