首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数据隐藏是封装,但并不是所有封装都是数据隐藏。

数据隐藏是封装,但并不是所有封装都是数据隐藏。
EN

Stack Overflow用户
提问于 2013-06-19 11:20:40
回答 3查看 4.1K关注 0票数 4

我已经阅读了近100多个链接,并探究了关于它的所有问题,但是:(仍然无法理解)

数据隐藏与封装的区别

在阅读这个答案时,我读了这一行

数据隐藏是封装,但并不是所有封装都是数据隐藏

所以经过大量的研究,我发现

1)数据隐藏是通过封装实现的,还是一种封装形式(我说得对吗)?

2)如果是的话,应用访问说明符就是数据隐藏(也是封装),但是只有封装而不是数据隐藏的机制是什么?

EN

回答 3

Stack Overflow用户

发布于 2013-06-19 12:06:58

简短的答案是:

1)可以在不封装的情况下实现数据隐藏,例如类中的私有常量,任何“getter”都不返回该常量。

2)应用访问修饰符可能是数据隐藏和封装。当您公开数据时,您可以实现封装,但不能实现数据隐藏,但只能由getter和setter修改。

长话短说:

数据隐藏和封装是非常不同的东西,但是相关的概念。数据隐藏是指不泄露类的任何用户的实现细节,而封装则防止对数据进行意外更改。

我对此的最好解释是在“测试引导的面向对象系统的增长”一书中(第49页)。

作者说,封装几乎总是一件好事,但是数据隐藏可能在错误的地方,他们给出了以下示例:

  • 在Loader类中封装缓存的数据结构
  • 在PrivacyPolicy类中封装应用程序日志文件的名称

以上两种方法听起来都是明智的,直到我们从数据隐藏的角度来看待它们。

  • 隐藏Loader类中缓存的数据结构
  • 在PrivacyPolicy类中隐藏应用程序日志文件的名称

在缓存的例子中,隐藏它是有意义的。但是关于应用程序日志文件名,隐藏它是没有意义的。

票数 4
EN

Stack Overflow用户

发布于 2015-06-08 16:51:13

Abstaction

  • 重点关注基本方面并隐藏背景/实现细节。
  • 重点关注对象示例的外部视图:堆栈类Abstaction侧重于类Push,Pop提供的服务
  • 抽象不允许捕获整个对象行为。
  • 它的重点是对象可以做什么。
  • 它帮助识别基于责任驱动方法的类,将系统分类为基于类执行的责任的对象集。

Encapsulation

  • 物体在单个单元中的捆绑状态和行为
  • 通过定义类标识状态和行为并将这两件事合并到类中来实现
  • 支持将对象的状态和行为保持在一起。
  • 它不隐藏实现细节,它的目的是识别状态和行为,并将这些事情保持在一起。
  • 它关注对象的内部视图,而abstaction则关注对象的外部视图。
  • 封装有助于实现节拍。

信息隐藏

  • 封装必须只允许显示基本服务,需要隐藏与封装相关的概念来隐藏对象的实现细节
  • 信息隐藏和封装是不同的。

封装是确定对象的状态和行为要放在一起的决定,而信息隐藏则是决定要向用户显示的封装项中的哪些,以及哪些不适合于用户。

票数 0
EN

Stack Overflow用户

发布于 2016-02-06 23:44:16

封装隐藏了复杂性。就像我们在创造更好的..。

但是数据隐藏意味着隐藏某些东西,在java中,我们可以使用访问修饰符来完成。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17189843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档