信息化的本质分享 http://blog.sciencenet.cn/u/Babituo

博文

面向资源应用软件开发心法:资源语言编程思想

已有 2111 次阅读 2015-1-5 16:11 |个人分类:面向资源软件开发方法|系统分类:科研笔记| 面向资源, 资源编程


资源语言编程思想

“面向资源”的语言范式

面向资源的应用软件开发方法,是以“资源”为唯一运维元素的开发方法。这意味着该方法的思想基础,是以“资源”作为最基本的原子概念,实现对软件开发活动与现实世界的社会活动的抽象统一的认识和描述的。可以说,面向资源的开发方法,是通过在“资源的抽象层次”的统一设计和调度,来实现现实世界和智能世界的协同运转的。

应用软件的资源,本质上是信息资源。也就是说资源的“实体”就是“信息”,资源是由信息聚合而成的“实体”,然后在这些实体之间设计和运转着一些静态的、动态的、多层嵌套的组合关系,就构成了软件的信息世界。所以,资源是用来观察、描述、构建和运转软件的信息世界的一种思考方法和语言范式。因此,面向资源开发方法中的资源描述符号和方法,就是一门同态描述信息世界和现实世界的编程语言。这门语言,必定有其独特的使用方式和方法。

动态组织的结构模式

“运动与变化”,是全人类无论是谁,从哪个方面,来认识世界的哪个部分或整体,都能共同得到的一个性质。假设能用“资源”这个名称来统称这个世界的基本组成事物,那么,这个世界就必然是一个在各个资源之间建立的动态关系的总和,这样,“资源”,看起来只是“事物”的代名词。在面向资源应用软件开发方法的语境中,“资源”还是人类创造的“信息世界”中的“事物”代名词,因为在信息世界中,如果把基本的组成要素还叫“事物”的话,总会让人感到有点不适应。不管怎样,重要的是要给这两个空洞的词汇赋予最少必须赋予的含义。“动态组织”应该会是这个含义的首选。“动态组织”的内涵,可充分地将资源概念引向结构化的运动和变化的理解。

对任何一个动态的组织,似乎总是可以放到这样一个语言框架下来得到描述,这个语言框架就是:目的-目标-功能-行动-实体。当然,在认识事物时,并不是对所有类型的“动态组织”,在这个语言框架的各个层次上,都可以被分配到同样多的内容。比如,生命组织和类生命的组织,分配重心偏左,而非生命的组织则偏右。但为了寻找一个统一的架构来对所有的“资源”或“事物”一视同仁的话,可能很难有第二个框架更适合来表达其“动态组织”的内涵。如果说,这个世界的本质,本身就是一道巨大的程序的话,那么,这道大程序,至少是要在这个语言框架的五个层次上,同时得到编写的。再如果,编写这道大程序的基本指令单元,可以是“资源”的话,也就意味着要问:能满足编写这道大程序的要求的指令系统,可能会是怎样的呢?

五层程序的实质

要回答资源指令系统必须满足的要求的问题,先要探究动态组织的五层程序的实质。然后才能设计和验证用来实现这些程序的“资源编程语言”是否能够一致地满足这些编程的需要。

实体的程序,是对实体相对处于静态的构建组成结构关系的编织;

行动的程序,是对实体之间交互操作的连接关系及其在时间次序上的编排。

功能的程序,是对实体行动被执行时反映在不同实体上的改变过程和效果的组合要求。

目标的程序,是对实体功能实施后反映在关键状态指标上的到达预定值点的时序要求。

目的的程序,是对实体在精神意识层面获得暂时的安定和满足状态的时机的安排。

显然,这五层的程序是各自独立、相互关联、逐层依赖-控制、并同时运转的。

实体的程序是行动的程序的基础,这意味着:只有在相互建立了广义的信息联络通道的实体之间才能通过广义的信息通信来实现交互的操作;而实体之间的交互操作,必定会改变相关实体的结构或外观,也就是会获得相应的功能效果;而功能效果的实现是以达到特定的目标次序来证明和检验的;按预想的方式达到了相应的目标,就能给有意识的主体带来目的上的满足感和安定感,当然,一个意识主体的目的的满足,可以、可能或必然(有意、无意或不可避免)同时会破坏另外一些的意识主体在目的上的满足感和安定感,就迫使另外的意识主体会做出行动,重新达到自己原来的,或新想的目的和新设的目标。于是,这道大程序就会“永不停机”地在五个层次上同时展开,不断运转下去......

