到底什么是抽象?

15-09-18 luda
    

到底什么是抽象?

我们经常说和听到“抽象”这个词,但是大家可能并不特别理解这个词到底是什么意思,至少大家对这同一个词的理解感觉起来有很大的不同,我想表述一下我的理解。

什么是抽象?

什么是抽象程度高?

什么是具象?

我天天说抽象,甚至我还在比较抽象的程度的高低,我费劲琢磨了但是还是没能琢磨准确大家脑子里的“抽象”一词到底是什么意思?

我觉得首先,很关键的一点是:现在我站在哪里?最关键的是观察者主体的位置现在处在哪里?这个首先关键的是参照点。

其次,令人迷惑的是我一定会运动。因为我是主体,我有主观能动性,我可以在问题空间中行走,但是很可能我自己行走到了哪里我并不清醒的知道,我自己当前糊里糊涂在使用的参照点可能已经随着我的移动而移动了然而我并不清醒的知道。即使我使用的那个参照点在整个问题空间中的位置没动,即使我没有不知觉的让它随着我的移动而移动,但是我移动了,我得换算坐标系。但是我不可能不让我的参照点随着我移动,因为我不可能节能高效的换算坐标系。

说抽象和具象,必须基于集合逻辑开始说起。

定义抽象为:在整个问题空间中的,范围相对更大的集合;

具象为:在整个问题空间中的,范围相对更小的集合;

首先我们站在整个问题空间外面观察。整个问题空间中的所以事物可以被抽象为:资源(空间) 和 变化(变化 = 运动 = 时间)。

这种抽象程度是第二高级的抽象,而最高级的抽象必须是“道”,必须是空是零蛋。然后我们把问题空间中的资源区分出Product、Customer、Order,这是在划分子集,这是在降低抽象等级,我站在问题空间之外。

抽象:

首先我站定一个空间位置,然后抽象四准则:

第一条准则:谁包含的问题时空范围大,谁更抽象,谁包含的问题时空小谁更具象;

第二条准则:抽象可以被进一步分为空间集合维度和时间集合维度的抽象,可以有空间集合的大小比较和时间集合的大小比较;

第三条:最高的抽象必须是“道”,必须是东方人的道不准是西方人的!

第四条:我站在计算机外时,01集合是最高的抽象而不是最低的抽象。

我可以站在问题空间外面观察,我也可以行走进入问题空间里面去,一旦我“行走”那么时间顿时出现,我行走我要换算坐标系,如果我不懂这些的话我的主体系统内部容易一团乱麻,很难有别人知道我天天挂在嘴边的抽象或具象甚至我还在比较它们的等级高低的抽象或具象到底是什么了。

    

luda
2015-09-19 12:28

"软件里的抽象一般是类设计,接口设计里面的,和你说的是两回事。"

其实我觉得是一回事的。类:1,用于构造对象用的模板;2,同一类型的对象的集合(class的意思是分类,对象的type维度可以认为是和对象的普通字段比如Id、Name维度完全一样的没有任何差别,只是对象的class type维度是被编译机运行时用的而普通字段如Name是被业务用的被程序员用的被用户用的)。

接口:接口虽然可以签订属性和事件,但接口主要用于签订方法。方法关注的是输入与输出,关注的变换。接口是方法的抽象,接口是同一签名且签订了接口协议的方法的集合。委托在对方法的抽象方面比接口又大了一些,委托不只可以容纳方法也可以容纳函数,也不需要显式的签订类似接口那样的协议。

软件里面的一切都是集合和集合的映射变换。集合是资源是空间,映射是函数是程序,函数和程序的执行是变换是运动是时间。