gpt4 book ai didi

oop - OOP : multiple, 中的抽象但相当不同的上下文?

转载 作者:行者123 更新时间:2023-12-04 15:51:28 25 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.

4年前关闭。




Improve this question




我一直在对 OOP 概念进行一些研究,并且在尝试理解抽象到底是什么时遇到了一些问题。我已经阅读了许多关于该主题的 Stack Overflow 帖子,但还没有真正找到令人满意的答案。

我已经看到很多关于抽象和封装之间差异的讨论,并且很自然地开始考虑抽象,即隐藏特定类的工作方式并通过类 API 提供抽象。以下是一些引导我朝这个方向发展的帖子:

  • Best voted answer refers to functions being Abstract. The very next answer starts talking about abstract classes...
  • Best voted answer seems to refer to exposing through the class API while the next two goes off in an Inheritance setting. Third answer even suggests Composition and Aggregation is considered an Abstraction

  • 然而,当我阅读更多帖子时,我注意到在继承上下文中描述抽象的答案,特别是使用接口(interface)和抽象类来提供某个实体(类)的抽象。我假设以这种方式给出的抽象将允许开发人员根据该抽象概述的“指南”适本地扩展新对象。以下是一些将我引向这个方向的帖子:
  • First couple of answers talk about Abstraction in an abstract class/interface setting, while some down the line start talking about exposing classes through APIs
  • Top two voted answers refer to abstract classes/interfaces

  • 我不确定我是否完全错过了这里的重点,但它变得非常令人困惑,因为每个答案似乎都给混合添加了轻微的变化。我绝对明白为什么这两种上下文在面向对象编程中都至关重要,但我真的想要一个清晰的抽象定义。

    这让我明白了我的观点:抽象在多种情况下是否有效?抽象是否描绘了这两个概念?
  • 隐藏“不必要的细节”,就像通过接口(interface)和
    抽象类
  • 为要通过接口(interface)和抽象类创建的类提供抽象。我们可以提供IPet的接口(interface)它将作为 Dog 的抽象类(class)。此外,我们可以提供 Animal基类作为抽象类提供更高层次的抽象。这可以让我们使用多态性并允许属于我们的 Animal 的不同类。抽象以相互交互。
  • 通过类 API 公开类来抽象类的实现
  • 给定一个 Dog类,我们只需要知道它有一个 feed()函数作为其 API 的一部分,并调用该函数来喂它而不知道喂食实际上是如何完成的。这提供了 Dog 的抽象。类,让我们轻松地与类交互

  • 我上面包含的链接之一包含 Matthew Watson 的以下引用:

    "The problem is that there are no precise definitions for these concepts, and the words themselves have multiple meanings even within the context of object orientation."



    只是抽象是如此抽象,甚至定义也是抽象的:P?感谢您提前提供任何指导!

    编辑:我对 SO 比较陌生,并不真正了解“主要基于意见”标志的含义。我看不出这个问题比关于 SO 上的抽象的一系列问题更有效。我认为它会被认为不那么基于意见,因为我实际上是在指出我认为抽象在其中有意义的两种不同背景。我看到很多问题只是问抽象是什么,我认为这是一个更广泛的问题问题比我在这里。

    最佳答案

    对我来说,抽象是 oo 最美丽的概念之一,这实际上是使程序语言非常接近人类思维的原因:我们人类总是想要分类。想想一辆车:你的车。让我们在银行家在贷款的情况下询问你的 Assets 的情况下接近那辆车:你会说你有 Assets (最高抽象级别):一辆昂贵的汽车、一辆家用汽车、一栋房子、一艘船等. 它们都有特定的值(value)。然后假设对话的上下文切换到对那辆车有个人兴趣的银行家,因为他自己就是一个汽车狂。现在将更详细地描述汽车,您可以看到定义的不同抽象级别:具有品牌名称的跑车,以及更多特征。

    在设计期间,您的兴趣在于抽象级别:您想用它做什么,即它的上下文。因此,我们将具有抽象级别: Assets 、汽车(以及船和房屋)、SportCar、FamilyCar。等等。上下文不应该有比它需要的更多的细节,这就是你在设计阶段所关心的。

    在实现阶段,您将通过封装属于这些级别的属性来实现这些抽象级别。例如。 Asset 有一个值,其中 Car 有颜色,而 SportCar 可能有一些 FamilyCar 没有的特定特征。

    因此,关键区别在于:设计时间与实现时间。

    这篇博文详细描述了差异:
    http://javarevisited.blogspot.be/2017/04/difference-between-abstraction-and-encapsulation-in-java-oop.html

    这是 stackoverflow 上的另一篇文章:What's the difference between abstraction and encapsulation?

    希望这可以帮助。

    关于oop - OOP : multiple, 中的抽象但相当不同的上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48040592/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com