什么是 C++ 中的数据隐藏? 抽象和封装解释

已发表: 2021-05-24

目录

数据隐藏简介

数据是程序中最敏感和易变的组成部分,如果被操纵,可能会导致错误的输出并损害数据的完整性。 这就是数据隐藏至关重要的地方。 在技​​术术语中,数据隐藏也称为信息隐藏,是一种固有的面向对象编程机制 (OOP),用于向最终用户隐藏内部对象细节。

数据隐藏的基本目标是隐藏类内的数据以防止未经授权的访问,并避免类外不必要的渗透。 数据隐藏保证了受限的数据访问,以确保对象完整性并防止对相关程序进行意外或有意的更改。

简而言之,数据隐藏会占用程序代码的某些部分,并从对象成员中屏蔽它。 如果对象成员试图访问隐藏数据,程序将返回错误。 这是为了确保程序员避免连接到已隐藏的错误数据而引入的一种警告机制。 往往是隐藏在用户端没有可预见需求的内部组件。

数据隐藏、数据抽象和数据封装

C++ 中的数据隐藏与其他两个 OOP 属性——抽象和封装密切相关。

数据抽象

数据抽象是一种仅向最终用户公开相关程序接口并隐藏更复杂和复杂的实现细节的机制。 让我们考虑一个现实生活中的例子,以便更好地理解。 考虑你的电视。 您可以打开和关闭电视、更改频道、调节音量以及添加外部组件,例如 VCR、DVD 播放器和扬声器。 但是你不知道电视的内部机制。

你不知道它是如何接收信号、翻译它们并最终显示输出的。 因此,电视是内部实施和外部影响分离的一个很好的例子。 通过数据抽象,可以保护类实现免受意外错误的影响,并根据不断变化的需求或错误报告进行演变,而无需用户级干预。

数据封装

数据封装是指将数据及其相关功能捆绑到一个称为类的单元中。 换句话说,如果你有一个来自对象外部的不可见属性并将它与提供读取或写入访问权限的方法捆绑在一起,你可以隐藏敏感信息并调节对事物内部状态的访问。

因此,根据您实现的方法,您有责任决定一个属性是否可以读取和更改,或者它是只读的还是根本不可见。

数据隐藏和数据封装的区别

在讨论 OOP 时,数据隐藏和数据封装通常可以互换使用,因为这两个概念共同完成了敏感信息的共同目标辅助看门人。 数据封装的想法无疑在功能上与数据隐藏相比,但由于它们工作在不同的层次上,所以它们在结构上是不同的。

尽管在本质上彼此相关,但数据隐藏和数据封装之间存在着至关重要的区别。

  1. 数据隐藏和封装的主要区别在于,前者侧重于增强程序中的数据安全性,而后者侧重于隐藏程序的复杂性。
  2. 数据隐藏侧重于类中对象成员的可访问性,而数据封装侧重于如何访问数据以及不同对象的行为方式。 封装主要是通过信息隐藏来完成的,而不仅仅是信息隐藏。 这意味着程序员隐藏了对象成员的结构并隐藏了其所有方法的实现。
  3. 数据隐藏侧重于限制程序中的数据使用以确保数据安全,而数据封装侧重于包装(或封装)复杂数据以向用户呈现更简单的视图。
  4. 在数据隐藏中,数据必须被定义为私有的。 在数据封装中,数据可以是公开的,也可以是私有的。
  5. 数据隐藏本身既是一个过程,也是一个技术,而数据封装是数据隐藏的一个子过程。

访问说明符

C++ 通过创建用户定义的类型(称为类)来支持数据隐藏,并通过扩展支持数据抽象和数据封装。 这个创建的类的成员范围由称为访问说明符的关键字定义。 通常,在一个类别中可以使用三种类型的保护或访问说明符——私有的、受保护的和公共的,用于构建类的封装能力。

访问说明符有助于定义如何从类外部访问类型的变量和函数。 通常,类中的数据是私有的,以消除意外操作实例,其操作是公共的。 但是,等级内的可访问性不受任何限制。

私有变量/函数:只能由定义为类的一部分的成员访问。

公共变量/函数:可以从程序中的任何位置访问。

受保护的变量/函数在类中是私有的,并且仅可用于派生类中的远程访问。

数据隐藏的应用

