抽象的就像没有太多细节一样。这是表达“我们含糊其词”的正式方式。
说:“我有一种上班的交通工具。”比“我有一辆我开车去上班”更抽象。当然,某个地方有某个东西确切地知道你要做什么去工作。这是关于不必确切知道到处是什么。这种想法称为抽象。
使用方法:
大多数 OOP 语言中的抽象类或父类是集中可重用通用方法的地方,并为更具体的方法提供接口,这些方法的代码驻留在更具体的类或子类中。
所以如果我提供一个名为的抽象类Transportation
with a takeMeToWork()
你可以调用它的方法takeMeToWork()
任何从运输业继承并期望最终投入工作的东西。你不会知道你是否正在服用Car
or a Bicycle
去工作,但你会去工作。Transportation
只会承诺会有一个takeMeToWork()
方法。它不会定义它是如何工作的,事实上只有在提供了一个Car
or Bicycle
确实如此。
如果你要求每一种形式Transportation
有相同的饮料杯架,您可以放一个useCupHolder()
Transport 类中的方法一次,无需再次编写。它总是在那里以完全相同的方式工作。根据语言或语言版本,该技巧可能不适用于界面或“特征”。除了提供默认实现之外,抽象类与特征没有太大区别。这个问题 https://stackoverflow.com/questions/1991042/scala-traits-vs-abstract-classes处理这些差异。
欣赏这个比喻的问题在于,除非你处于它被证明有用的情况,否则很难理解其中的要点。现在听起来可能像是很多花哨的难以理解的东西,只会让解决任何问题变得更加困难。这确实是事实。除非您发现自己正在使用足够复杂的代码来利用它并掌握抽象,否则这只会使事情变得更加困难。一旦你得到它,一切都会变得更容易。尤其是当您不单独编写代码时。下一个比喻不是经典的,但它是我最喜欢的:
为什么我们的汽车上有引擎盖?
(Or bonets http://www.english-test.net/forum/ftopic38797.html对于你们非美国人)
没有它,汽车就可以正常行驶。没有它,所有很酷的引擎东西都更容易获得。那么它是做什么用的呢?没有引擎盖,我可以坐在发动机缸体上,将一个轮子塞进齿条和销轴,抓住油门,然后驾驶汽车。现在我可以做一些很酷的事情,比如以每小时 50 英里的速度更换机油。
多年来我们发现,人们在没有量油尺在脸上的情况下驾驶确实会更舒服。因此,我们给汽车安装了引擎盖,并提供了加热座椅、方向盘和加油站。这让我们感到舒适,并防止我们的裤腿被风扇皮带卷住。
在软件中,我们提供同样的抽象事物。它有多种形式,抽象类、特征、外观模式等。即使是最简单的方法也是一种抽象形式。
您要解决的问题越复杂,使用一些明智的抽象就会越好。而且,你的车装上引擎盖看起来更酷。