【问题标题】:What is abstraction? [closed]什么是抽象? [关闭]
【发布时间】:2011-10-25 02:07:22
【问题描述】:

我在流程中看到了抽象。 我在数据中看到了抽象。

我看到抽象正在失去不重要的细节。

我看到抽象是给一组元素一个名称并将它们视为一个单元。 (但我不知道为什么这被认为是抽象。所以,我需要澄清这一点)

我知道也有抽象的层次,虽然名字暗示了一些东西,但我没有一个实际的例子,我想不出具体的一个我对抽象的定义感到困惑。

有人可以写一篇全面的文章吗?刮那个。谁能给个全面的答案?

编辑:- 谢谢您的回答。 但是,我正在寻找一个通用的答案。 例如,我正在阅读一篇文章,其中将过程视为抽象。 但是,这里的答案是关于 C# 和 Java 中的抽象类(直到现在。) 再次感谢。

【问题讨论】:

  • 你让我读到“综合文章”请求。对于一个 SO 问题来说,这有点多。 (虽然我想没有人告诉 Eric Lippert。)
  • 综合文章,我的意思是综合回答,像一篇文章。
  • 可以命名的摘要不是真正的摘要。
  • @wajed 我给出的答案仍然适用。该过程以这样一种方式进行抽象,即可以在不影响用户的情况下更改其实现,并降低使用该过程的复杂性。

标签: abstraction


【解决方案1】:

抽象是隐藏实现的技术。在它的核心,没有更多的答案。抽象的大部分意义来自于它的使用方式和原因。

用于以下场景

  • 降低复杂性。 (创建一个简单的界面)
  • 允许在不影响用户的情况下修改实施。
  • 创建一个通用接口以支持多态性(对抽象层的所有实现一视同仁。
  • 强制用户扩展实现而不是修改。
  • 通过更改每个平台的实现来支持跨平台。

【讨论】:

    【解决方案2】:

    很简单,抽象是限制依赖的艺术。你依赖的越少,你就越抽象。例如,如果您编写 DirectX 渲染器,那么您就从您正在运行的显卡供应商和型号中抽象出来。如果您编写另一层,则可以与您正在运行的操作系统隔离。

    【讨论】:

      【解决方案3】:

      抽象是隐藏特定实现的细节并在实现之间共享通用细节。例如 java.util.List、java.util.ArrayList 和 java.util.Map。 List 是父级(抽象),ArrayList 和 Map 是具体的实现。

      每当您在不同类之间共享代码时,您都希望这样做,这样您就不会重复错误的代码。

      抽象在代码重用、动态行为和标准化方面非常有用。例如,您正在使用一个方法并且它接受一个列表,因此要使用此方法,您可以发送任何以列表为父对象的对象。现在在这个方法中,可能有不同的实现,具体取决于传递对象的类型,因此您可以在运行时实现动态行为。当您设计框架时,这是非常有用的技术。

      【讨论】:

      • 映射不是一个接口吗? :(
      【解决方案4】:

      我不确定您是否应该推荐书籍,如果可以,请告诉我,我将删除我的帖子,但我喜欢 Troelsen 的 Pro C#。抽象就像一个接口,但接口不允许您定义构造函数。是为了概括。就像我有一个网格,我想在其中显示一些用户字段。字段可以是文本、枚举、单值、多值。我用抽象字符串属性 DispValue 构建了一个抽象类 FieldDef。然后各种字段类型继承自FieldDef。在网格中,我有简单的字符串要显示。然后,当用户更新字段时,特定于字段类型的属性和方法就会暴露出来。另一个例子是所有哺乳动物都有共同的属性,但是当您向下钻取时,您会暴露更多属性,但是所有哺乳动物都有一个通用视图(界面),并且通过从哺乳动物继承,有一种方法可以搜索和显示所有哺乳动物共有的属性.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-07
        • 1970-01-01
        • 1970-01-01
        • 2016-06-23
        • 2012-05-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多