封装与数据隐藏

Encapsulation Vs DataHiding?

本文关键字:隐藏 数据 封装      更新时间:2023-10-16

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

链接 1

封装:

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

链接 2

封装:

"它[...]指的是围绕一些事物的集合建立一个胶囊,在概念障碍的情况下">[Wirfs-Brock et al, 1990]

"作为一个过程,封装意味着将一个或多个物品封装在一个[...]容器内的行为。封装作为一个实体,是指容纳(包含、封闭(一个或多个物品的包装或外壳。

"如果封装是'与信息隐藏相同',那么人们可能会说'所有被封装的东西也被隐藏了'。这显然不是真的。

我应该选择哪一个?还是我误解了定义?

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

你不会从试图弄清楚哪一个是"对的",哪一个是"错的"中获得任何启示。断章取义的引文尤其没有信息。

重要的是理解基本思想,而不参考用于指代它们的词汇项目。

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

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

封装不仅仅是数据隐藏。它将内部数据表示实现与公共接口分离。多亏了封装,只要你不破坏接口合约,你可以在外面没有人知道的情况下更改内部实现。所以我会说封装=数据隐藏+实现隐藏。