有趣的是:虽然非生命形态的动态组织缺乏自我的目的性,也没有主动的目标状态,但它们并不是它们就绝对不会出现在目标层次和目的层次的程序中的。因为,除了在意识主体的这两层程序中,必不可少地会有非生命形态的动态组织参与外,当然,它们通常是被当作“客体”来对待的。事实上,是客观规律代表着它们背后的“主体意识”的。它们反而会在主体意识层的程序上表现出比那些所谓的“意识主体”更强的稳定性。这也是这个世界具有“可编程”特性的原因,否则,一切的“程序”都无从谈起。所以,这道“大程序”,是有目的地遵循自然规律的程序。当然,也可以是相反的,这样,这道大程序就可以很快坍缩到仅剩实体和行动层次的程序了——所有意识主体、包括人类都被这道程序消灭掉了。

所以,在这个大程序的编写中,我们最好还是把被我们“蔑视”为非生命的动态组织,当作一个强大的意识主体来对待为好。不要以为这个大程序很空洞,太虚无缥缈,实际每个人的一生的每一刻,都是这道大程序的一部分,而且,有可能永远影响着这道大程序的未来运行——即使生命个体逝去——发挥影响的不是其人体的物质残留,而是其留给这道大程序的信息遗产。

如果说,面向资源的开发方法有其目的的话,其目的就是:希望全人类的每个人都能为这道大程序留下有价值的信息遗产。

资源的结构

面向资源的应用软件开发中的资源结构非常简单,就是:一个成员集合。

任何一个资源,都是由多个不同数量种类的信息成员组成的一个张学文广义集合[1]

对资源的结构,形式化的表达如下:

R :={n1*IM1,n2*IM2,n3*IM3,...,nN*IMN}

其中:

R:表示任意一个资源;

ni:包含的某类信息成员的个数;

IMi:表示某种类型的信息成员。

资源的信息成员就是资源的属性参数成员。是具有某种参数类型的属性类型的取值,其参数类型作为系统存储和计算操作的依据,而属性类型则作为可理解的信息含义的标志。

具有这样的结构的资源,如何能够满足编写那道大程序的任何一小部分的需要?为简化起见,接下来探究资源是如何在“功能-行动”的双层上进行编程的。这两层,也是当前应用软件编程中,软件的逻辑内容的主要分布区域。以下通过资源编程和代码语言编程的对比分析,说明资源编程继承和发展了一般代码编程语言的全部语言功能要素,因而可期待资源编程能实现通用的应用编程。

功能-行动双层编程

一个功能是一组行动得到执行的外显过程和结果

仔细理解这句话,有如下几个方面的含义:

1.功能层和行动层的程序是不同层次的程序,需要严格区分。既不能在功能层的程序描述行动过程逻辑,也不能在行动层次描述功能的组织逻辑。

需要指出的是:对两个层次的程序不分开的混合编写的做法,在目前的面向对象编程方法和语言中是允许的,而且实际是大量存在的,因为这只取决于程序员的表达习惯。这使程序表现出如下的现象:在同一段程序代码中,我们总可以看见具有应用功能含义的函数过程的调用语句,又有操作数据参数等,系统的计算资源的语句出现。其中的函数和过程调用,就是功能性的语言,操作那些系统计算资源的语句,就是行动性的语言。实现这些函数或过程的那些段程序,则对应着每项功能的行动层的程序。这种不严格分开功能层程序和行动层程序的方法,确实给程序的编写带来了很大的自由,但实际效果上却是模糊了系统的层次性的边界,让系统的层次性耦合度很难得到控制。这也是造成应用软件系统程序维护困难的主要原因之一。

在目前的编程语言中,除非建立相应的编程规范,而程序员严格遵守这些规范,才可能编写出功能层和行动层分开的程序来。但事实上是不会有这样的规范出台并可以得到执行的。因为这样的规范,用在目前的编程语言环境中,对编程的行为本身造成了很大的自由度的约束。类似在允许有六个自由度运动的三维空间上,又只允许物体在分开的两组不同的自由度上作运动,这会让在空间内运动的物体“感到非常难受”。

