|
基本概念
- 事物是指一切客观存在的物体和现象。
事物是指任何东西,这里主要指数据信息化了的事物。
- 事物具有状态和行为。
事物具有属性和子事物,属性是一般不需要细分的事物,子事物也是事物也可以有属性和子事物,所以事物的结构是树形结构。
事物的行为也是事物,一般行为是属于事物的,所以事物的行为也用事物的子事物来表示。
- 描述
一个事物是什么可以用其他事物或自身来说明,而说明一个事物是什么的事物就称为这个事物的描述者。
描述者能够起到对事物分类的作用,相当于面向对象中类的作用,可以描述一个事物的部分或全部的结构和行为,在面向对象中通过类可以实例化对象,而在面向事物里通过描述者可以构造新事物。
- 继承
一个事物可以继承除自身外的其他事物,从而拥有被继承事物的属性和子事物。
面向事物的特点
构造性是指任何事物都可以通过其他已知事物来构造,比如可以通过一个已知事物来构造新事物,或者通过一个已知事物来重构一个已存在的事物。
构造事物的过程和通过Schema创建XML类似,其中可以用旧的事物来解释新的事物是什么,比如通过User的Schema来创建一个XML,那么这个XML数据就是User,面向事物里也是如此。
任意事物都是通过一个事物(元事物)直接或间接的构造出来的,而通过元事物可以构建出元事物自身,所以面向事物具有完备性。
构造事物类似Schema创建XML,如果使用XML来相比,那么任意XML都可以通过它的Schema创建出来,而任意Schema的Schema都是相同的,那就是元事物。
任何事物都可以转化为动作(程序)来执行。
这是一个很重要的功能,不过这不是特意设计出来的,是误打误撞弄弄出来的,所以还一时想不起来为什么要这么设计,所以希望以后能够有有一个很好的解释。
描述是要说明一个事物是什么,有那些属性、子事物和行为,一个事物的描述也是事物,它可以是其他事物也可以是自身。
描述关系是从事物的构造引申出来的,我们称用于构造事物的事物为新事物的描述者,因为用于构造事物的事物至少能够说明新事物具有那些属性和子事物。
现在描述关系已经被泛化,即任意一个事物都可以作为一个事物的描述者。事物的描述关系可以随时修改的,一个事物可能是任意东西,所以一个事物可能会随着理解的深入而不断的变化。
事物的描述相当于面向对象中的类,类是对象的描述,从某些方面来说事物的描述和类的作用是一样的,只是在面向事物中描述者事物也是普通的“对象(事物)”,其他“对象(事物)”也可以是它的“类”,它也可以是其他“对象(事物)”的“类”。
任何事物都可以继承除自身外的任何其他事物,从而拥有被继承事物的属性和子事物。继承能够继承属性和子事物,所以也能够继承行为。
事物的继承关系是从定义元事物时引入的,主要是为了解决无穷的问题,这里泛化后作为了一般事物之间的关系。
事物的继承相当于面向对象的继承,从继承的角度看它们的作用几乎是一样的。
元事物和构造事物的方法
面向事物的核心是元事物,元事物是一个自身的结构为自身的事物,元事物表示的是事物的构造方法,所有的事物都是通过元事物直接或者间接的使用事物的构造方法而构造出来的,所以元事物是一个非常特殊的事物,而面向事物的所有概念基本都是从元事物引申出来的。
元事物使用XML表示大致如下:
<thing name="thing">
<attribute name="name"/>
<thing name="attribute">
<attribute name="name"/>
</thing>
<thing name="thing">
<attribute name="name"/>
<thing name="attribute">
<attribute name="name"/>
</thing>
<thing name="thing">
<attribute name="name"/>
<thing name="attribute">
<attribute name="name"/>
</thing>
....
</thing>
</thing>
</thing>
这是一个在每层节点都重复的有无穷深子节点的数据,这个数据我们称为元事物,它表示的是事物的构造方法,元事物可以用如下方法解释:
<thing name="thing"> //要构造一个名字为事物的事物
<attribute name="name"/> //要构造事物的一个名字叫名字的属性,就是要确定事物的名称
<thing name="attribute"> //要构造事物的一个名字叫做属性的子事物,就是要确定事物有那些属性
<attribute name="name"/> //要构造属性子事物的一个名字叫名字的属性,就是要确定属性的名称
</thing>
<thing name="thing"> //绿色部分是蓝色部分的重复,表示同上面的方法构造子事物
//因为是蓝色部分的重复,所以蓝色部分的子节点依然重复
//以上方法可以反复进行,即可以构造事物的多个属性和子事物(子子事物...等)
...
</thing>
</thing>
可以看出事物的构造方法就是对事物进行命名,对事物、事物的属性和事物的子事物命名,因任何东西都是事物,属性和子事物都是事物,所以以上可简化的说事物的构造方法就是对事物进行命名,这似乎和老子的“有名万物之母”挺像的。
元事物就是事物的构造方法,通过元事物构造元事物还是元事物自身,任何事物都可以通过元事物使用事物的构造方法直接或者间接的构造出来,所以这个构造方法是完备的。比如通过元事物我们能够构造如下事物:
<thing name="Person">
<attribute name="name"/>
<attribute name="age"/>
<thing name="Child">
<attribute name="name"/>
<attribute name="age"/>
</thing>
</thing>
通过以上事物,使用“认知的一般方法”,我们还可以构造如下事物:
<Person name="Tom" age="40">
<Child name="Smith" age="10"/>
</Person>
事物的构造方法的局限性
事物的构造方法并不是完整的算法,因为用于构造新事物的已知事物提供了新事物的属性和可能的子事物,但如何对新事物命名、如何对事物的属性赋值并不包含在事物的构造方法里。
但因为这种局限性,反而让面向事物就有的重要的实际意义,那就是即使是对事物的命名方法(对属性取值的方法)也是一种事物,我们可以把命名方法先构造出来,然后再去命名,这就形成了一个循环,而这个循环通常是发生在程序和外界交互的时候,这样就相当于程序在不停的学习了。
为了更形象的比喻事物的构造方法的意义,我们可以拿人来比喻,比如一个正常的人是有学习能力的,但如果把他一辈子关在一个黑屋子里,让他和外界永远隔绝,那么这个人对外界的世界将是一无所知的,他心中的世界永远只有黑屋子这么多。
所以事物的构造方法不是完整的,构造一个事物不是凭空构造的,它需要一个主体和客体,只有在主体和客体相互交互,才是完整的事物构造过程,而这正是我们创建智能系统的目标之一。
任意事物都可以通过元事物直接或者间接构建的证明方法
因为构建事物的方法类似通过Schema创建XML的过程,新的XML保留了Schema的部分信息,通过XML可以还原部分Schema,所以我们也可以通过事物来还原用于构建它的事物,其中还原的结果称为是这个事物的结构。
这种还原的过程是可以反复迭代进行的,即能够寻找一个事物的结构,也能继续寻找这个结构事物的结构,只要最能能够证明这种还原收敛于元事物即可。
以下我们使用XML来表示事物,那么事物的结构的定义是:
- 使用<thing name="xx"/>来描述事物的名称
- 使用<attribute name="xx"/>来描述事物的属性名称。
有了结构的定义那么可以寻找一个事物的结构了,比如:
<Person name="abc" age="40">
<Child name="efg" age="10"/>
<Child name="hij" age="14"/>
</Person>
以上事物的结构为:
<thing name="Person">
<attribute name="name"/>
<attribute name="age"/>
<thing name="Child">
<attribute name="name"/>
<attribute name="age"/>
</thing>
</thing>
以上事物的结构为:
<thing name="thing">
<attribute name="name"/>
<thing name="attribute">
<attribute name="name"/>
</thing>
<thing name="thing">
<attribute name="name"/>
<thing name="attribute">
<attribute name="name"/>
</thing>
</thing>
</thing>
通过这个寻找结构的方法我们可以计算任意事物的结构,那么将会发现任意事物的结构的结构都是元事物,因此可以说明通过元事物是可以直接或者间接的构建任意事物的。
edit
|