6.2.1.1 类与集合
一个类型的对象是否构成一个集合。这一点在以往的文献中我们都没有看到清楚的表述。但从实际应用看,很多文献都是用公理集合论对类型进行研究,它们把类型已经当作了集合的理念进行处理。
一组对象是否构成一个集合,至少需要满足两点特性:①任何对象是否属于集合是可判定的。②集合中任何两个元素的等价性需可判定。一般的类型理论都要求构成类型的对象满足以上条件,这其实是对类型扭曲的理解。
类和集合在事实上是有很大差异的:类有标准的模范对象,而集合没有;集合重视的是自身的边界,而类型重视的是自身的内聚性,依靠与模范对象的相似程度来决定一个对象是否属于该类型。因此,一个实例对象是否属于某个类型,在不同的人看来,可能有不同的答案。这是因为不同的人对某个类型的模范对象可能有差异,判定距离的神经网络可能也一定差异。因此,类型的边界可以是模糊的。这种依靠中心模范对象来规范一个类的想法,我们称之为“中心模范论”。
传统类型论是否承认中心模范论?目前看来这是一个令人疑惑的问题。在面向对象技术中,class给出一个中心模范对象的框架,而不是一个真正的对象;也并不是通过中心模范的收敛距离来判定一个对象是否属于某个类,而是回到了命题逻辑的老路上。有的理论把集合当作类型,有的把代数当做类型,也有的理论把范畴当作类型。总之,传统的类型理论是否承认模范对象上是不明确的,指导思想在一定程度上是混乱的。
中心模范论的类型就是:符合模范对象所有必要特征的对象所构成的集(Collection)。这些必要特征可以构成平坦的离散范畴,也可以发展为由依赖关系构成所谓的链式结构。
6.2.1.2单继承与多继承的分歧核心
每一个对象都有唯一的直接类型。一个对象可以对应多重领域,却只能有唯一的类型,这是认知行为的客观规律。例如:没有既是马又是鹿的东西,否则就不会有“指鹿为马”这个成语了。传统类型论在这方面是完全正确的。
但是在非直接类型的关系上,继承关系是有分歧的,Small Talk学派坚持单继承原则,有的面向对象方法学采用多继承法则。这就导致一个对象的根类可以不唯一。单继承与多继承的争议迄今为止也没有结论,因为二者都有各自的优点,这个事实本身说明类型理论没有找到这个分歧的核心问题,所以表现出了争议不断的局面(如图6-3)。
图6-3 同一个问题的单继承和多继承模型
例如,图6-3中,某个“机修工人”的实例对象的在多继承的设计中,既是“人”的子类,也是“机械师”的子类;而在单继承的设计中,“机修工人”只是“人”的子类,“机械师”成为一种接口。如果某个对象通过继承传递,则其类型既是“人”又是“机械师”,这并不符合认知的规律。同一个对象,不能有两个及以上类型。我们仍然认为单继承更加符合认知的规律,因此,以后就以坚持单继承的传统类型论为代表,继续进行讨论。
一个对象可以对应多重领域,例如某人的类型是人类,但是他可以从事多种职业,例如消防员、治安员等。这些职业并不是类型,在中心模范论中,它们是领域。和类型相同的是,领域也有模范对象。一个模范对象是否代表类型或领域,取决于以下4个因素:(www.xing528.com)
①与其他模范对象的距离足够大,则可以代表类型或领域。否则其不能代表类型,也不能代表领域。例如:六年级三班是一个集合,但不能是一个类型,就是因为这个班的模范对象与其他小学生并没有明显的差异,也就是距离不够大,不足以建立一个类型。
②实例对象与模范对象的映射关系是相对固定的,或者在关注的期限内是永固的,则其代表类型。
③实例对象与模范对象的映射关系是可以动态建立或解除的,则其代表领域。
④模仿现象。当某个类型的对象需要模仿或扮演其他类型的对象时,称为“模仿现象”。程序对象是一种特殊的类型。当程序对象扮演某个类型的对象时,该类型被降格为领域。因为人们研究智能科学的目的,就是要用程序对象代表真实的认知对象,其是程序而不是所扮演的认知对象。例如:当某个程序对象在模仿“人”时,它显然不可能成为一个真实的“人”,无论它扮演得如何生动,都只是把自身投影到了“人”类型的语义空间之中,自己始终是“程序”,而不是“人”。这是一种特殊的类型到领域的降格。
因此,类型和领域是不同的,真实对象只能对应唯一的类型,即使采用了类型的继承传递之后,也只能对应唯一的上级类型。这符合人的一般的科学分类观念,明确地区分了类型和领域,消除了基础理论上的严重混淆。
6.2.1.3 不承认真实对象的信息稠密性
“世界上没有两片树叶是一模一样的”这是一个人所共知的哲学命题,其从一个侧面反映了真实的对象所具有的特征稠密性。也就是当人希望探索任何两个对象的差异时,总能找到可以区分二者的特征点。这个现象反映了真实的对象的信息是丰富而稠密的。程序对象模仿真实对象时,只是真实对象特征的一个简化反映,不可能包含真实世界对象的全部特征,只能包含其大尺度的、有限的特征集。
数学的研究对象不具有信息稠密性,传统类型论的研究思路是用研究数学对象的方法研究类型,因此不承认特征的稠密性。如果两个对象的特征元组相等,传统类型论会认为两个对象完全相等,就像两个集合相等的情形一样。而新型类型论的观点是两个对象特征元组相等,只能肯定二者的差异距离小,由于有信息稠密性的原理,深入挖掘还是可能发现有差异的特征,所以不能认定二者是等价的。
虽然人们必须利用数学对象研究真实对象,但二者有本质的不同。如果把真实对象和与之相关的数学对象置于一个范畴中,以分析过程作为态射进行讨论,数学对象是终结对象,而真实世界对象的特征反映出来的模范对象则不是终结对象。数学对象构成的系统在自在的公理体系之下运行,而模范对象的作用是不断用特征化的方法逼近真实的对象。
新型的类型论的主要研究对象是真实对象的类型问题,而不是数学对象,这是我们必须再次强调的观念。
6.2.1.4 不承认对象变体
应该注意到,当某个对象参与某个过程的执行,执行前的对象和执行后的对象却是不同的。当一个对象α参与了过程P的计算,过程执行完毕以后,对象α改变为α›。我们把对象在过程前提和后件的稳定状态称为“变体”。
一个变体对(α,α›)对应于一个转移过程实例P,所有的过程实例构成过程范畴,其特征就是程序语言的动作语义模型。传统面向对象模型认为对象=(ID,类型,数据成员,方法成员),是不承认变体的,只依靠ID来区别对象,并不能区别变体。因此,很多动作语义的观念无法反映出来,例如:标识产生变体对(α,β)的过程;在对象γ上执行某个过程(α,β)(γ)等等。不承认对象变体,也就等于不承认过程和函数的动态可生成性。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。