我已阅读了近100多个链接,并探讨了有关SO的所有问题但是:(仍无法理解
数据隐藏和封装之间的区别
在阅读时{ {3}}我读了这一行
数据隐藏是封装,但并非所有封装都是数据隐藏
因此,经过大量的研究,我发现通过封装实现了数据隐藏或者它是封装的一种形式(我是对的)吗? 1)
2)如果是,则应用访问说明符是数据隐藏(以及封装)但是什么是仅封装但不是数据隐藏的机制?
答案 0 :(得分:4)
1)数据隐藏可以在没有封装的情况下实现,这样的一个例子就是类中的私有常量,并且任何'getter'都不会返回该常量。
2)应用访问修饰符可能是数据隐藏和封装。在公开数据时,您可以实现封装,但不能实现数据隐藏,但只能由getter和setter修改。
数据隐藏和封装是完全不同的东西,但相关的概念。数据隐藏不会泄露任何类用户的实现细节,而封装可以防止对数据进行意外更改。
我发现的最好的解释是在“以测试为导向的面向对象系统的增长”(第49页)一书中
作者所说的封装几乎总是一件好事,但数据隐藏可能在错误的地方,并且它们给出了以下示例:
以上两种声音都是明智的,直到我们从数据隐藏的角度来看它们
在缓存的示例中,隐藏它是有意义的。但是关于应用程序日志文件名,隐藏它是没有意义的。
答案 1 :(得分:0)
Abstaction
重点关注基本方面并隐藏背景/实施细节
专注于对象的外部视图 示例:Stack类[Abstaction专注于Push,Pop类提供的服务]
<强>封装强>
隐藏信息
封装是决定识别哪些状态和行为的决定 将信息隐藏起来,将对象放在一起 决定将哪些封装项目透露给用户 什么不被重新赐给用户
答案 2 :(得分:0)
封装隐藏复杂性。就像我们正在创建getter和setter ..
但数据隐藏意味着隐藏某些东西而在java中我们可以使用访问修饰符来完成,即