据我了解,抽象是我们使用的术语,它是指从更简单的事物中创建更多含义而不改变它的情况。它源自拉丁语动词abstrahere(“移开”)。例如,文本和二进制图只是二进制数据的一种抽象。因此,在计算机中,文本和位图存在于二进制数据之上(以二进制数据实现)。
我的问题是:相反的术语是什么?如果我想知道位图除了二进制数据以外还可以实现的其他更基本的东西(例如镶嵌的瓷砖或拼布被子的织物补丁),我需要什么?有话要说吗?
抽象具有泛化的内涵,而相反的过程就是泛化。IDK是否有帮助。
据我了解,抽象是我们使用的术语,它是指从更简单的事物中创建更多含义而不改变它的情况。它源自拉丁语动词abstrahere(“移开”)。例如,文本和二进制图只是二进制数据的一种抽象。因此,在计算机中,文本和位图存在于二进制数据之上(以二进制数据实现)。
我的问题是:相反的术语是什么?如果我想知道位图除了二进制数据以外还可以实现的其他更基本的东西(例如镶嵌的瓷砖或拼布被子的织物补丁),我需要什么?有话要说吗?
抽象具有泛化的内涵,而相反的过程就是泛化。IDK是否有帮助。
Answers:
实施。
抽象是简短的单词,是获得(简化的)真实世界事物模型并将其“压缩”为一个概念或想法的心理过程。
所以相反的是将一个概念或想法变成现实世界;-)
让我们从头开始。首先,抽象的确是什么?
进行编程时,通常必须解决非常具体的问题。
抽象的主要动机是,当您可能会遇到这样的情况,即您的程序将整个问题作为一个单元来处理,并且具有许多离散的小特性,需要引起注意和理解。这里的问题是,人类很难一次处理如此大量的数据。
为了使您能够完全理解实现想法所需的内容,可以将详细的解决方案提取到简化的抽象中。
例如,让我们看一下ORM(对象关系映射),其中SQL被抽象为对象。
为了在没有抽象的情况下将新项插入数据库,程序员必须了解SQL。因此,要插入新项目,程序员需要记住将新项目插入表中的SQL语法:
INSERT INTO Items (field1, field2) VALUES (value1, value2)
但是,有了抽象,程序员只需要知道他想做什么的想法即可。面向对象的抽象可能看起来像:
Item item = new Item(value1, value2)
您甚至可以更进一步考虑一下以下事实:SQL本身是大量复杂数据存储结构和算法的巨大抽象,而对于学习一种简单的声明性语言而言,这完全在您的指尖。
基于我们现在所定义的,抽象实际上就是使仅知道手头的典型概念就足够了,我们可以轻松地推论出抽象的反面实际上是esoterica,在这种情况下,使用或理解需要具备某种专门知识。主题的特点。
抽象确实来自abs-trahere,我会说最好将其翻译为“从...中提取”(尽管因此,直译可能会减少注意力)。我试图在博客文章中对此进行解释。
抽象是从具体事物中汲取精华的过程。具体事物通常非常复杂。例如,如果您看的是最近的椅子,实际上有很多细节。它的材料,结构,形状等。但是这些东西都不是真正必要的。重要的是,您可以坐在上面。
你的东西“抽象”,也就是你看到的,当你看到它。当您看椅子时,您会看到椅子。摔跤运动员实际上可能会看到武器。
因此,从给定的角度来看,抽象的结果确实是某些事物的本质。
对于位图或文本,抽象就是您将给定值视为满足特定目的的东西。根据手头的编程语言,您可以在语言语义中表达自己的想法。
但是对您而言,底层数据是否为“二进制”并不重要。如果它是从一卷辛苦的纸上实时读取的,它的数据也已经用13位打孔模式编码,那么它的效果也一样。你真的不在乎。
当然,使用存储在内存中的二进制数据实现具体的位图具有一些明显的优势,大多数人会更喜欢这样做。但是,例如,仍有许多方法可以对位图信息进行实际编码。而且甚至可以在彼此之间使用不同的方法。但是,除了一小段代码是根据许多约束选择表示形式之外,您不希望对位图的具体性质有任何了解。您只从自己的角度考虑重要的内容。在此示例中,可能有许多方法可以处理像素数据。
因为抽象实际上首先是一个想法(例如在某种事物的理想模型中),所以相反的概念可以称为“化身”。由于编程很少是一件刻板的事情,因此人们可能会使用“实现”,而抽象通常被表示为接口。
@Lior所说的具体化也是一个非常合适的词,即使它更多地侧重于手段(即具体化某些东西,这当然是不可避免的)而不是实际目标(即实现一个想法)。