抽象与封装的区别

抽象与封装的关键区别

  • 抽象通过提供最必要的细节来显示有用的数据,而封装则将代码和数据包装起来以获取必要的信息。
  • 抽象主要关注“做什么”,而封装主要关注“如何做”。
  • 抽象通过提供更抽象的图景来隐藏复杂性,而封装则隐藏内部工作,以便您以后可以对其进行更改。
  • 抽象有助于将程序划分为许多独立的模块,而封装则易于根据新需求进行更改。
  • 比较封装与抽象,抽象在设计层面解决问题,而封装在实现层面解决问题。
  • 抽象隐藏了代码中不相关的细节,而封装则有助于开发人员轻松地组织整个代码。
Difference Between Abstraction and Encapsulation
Java 中抽象与封装的区别

抽象的定义

抽象是一种面向对象编程(OOP)概念,它只关注对象的相关数据。它隐藏了后台细节,并强调了关键数据点,以降低复杂性和提高效率。它通常只保留对特定过程最有用的信息。 抽象方法主要侧重于思想而不是实际功能。

封装的定义

封装是一种使复杂系统对最终用户来说更容易处理的方法。用户无需担心系统的内部细节和复杂性。 封装是一个将数据和操作数据的代码包装到单个实体中的过程。您可以将其视为一个保护性包装,可防止外部代码随意访问。

Abstraction vs Encapsulation
抽象与封装

抽象与封装的区别

以下是抽象与封装的主要区别

参数 抽象 封装
用途 抽象解决了设计阶段出现的问题。 封装解决了实现阶段出现的问题。
侧重点 抽象允许您关注对象做什么,而不是它如何做。 封装使您能够将代码和数据隐藏到单个单元中,以保护数据免受外部世界的侵害。
实施 您可以使用接口和抽象类来实现抽象。 您可以使用访问修饰符(公共、受保护和私有)来实现封装。
关注点 主要关注“做什么”。 主要关注“如何做”。
应用 在设计阶段。 在实现阶段。

为什么需要抽象?

以下是抽象对于面向对象编程至关重要的主要原因

  • 有助于简化领域模型的表示。
  • 抽象隐藏了代码中不相关的细节。
  • 抽象有助于您将程序划分为许多独立的概念。
  • 在使用 ADT(抽象数据类型)对象在不同情况下提供了最大的灵活性。

为什么需要封装?

封装的主要优点是

  • 提高了应用程序的可维护性。
  • 为用户提供了极大的灵活性,可以轻松使用系统。
  • 帮助开发人员更好地组织代码。
  • 使整体编码过程更轻松,因为您只关心另一个类做什么,而不关心它如何做。
  • 这种方法有助于开发人员更加“客观”和以结果为导向。
  • 封装的代码非常灵活,易于根据新需求进行更改。
  • 封装使单元测试更轻松。
  • 它允许您减少模块间的耦合,并增加模块内的内聚性,因为一个事物的各个部分都封装在一个地方。
  • 封装有助于您在不影响代码其他部分的情况下更改一部分代码。
  • 提高了应用程序的代码可读性。
  • 增强了安全性,并使应用程序的维护更加容易。
  • 封装接口只允许明确定义的交互。

抽象的例子

假设您要创建一个银行应用程序,并且被要求收集有关您客户的所有信息。您可能会收集以下有关客户的信息。

Example of Abstraction in OOP
OOP 中抽象的例子

但是,并非以上所有信息都创建银行应用程序所必需的。

因此,您需要从该池中选择对您的银行应用程序有用的信息。姓名、地址、税务信息等数据对于银行应用程序来说是有意义的。

Example of Abstraction in OOP
OOP 中抽象的例子

由于我们从更大的池中获取/删除/选择了客户信息,因此该过程称为抽象。

然而,一旦提取了相同的信息,就可以用于广泛的应用。例如,您可以对医院应用程序、求职门户应用程序、政府数据库等使用相同的数据,只需稍作修改或无需修改。因此,它就成了您的主数据。这是抽象的一个优点。

封装的例子

让我们以移动设备为例。借助移动设备,您可以执行各种功能,例如拍照、发送消息、录制视频/音频、访问网络等等。

上述功能是大多数智能手机的功能。但是,在使用此程序之前,您无需了解这些功能的内部运行细节。例如,您无需知道您的相机如何计算伽马校正或如何识别图像中的人脸。您只需要学习软件界面。这就是封装。