面向对象的概念:encapsulation
,data abstraction
和data hiding
是3个不同的概念,但彼此非常相关。因此,通过从互联网上阅读信息,我很难完全理解这些概念。在一个地方提供的信息与互联网上另一个地方的信息相矛盾。有人可以指导我一个清楚解释这三个概念的教程,并说明三者之间的区别吗?
答案 0 :(得分:3)
首先,不要过于雄心勃勃,正如你所说的这3个概念是相关的(特别是前两个),并且可以在许多情况下相互使用。正确使用它们比完整的最终定义更重要。
“数据隐藏”就是在客户端和实现(部分)之间设置隔离墙。模块的某些对象可以是模块的内部对象,对用户不可见。因此,这是一种避免依赖的方法。如果我不知道如何实现一件事,它的实现可能会改变。
“数据抽象”正在重新组合同一抽象下的不同类型的数据。它接近于协议的想法。您不知道对象是如何实现的,但您知道它遵循一个众所周知的协议,即一组适用于不同类型数据的方法。在python中,类似文件的对象就是一个很好的例子。在Java中,使用接口。这很好,因为你学的东西较少,也因为你可以在抽象级别检查一些属性,即在这种抽象下重新组合的所有类型的数据。
“封装”是指在简化其使用的对象周围放置一个shell。它与代码库中的对象可以在越来越低级别的层中重新分组的想法相关联。图层中的一个对象仅调用其下方的图层。例如,如果要在屏幕上绘制一条线,则线obkect可能只封装openGL上下文,像素抽屉和其他内容。这些较低级别的对象由线对象封装。请注意,当封装同时是不同层的一部分时,封装可以应用于同一个对象,不好但有时不可避免。例如,python中的类文件对象具有高级/封装方法(打开,关闭,读取)和低级别(搜索)。
就是这样。显然,每个的定义可能更广泛,但这些使三个概念更加不同。
答案 1 :(得分:0)
将数据和功能整合到一个单元中(称为 class)被称为封装。数据封装是最多的 一流的惊人特征。该数据无法访问 外面的世界,只有那些被包裹的功能 该类,可以访问它。这些功能提供了界面 对象的数据和程序之间。这种绝缘 程序直接访问的数据称为数据隐藏 或信息隐藏。 抽象是指代表基本特征的行为 不包括背景细节或解释。 类使用抽象概念并定义为列表 抽象属性,如大小,重量和成本,和 用于操作这些属性的函数。他们封装了所有的 要创建的对象的基本属性。该 属性有时被称为数据成员,因为它们成立 信息。对这些数据进行操作的函数是 有时称为方法或成员函数。 由于类使用数据抽象的概念,因此它们是 称为抽象数据类型(ADT