oop - 封装、数据抽象和数据隐藏的精确解释

标签 oop encapsulation abstraction data-hiding

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

最佳答案

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

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

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

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

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

关于oop - 封装、数据抽象和数据隐藏的精确解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8755666/

相关文章:

c++ - 基类声明虚函数,其参数类型取决于实现类

java - 如何以静态和非静态方式使用枚举

c++ - 继承 : Access both private and public parts of another class

abstraction - 如何识别代码过度抽象?

c# - 如何在各种ORM( Entity Framework 和Dapper)之间创建抽象层?

c - 如何在不使其成为全局的情况下共享硬件抽象结构

Javascript私有(private)变量和参数有什么区别?

java - 我的程序中有一个错误,提示错误 : class, 接口(interface),或预期的枚举。该怎么办?

java - 使用 getY() 和 getX() 计算 2 点之间的距离

perl - 为什么将 Perl OO 简单地用作数据封装技术?