当前位置: 首页 > 知识库问答 >
问题:

抽象和封装之间有什么区别?

齐财
2023-03-14

在采访中,我被要求解释抽象和封装之间的区别。我的回答是大致相同的

>

  • 抽象允许我们以最简单的方式表示复杂的现实世界。它是识别一个对象应该具备的相关品质和行为的过程;换句话说,代表必要的特征而不代表背景细节。

    封装是一个从外部真实世界隐藏对象所有内部细节的过程。“封装”这个词,就像“封装”成一个“胶囊”。它限制客户端查看实现抽象行为的内部视图。

    我想通过以上的回答,面试官确信了这一点,但随后我被问到,如果两者的目的都是隐藏的,那么为什么需要使用封装。当时我没有一个很好的答案。

    我应该补充什么才能使我的答案更完整?

  • 共有3个答案

    孟宏才
    2023-03-14

    公开实体而不是实体的详细信息。

    “细节是有的,但我们不考虑。它们不是必需的。"

    各种计算:加法、乘法、减法、除法、平方、正弦、Cos、Tan。

    我们没有详细说明如何计算Sin、Cos或Tan。我们只展示了计算器和它的各种方法,这些方法将是,并且需要由用户使用。

    员工有:名字、姓氏、中间名。他可以登录(),注销(),工作()。

    员工登录时可能会发生许多过程,例如连接到数据库、发送员工ID和密码、从数据库接收回复。虽然存在上述详细信息,但我们将隐藏这些详细信息并仅公开“员工”。

    包围。将多个特征/功能视为一个整体而不是个体。这样外界就会直接引用那个单元,而不是它的细节。

    “细节在那里,我们考虑它们,但不展示它们,相反,我们展示你需要看到的东西。”

    我们不再把它叫做加法、减法、乘法、除法,现在我们把它叫做计算器。

    所有特征和操作现在都由员工引用,例如“John”。约翰有名字。约翰会做家务。John可以登录()。

    对外界隐藏实现。让外界看不到不该看的东西。

    “细节在那里,我们考虑它们,但我们不展示它们。你不需要看到它们。”

    你的要求:加法,减法,乘法,除法。你将能够看到它并得到结果。

    您不需要知道操作数存储在哪里。这不是你的要求。

    而且,我执行的每一条指令也不是您的要求。

    约翰想知道他的出席率。因此将调用GetAttendancePercentage()。

    然而,这种方法需要将数据保存在数据库中。因此,它将调用FetchDataFromDB()。FetchDataFromDB()不需要对外界可见。

    因此,我们将隐藏它。然而,约翰。GetAttendancePercentage()将对外部世界可见。

    抽象、封装和隐藏是相辅相成的。

    因为我们在细节之上创建抽象级别,所以细节被封装。因为它们是封闭的,所以它们是隐藏的。

    公冶昆杰
    2023-03-14

    它的简单!

    以电视为例——它是封装,因为:

    >

    隐藏的东西,如音乐、视频等,一切都捆绑在一个胶囊里,我们称之为电视

    抽象是指我们对某件事有一点了解,这可以帮助我们操纵一些我们不知道内部如何运作的东西。

    电视遥控器是抽象的,因为

    1. 使用remote,我们知道按数字键将更改频道。我们不知道内部实际发生了什么。我们可以操纵隐藏的东西,但我们不知道它是如何在内部完成的

    在编程上,当我们可以以某种方式访问隐藏的数据并知道一些事情时...是抽象的...当我们对它的内部结构一无所知时。

    没有遥控器,我们无法在电视上改变任何东西,我们必须看到它显示了什么,因为所有的控制都是隐藏的。

    宋耀
    2023-03-14

    抽象与分离接口和实现有关。(我们不在乎它是什么,我们在乎它以某种方式工作。)

    封装与禁止访问或了解实现的内部结构有关。(我们不关心也不需要看它是如何工作的,只需要看它是如何工作的。)

    有些人确实使用封装作为抽象的同义词,这是不正确的。你的面试官可能是这么想的。如果是这样的话,那么当你提到“封装”时,你们每个人都在谈论两件不同的事情。

    值得注意的是,这些概念在不同的编程语言中有不同的表示。举几个例子:

    • 在Java和C#中,接口(在某种程度上还有抽象类)提供抽象,而访问修饰符提供封装
     类似资料:
    • 问题内容: Java中的封装和抽象之间到底有什么区别?任何简短的例子也将不胜感激。 问题答案: 抽象和封装是两个很好的味道,它们在一起味道很好。 封装 可以最大程度地减少向代码用户展示的内容。该“用户”可以是您代码的其余部分,也可以是使用您发布的代码的任何人。 封装有一定的好处: 代码的用户不依赖于程序中可能更改的部分。当您更改程序时,他们不必更改代码 您可以更好地控制代码和状态在程序生命周期中的

    • 问题内容: 封装和抽象之间的确切区别是什么? 问题答案: 这里的大多数答案都集中在OOP上,但封装要早得多: 每个函数都是一个封装 ; 用伪代码: 这里,封装了平面中两点之间的(欧几里得)距离的计算:隐藏了实现细节。这是封装,纯净而简单。 抽象是泛化的过程:采取具体的实现方式并将其应用于不同的(尽管有些相关)数据类型。抽象的经典示例是C的qsort数据排序功能: 关于的事情是,它不关心排序的数据-

    • 问题内容: 我不清楚两者之间的区别。 谢谢 问题答案: 它们非常相似,但是存在一些重要的技术差异: 抽象类允许您为某些方法提供默认的实现,但是接口不允许您提供任何实现。 您可以实现多个接口,但只能从一个抽象类继承。 这些差异影响应使用两种技术的方式: 您应该使用接口来 定义合同 。 抽象类对于 重用代码 很有 用 ……但是请注意,它不是重用代码的唯一方法。您还应该考虑其他方法,例如遏制。

    • 信息隐藏和封装之间有什么区别? 我已经读过,封装意味着将数据和应该对其进行操作的过程捆绑在一起。如果是这样,那么下面的类是否实现了封装? 现在声明数据属性会实现信息隐藏吗?

    • 我今天有个面试。我有一个来自OOP的问题,关于封装之间的区别 我告诉她,封装基本上是绑定数据成员 在提出这个问题之前,我阅读了StackOverFlow上的其他线程,了解这两个OOPs概念之间的区别。但我发现自己无法说服面试官。 有人能举个最简单的例子来证明吗?

    • 我正在准备一次面试,并决定重温一下我的OOP概念。有数百篇文章可供使用,但似乎每一篇文章的描述都不一样。有人说 抽象是“识别具有系统变化的公共模式的过程;抽象代表了公共模式,并提供了一种指定使用哪种变化的方法”(Richard Gabriel)。 并通过抽象的类来实现。 另一些人说 抽象意味着只向对象的客户端显示必要的细节 而且 假设您的Employee类中有一个方法“CalculateSalar