目前的应对该问题的方法是靠软件的层次型的架构设计来解决。需要架构设计师在架构设计阶段就设计不同的功能集合的架构层次,然后让不同的程序编码活动分开来实现不同层次的功能,让底层的程序提供支持上层的程序的API接口。这样的策略是可以将系统的层次性耦合得到控制,但在系统层次性的功能构建和行动构建之间增加了人为的工作流程的约束:必须先完成架构设计,然后才进行编码。而这些约束,并不是构建行为本身就存在逻辑约束。带来的根本问题是:原本可并行的工作不得不串行进行。当然,由此带来的系列问题影响到软件项目的方方面面。

资源编程的思想和方法,通过为功能编程和行动编程提供“两个相互平行的编程空间”各自独立而又相互对应的双层编程方法来解决这个问题。由于是在两个不同的编程空间内进行编程,两个不同的空间可使用的“编程指令集”本身就代表了不同的语义:在功能层编程空间中,只有资源的功能性描述语句可用;而在行动层编程空间中,又只有资源的行动的操作指令可用。这样,在两个各自独立的空间内对编程的行为就不需要任何自由度的约束,这些约束转换成为编程环境本身的结构约束了。就好比:将“在一个花园里对不同的观赏需求设立由不同的观赏路径关口划分的禁区”的做法,改成“直接建设两个不同视角的风景的花园,比如一个地面,一个空中花园,对两个花园都不设立任何观赏禁区,但又有连接两个花园各对应景点之间的快速栈道,让观赏者可自由切换所处花园”的做法。

2.功能层是比行动层更高级的语义层。

日常说的:“你做这些事有什么用?”就表达了行动层和功能层之间的关系。“做这些事”就是行动层的描述,“有什么用”就是功能层的描述。而此处的“更高级”则有做两层的含义:首先,更高级,是对行为粒度上的集合后的粗化表达;其次是对一组关联的细粒度的行动集合的功用语义的封装表达。

功能层的程序,是纯粹的“有哪些用”的组合关系,和“怎么得到这些用”处是不同层次的表达,当然,这些“用处”的表达之所以会集中在一组相关的组合逻辑中,是因为它们都是为了达到同一个目标。而“怎么得到这些用处”则是围绕这个功能的一系列的行为的逻辑组合。

“一项功能”和“一个可分解为多个动作的大动作”的表达是不同的。不同在于,功能可以是,但不一定是对应“一个大动作”的。因为,通常意义的“一个动作”,是由一个实体做出的,而功能所含的动作集合,可以是多个实体的多个相关动作的逻辑组合。除非,参与功能的多个实体,可以理解为是共同组成的“同一个大实体”。而我们通常也正是:将“形成一组相关功能所需的参与共同度较高的一组实体的集合”,认识定义为是一个更大的实体的。而包含在更大实体定义之外的实体动作关系,则成为更大粒度实体上的动作关系。即使是这样,功能的含义也只是对这个大动作所能产生的作用的描述,而不是这个大动作本身。这就是所谓的“语义的封装”。

同样,在功能层的程序中,本身也存在小粒度的功能组合封装为一个大粒度的功能的嵌套表达。这种功能嵌套的表达,也和行动层的大小行动的嵌套表达没有强制性的直接对应关系。所以“嵌套结构”只是一种程序的结构特性,并不是行动层程序的专利,是多项行动形成一项功能的必要但不充分的条件。

3.功能之对应行动,不是动作逻辑上的对应,而是行为语义的对应。

这意味着“功能层的程序”,不是可直接进行操作的程序。只有行动层的程序,才是可直接进行操作的程序。执行行动层的程序本身,就同时是在“执行”对应的“功能层程序”,并没有单独的“功能层程序”的执行过程独立存在。

尽管“功能层程序”不是直接执行的程序,但由于它们对应着可执行的行动程序的每个功能单位。所以,在行动程序被执行的过程中,我们又确实同时可以观察到:一个“功能的程序”正在得到执行。

同样的道理,功能层程序之对应目标层程序,目标层程序之对应目的层程序,也有类似的“既封装了细粒度的行为,又转换了不同层级的语义”的作用,从而实现了最顶层的目的与最底层的实体操作的一致性和连贯性。

资源的操作指令和资源编程

资源作为实体的结构很简单,是一个关于信息成员的张学文广义集合。

而资源进行操作的指令也很简单,只有一个,就是:“连接”。

为什么会只有如此简单的一条操作指令?

因为对“信息成员”所能,所需进行的唯一的操作的方法,就是连接到其他信息成员。

这就是对资源行动层编程的唯一指令。