为了更好地理解数据隐藏,让我们考虑以下示例。 考虑到您是程序员,让我们假设您声明了一个名为“CheckAccount”的类,其中您已通过术语“Balance”定义了一个数据成员,该术语指的是用户的银行账户余额。

在此特定示例中,数据成员“余额”是敏感信息。 尽管您可能会提供外部应用程序访问权限以查看此敏感信息,但您很可能不会让此外部应用程序更改存储在成员“余额”中的数据的属性。 这个结果可以使用数据隐藏来实现,更具体地说,是通过使用私有访问说明符来控制的。

  1. 数据隐藏通常在不可预测和敏感的数据上执行。 这种数据是有效和快速运行程序的基础。 由于访问不当,产生的数据更改数据是永久性的,并且要求程序员在进一步使用之前完全返工。
  2. 数据隐藏有助于保护班级成员免受无意的忽视。 一个类通常包含必须处于可靠状态的各种相关字段。 假设允许程序员直接控制这些字段中的任何一个。 在这种情况下,您可能会在不更改关键相关字段的情况下转换一个区域,从而使您的班级处于冲突状态。

数据隐藏的好处

数据隐藏的好处是多方面的:

  1. 它用于降低数据的不可预测性和数据复杂性。
  2. 它提高了程序的可重用性。
  3. 通过限制软件组件之间的相互依赖性,还可以降低系统复杂性以提高稳健性。
  4. 隐藏数据的物理存储设计。 这有助于清晰地定义界面,提高可读性和可理解性。
  5. 它提供数据保证,防止损坏和无根据的访问。 换句话说,它有助于隐藏重要数据,从而确保针对黑客的增强安全协议。 如果所有内部数据都公开,黑客很容易侵入内部数据并进行恶意更改以改变程序的功能。 隐藏数据使得破解代码变得更加困难,因为隐藏的数据对于班级的外部成员和黑客来说是不可见的。
  6. 封装的类简单明了,易于管理,便于应用程序的未来开发。

数据隐藏的缺点

数据隐藏的唯一缺点是额外的编码。 数据隐藏需要程序员编写更长的代码以在隐藏数据中创建所需的效果。

从世界顶级大学在线学习软件工程课程获得行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。

结论

数据隐藏类似于俄罗斯轮盘游戏。 在俄罗斯轮盘赌中,六个洞中只有一个有子弹。 让我们想象一下,这个镜头是一种可感知的数据威胁。 你愿意冒险吗? 可能存在对您有利的五种情况,但您能具体确定威胁吗? 答案是不。 所有的情景都承担着怀疑和恐惧的同等概率负担。 与其屈服于这种不确定性,不如采取反对数据威胁的立场。 隐藏数据进行卧底。

如果您有兴趣了解有关 Java、OOP 和全栈软件开发的更多信息,请查看 upGrad 和 IIIT-B 的全栈软件开发执行 PG 计划,该计划专为工作专业人士设计,提供 500 多个小时的严格培训, 9 个以上的项目和任务、IIIT-B 校友身份、实用的实践顶点项目和顶级公司的工作协助。

什么是面向对象编程中的封装?

封装是将数据和对数据进行操作的代码绑定在一起的一种方式。 它是一种用于隐藏数据实现细节同时将数据抽象暴露给外界的机制。 将信息隐藏在定义良好的接口后面的过程称为封装。 封装是面向对象编程的一个强大概念。 它是通过创建访问器函数向外界隐藏对象的内部数据和操作的过程。

什么是面向对象编程中的抽象?

抽象是面向对象编程中使用的一种技术,用于将类的接口与每个单独对象的实现细节分开。 这意味着可以在不更改使用该类的代码的情况下更改代码。 在面向对象编程 (OOP) 中,抽象表示可以操作但未明确定义的对象。 抽象是OOP的重要组成部分; 它是将类的接口与其方法的实现分离的过程。

面向对象编程中类和对象如何交互?

类和对象是面向对象 (OO) 编程的基础。 面向对象编程是一种编程范式,它使用对象和类对现实世界进行建模。 类是蓝图或模板。 它是对对象应该是什么的描述或规范。 它定义了特定类型对象的特征、行为和数据。 对象是类的实例或示例。 程序中的每一个对象都可以分为一个或多个类。 一个类可以继承另一个类的属性、方法和其他特性。 这称为继承。