Ell*_*est 6 oop inheritance abstraction design-patterns
我一直在进行有关OOP概念的研究,并且在试图理解什么是Abstraction方面存在一些问题。我已经阅读了许多关于该主题的Stack Overflow帖子,但实际上并不能确定令人满意的答案。
我已经看到了很多的讨论上的差异抽象和封装,自然开始约开始思考抽象躲藏方面特定类的作品,并提供通过抽象类的API如何。以下是一些引导我朝这个方向发展的帖子:
但是,当我阅读更多文章时,我注意到在继承上下文中描绘抽象的答案,特别是使用接口和抽象类来提供特定实体(类)的抽象。我假设以这种方式给出的抽象将允许开发人员根据此抽象概述的“准则”适当地扩展新对象。以下是一些引导我朝这个方向发展的帖子:
我不确定我是否会完全遗漏这里的要点,但是它变得非常令人困惑,因为每个答案似乎都给混音添加了些许变化。我绝对明白为什么这两种上下文在面向对象编程中都至关重要,但是我确实想要明确定义什么是抽象。
这使我明白:抽象是否可以在多个上下文中工作?不抽象描绘这两个概念?
隐藏通过接口和抽象类完成的“不必要的细节”
IPet该接口可以充当Dog类的抽象。另外,我们可以提供Animal基类作为抽象类,以提供更高级别的抽象。这可以让我们使用多态性,并允许属于我们Animal抽象的不同类彼此交互。通过类API公开类的实现以抽象其实现
Dog类,我们只需要知道它有一个feed() 函数作为其API的一部分,并调用该函数来对其进行馈送,而无需知道馈送的实际完成方式。这提供了Dog类的抽象,并让我们轻松地与类进行交互我上面包含的链接之一包含Matthew Watson的以下引用:
“问题在于这些概念没有精确的定义,并且单词本身甚至在面向对象的上下文中也具有多种含义。”
仅仅是抽象是如此抽象,甚至定义是抽象:P吗?感谢您提前提供任何指导!
编辑:我对SO相当陌生,并不真正了解“主要基于意见”标志的含义。我看不出这个问题比关于SO上的抽象的众多问题如何有效。我认为应该较少地基于观点,因为我实际上是在指出我认为抽象在其中有意义的两个不同上下文。我已经看到许多问题,只是问什么是抽象,我认为这是一个更广泛的问题。比我在这里的问题。
对我来说,抽象是面向对象学最美丽的概念之一,这实际上使程序语言非常接近人类思维:我们人类总是想要分类。想想一辆车:你的车。让我们以银行家在贷款中询问您的资产的方式来处理那辆车:您会说您拥有资产(最高抽象级别):一辆昂贵的汽车、一辆家用汽车、一座房子、一艘船等.它们都有特定的价值。然后假设对话的背景切换到银行家对那辆车有个人兴趣,因为他本身就是一个汽车迷。现在将更详细地描述汽车,您可以看到定义了不同的抽象级别:具有品牌名称的跑车以及更多特征。
在设计期间,您的兴趣在于抽象级别:您想用它做什么,即它的上下文。因此,我们将具有抽象级别:资产、汽车(以及船和房屋)、SportCar、FamilyCar。等等。上下文不应该包含比其需要更多的细节,这就是您在设计阶段所关心的。
在实现阶段,您将通过封装属于这些级别的属性来实现这些抽象级别。例如,资产具有价值,其中汽车具有颜色,而运动汽车可能具有一些家庭汽车所没有的特定特征。
因此,主要区别在于:设计时间与实现时间。
这篇博客文章详细描述了差异: http://javarevisited.blogspot.be/2017/04/difference- Between-abstraction-and-encapsulation-in-java-oop.html
这是 stackoverflow 上的另一篇文章:抽象和封装之间有什么区别?
希望这可以帮助。