posts - 176, comments - 240, trackbacks - 0, articles - 7

[导入]关于结构

Posted on 2005-11-14 15:37 canonical 阅读(366) 评论(1)  编辑  收藏 所属分类: 设计理论

     所谓结构,简单的说就是一组关系的集合。(结构就是关系的说法就太过于简陋了)。在数学上,最基本的关系就是集合之间的包含(contains)关系,而等价(equivalance)关系,序(order)关系(坐标)等都可以基于包含关系推导出来。从集合论的角度上说,所谓的关系也是通过集合来刻画的(两元素相关指的是它们属于同一集合),而函数的定义就是集合之间的映射。因此,在集合论看来,一切都是集合,数据的结构与函数的结构,或者结构的结构的结构之间并无本质性的区别, 甚至数据与结构之间也存在着内在的统一性。一些我们早已默认接受的基本实体,在集合论的框架下也是通过集合的结构来刻画的,例如自然数1,2,3,这些数字本身也是通过一些复杂的构造过程来进行描述的,它们只是一些基本结构的速记符号而已。
    当然,世界并不简单。集合论所没有述及的一个事实是,集合的集合比集合本身要复杂。结构的级列也构成了复杂性的级列,每一个层次都比前一个层次要复杂的多。最明显的表现就是函数的总数比实数多。在现实的世界中,我们很多时候都是处在某一复杂性层次上,因而可以深切的感受到基本元素与结构,与结构的结构之间的这种深刻的差异。
   
    伟大的von Neumann在计算机世界中定义了两种基本的东西,数据与指令,在von Neumann体系架构下,两者的界限是明确的。CPU的存在定义了指令与数据之间的结合关系(apply), 而CPU的串行执行强制定义了指令之间的序关系(order)。在软件中我们通过函数封装定义了指令的集合,而这些集合之间仍然存在着由main函数所驱动的序关系。因为函数也是通过数据(代码)来表达的,因而在形式语义上,我们有可能证明能够表达的函数结构与数据结构是完全一致的(注,这方面我并无研究,也不太感兴趣)。但是现实情况下,我们对函数之间的结构的控制要弱于对数据结构的控制。最明显的,程序运行时,函数(指令)空间基本上是静态的,不变的,而数据空间则不断的发生着变化。现代软件系统中plugin, 动态配置,运行时java代码增强(enhance)等技术的不断发展正在逐渐缩小着这方面的差距。

    在数据结构方面,C语言中的Struct结构体是一个很大的进步。因为由此引出的复杂类型系统是对结构的一种抽象描述: 在编译期唯一的一个Struct定义可能对应着运行期的多个实例(instance)。而在引入模板(template)特性之前,每个函数定义都唯一的对应于一些二进制指令。类(Class)相对于Struct的突破之处在于它表达了函数(指令)与数据之间的相关关系。Class之间的关系构成结构的结构。在编译期,我们所面对的只是类型定义,因而处理的正是结构问题,此时并没有实际的数据实例。而传统上,编译期所处理的结构都是静态的,现在脚本语言 (script)与language oriented programming正在逐渐突破这一限制。编译期处理结构问题所造成的另外一个现实是,目前我们对于结构的描述必须基于类型系统来进行,一般情况下无法方便的单独定制实例的结构。
    函数在其本义上只是对数据的变换,从数据空间的角度看,函数可以被看作是数据之间的一种动态结构,其最终形态在运行时结合输入数据才展开。高阶 (higher order)函数接受函数作为参数,因而可以看作是对结构的变换。但无论如何,函数与过程化处理并不是一回事,只是在von Neumman体系下,可以观测到函数顺序执行才引入了时间概念。

Feedback

# re: [导入]关于结构  回复  更多评论   

2006-12-04 16:50 by javabeginer
什么意思??

只有注册用户登录后才能发表评论。


网站导航: