封装与数据隐藏
Encapsulation Vs DataHiding?
这可能是重复的问题,但我还没有找到答案。
链接 1
封装:
封装是使类中的字段私有的技术并通过公共方法提供对字段的访问。如果字段是声明为私有,类外的任何人都无法访问它,从而隐藏类中的字段。因此,封装也称为数据隐藏
链接 2
封装:
"它[...]指的是围绕一些事物的集合建立一个胶囊,在概念障碍的情况下">[Wirfs-Brock et al, 1990]
"作为一个过程,封装意味着将一个或多个物品封装在一个[...]容器内的行为。封装作为一个实体,是指容纳(包含、封闭(一个或多个物品的包装或外壳。
"如果封装是'与信息隐藏相同',那么人们可能会说'所有被封装的东西也被隐藏了'。这显然不是真的。
我应该选择哪一个?还是我误解了定义?
重点是这并不重要。任何人都可以以略有不同的方式定义一个术语,通常不同的作者会根据他们使用这些术语的各种上下文来调整含义。
你不会从试图弄清楚哪一个是"对的",哪一个是"错的"中获得任何启示。断章取义的引文尤其没有信息。
重要的是理解基本思想,而不参考用于指代它们的词汇项目。
关于封装的定义是否应该包括数据隐藏存在分歧,因此这将是一个严格的意见答案。我相信后面的定义更正确,因为数据隐藏并不是面向对象编程所独有的。 它是一个单独的功能,不排除封装,封装是函数/方法与一组变量的绑定。 事实上,数据隐藏是早期模块化编程的标志,如C和Pascal。
第一个定义非常以Java为中心。第二个更通用。两者都是正确的。至于选择哪一个,这是一个主观问题。由于两者都是正确的,我建议选择您喜欢的那个......
封装不仅仅是数据隐藏。它将内部数据表示和实现与公共接口分离。多亏了封装,只要你不破坏接口合约,你可以在外面没有人知道的情况下更改内部实现。所以我会说封装=数据隐藏+实现隐藏。
- 防止主数据类型C++的隐式转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在cuda线程之间共享大量常量数据
- C++将文本文件中的数据读取到结构数组中
- 只知道运行时的数据类型.如何将数据详细信息隐藏到使用它们的其他类
- pImpl、范围和隐藏数据成员
- 是否应隐藏所有数据成员
- 封装与数据隐藏
- 如何将隐藏的数据发送到 Pyqt 中的 QComboBOX
- 数据隐藏的原因
- 隐藏复合数据类型的某些字段,使其不被写入(或从hdf5文件中读取)
- 多态性和数据隐藏:基类是覆盖还是忽略派生类的访问限制?
- 在DDD中隐藏静态数据成员,或者只显示某些成员
- 如何使用英特尔预取pragma时,数据隐藏在一个对象
- 数据实际上是如何隐藏在类中的
- 在c++中隐藏数据