3

面向对象的概念 :encapsulationdata abstractiondata hiding3 个不同的概念,但彼此非常相关。所以我很难通过阅读互联网上的信息来完全理解这些概念。一个地方提供的信息与互联网上另一个地方的信息相矛盾。有人可以指导我看一个清楚解释这三个概念并指出三者之间区别的教程吗?

4

2 回答 2

3

首先,不要太雄心勃勃,正如您所说,这三个概念是相关的(尤其是前两个),并且可以在许多情况下相互使用。正确使用它们比拥有完整的最终定义重要得多。

数据隐藏”就是在客户端和(部分)实现之间设置一堵墙。模块的某些对象可以在模块内部并且对其用户不可见。因此,这是一种方式,一种避免依赖的方法。如果我不知道一件事是如何实现的,它的实现可能会改变。

数据抽象”是将不同类型的数据重新组合在同一个抽象之下。它接近于协议的概念。您不知道对象是如何实现的,但您知道它尊重一个众所周知的协议,即一组适用于不同类型数据的方法。在 python 中,类文件对象就是一个很好的例子。在 Java 中,使用接口。这很好,因为您要学习的东西更少,还因为您可以在抽象级别检查一些属性,即在此抽象下重新组合的所有类型的数据。

封装”是关于在对象周围放置一个外壳以简化它们的使用。它与代码库中的对象可以在越来越低级别的层中重新组合的想法有关。一层中的一个对象只调用他下层的对象。例如,如果你想在屏幕上画一条线,线对象可能只封装了一个 openGL 上下文、像素抽屉和其他东西。这些较低级别的对象被线对象封装。请注意,当同一对象同时属于不同层时,可以将封装应用于同一对象,虽然不好但有时是不可避免的。例如,python 中的类文件对象具有高级/封装方法(打开、关闭、读取)和低级方法(查找)。

就是这样。显然,每个概念的定义可能更广泛,但这使得这三个概念更加不同。

于 2012-01-15T15:42:30.650 回答
0

将数据和函数封装成一个单元(称为类)称为封装。数据封装是一个类最显着的特征。外部世界无法访问数据,只有那些封装在类中的函数才能访问它。这些函数提供对象数据和程序之间的接口。这种将数据与程序直接访问的隔离称为数据隐藏或信息隐藏。抽象是指在不包括背景细节或解释的情况下表示基本特征的行为。类使用抽象的概念,并被定义为一系列抽象属性,如大小、重量和成本,以及对这些属性进行操作的函数。它们封装了要创建的对象的所有基本属性。这些属性有时被称为数据成员,因为它们包含信息。对这些数据进行操作的函数有时称为方法或成员函数。由于这些类使用数据抽象的概念,它们被称为抽象数据类型(ADT

于 2013-01-24T16:02:19.173 回答