资源的一个行动,意味着,也仅意味着:连接多个不同资源的不同的信息成员。也就是使不同资源的被连接的不同的信息成员的信息一致。这非常类似语言代码编程中的“赋值”语句。本质上,连接,也是实现一种赋值操作。

我们不禁要问:如此简单的编程方式就能实现以往编程语言的同样功能,就能编写出同样功能的程序来吗?如果这样,其他编程语言的除赋值语句之外的,大量的功能性语句和结构性语句又有什么用处呢?

答案是:不要忘记,资源语言是建立在其他编程语言基础之上的更高级的编程语言。在行动编程的空间,相当于它只保留了代码编程语言的“赋值”操作,这种最少必须保留的操作。而代码编程语言的其他功能性语言,和其他程序的组件,API一样,全部都转换为可供使用的“资源组件”了。

不仅如此,其他代码编程语言的程序组件,不仅可以作为一个整体的资源组件来使用,而且还可以按组件的功能结构,“被拆解”为相应的“成员组件”,直到拆解到原始编程语言的最小的功能单位为止,而原始编程语言的最小功能单位,就是面向资源开发中的“原子资源组件”了。

所以,资源的行动层程序就是这样的:连接两个不同的资源信息成员,就代表一个原子行动,多个原子行动按一定方式组合,就构成一个小行动,多个原子行动和小行动按一定方式组合,就构成一个大行动。

而资源的功能层程序则是这样的:如果需要一个连接多个信息成员的动作组,那么,这个动作组会产生什么效果或代表什么变化的过程,直接给出效果和过程的自然语言描述名称就可以了,这样,将不同的动作组按不同的方式组合起来,自然就是将不同的功能组合起来的当功能了。

当然,也可以反过来:需要什么样的程序功能效果或变化过程,可以直接用自然语言来描述这些效果和变化过程。然后,在来寻找:要实现这些功能的话,需要,也只需要将些资源组件的哪些信息成员连接起来就可以了。

资源行动组的连接方式

在以往编程语言中,有几个程序结构语句,在资源编程中,被转换为几种不同的行动组合方式的动作,如:

“抉择”动作,代表if... Else...语句。代表根据一个“是否型”信息成员的值做出后续行动组的不同选择的操作。

“选择”动作,代表,case X of...语句。代表根据一组“是否型信息成员-行动组”中,按顺序检查信息成员值选择最先满足条件的行动组的选择操作。

“择进/择回”动作,代表While...DoDo...While语句。代表根据一个“是否型”信息成员的值做出后续是否重复进行一个行动组的执行的操作。

而每一个抉择、选择、择进/择回的操作,都有其实际的功能性含义,同样可以将其功能的描述作为功能层程序的内容。这样,上述的操作行动,同时也就是某类选择和控制型功能的实现方法,可分别编写在行动层程序和功能层程序中。

在日常的行动组合中,常常会使用一种多个行动组按动态排序的结果先后执行的组合方式,不同于计算机编程中的Case语句,只选择多个是否条件中,按顺序最先满足条件的分支动作,这种组合需要按多组动作的排序的结果顺序,执行全部的动作。当然,这种组合方式在目前的代码编程语言中也可以实现,但作为一种通用的程序组织方式,实现起来也有一定的难度。这种组合方式在资源编程中作为一种通用行动组组织方式提供,称“序择”动作。

资源语言编程中心思想

资源编程语言是建立在面向对象编程语言基础之上的,以资源为唯一编程实体元素的高级编程语言。从编程实体上看资源,资源是一组信息成员的张学文广义集合。信息成员就是资源的属性参数成员。资源编程语言只有“连接”这一种对资源实体操作指令。资源编程严格分开功能层程序和行动层程序。连接资源的信息成员就是编写资源的动作程序。给出资源动作或动作组的功能描述,就是编写资源的功能层程序。使用“抉择、选择、序择、择进、择回”五种资源组组合指令,就能编写出各种复杂的资源组合程序,同时给出资源组合的功能应用组合的含义。

 

 

 

20151

邱嘉文

于珠海诚开智能

 

 

参考文献:【1】《组成论》,张学文。




http://wap.sciencenet.cn/blog-33982-856669.html

上一篇:我的“科技徒手攀岩”事记
下一篇:面向资源应用软件开发方法心法:面向资源与关系的实体化

1 陈辉

该博文允许注册用户评论 请点击登录 评论 (2 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2021-8-4 09:12

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部