oop - 信息隐藏和数据抽象方面的区别?

标签 oop abstraction information-hiding

数据抽象和信息隐藏有什么区别吗?在查看了此链接中的所有答案之后,我感到更加困惑。
Abstraction VS Information Hiding VS Encapsulation
找不到任何区别。仅仅是我们可以将一个(信息隐藏)称为目标,将另一个(抽象)称为流程?但这对我来说不是令人满意的区别。此外,我知道封装是实现抽象过程的技术,我在这里吗?请解释确切的区别。

最佳答案

信息隐藏是设计者专门决定限制对实现细节的访问时。这是比面向对象设计要古老的原理,但经常被使用。

一个简单的示例是在C中定义常量,例如#define NAME_SIZE 15常量的代码(客户端)不需要知道其值,并且如果您(设计者)以后决定更改其值,也不会感到麻烦。他们不应该对实际上是15的事实做出假设,因为您可能会决定更改它。

抽象是在处理集合时,例如,汽车是对诸如底盘,马达,车轮等细节的抽象。抽象使我们能够以更简单的方式思考复杂的事物。

封装是我们决定组成抽象的元素的详细程度的方式。好的封装会隐藏信息,以限制细节。例如,我的汽车实际上包含了所有部件,但仅向我(驾驶员)提供了适合我需求的界面,而没有更多。我可以控制门,锁, window ,灯,号角,天窗,运动方向,加速,减速等。即使我可能很好奇地操纵所有这些东西的“操作方式”的细节,但封装可以防止我从看到更多。

如果我的汽车的实现发生变化(我从内燃机改为电动汽车或混合动力汽车),因为作为驾驶员,我只知道有限的界面,因此无需更改驾驶方式。抽象使我只知道自己在驾驶汽车,而不是几百种金属,橡胶等。

信息隐藏不属于汽车的一个例子可能是choke valve。我的 parent 告诉我,那些人过去常常在自己驾驶的汽车中工作……这是内燃机的细节,在电动汽车中没有用。

关于oop - 信息隐藏和数据抽象方面的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7234490/

相关文章:

c++ - 面向对象的方程式 API

java - 接受默认序列化时封装如何被破坏?

java - 在 jar 文件中隐藏类

python .sort() 对 __lt__ 的优先级高于 __gt__?

oop - "tell, don' t询问“是否适用于用户输入验证?

php - 使用 HTML5 本地存储镜像 MySQL 数据库架构以供查询

go - GO 中的开放式设计和可扩展性

java - Java 封装与信息隐藏与抽象与数据隐藏的实际示例

language-agnostic - 非虚拟和抽象方法的命名约定

interface - Golang 接口(interface)和接收器 - 需要建议