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

博文

面向资源的可演进软件系统的基本原理-2

已有 3467 次阅读 2014-8-16 22:45 |个人分类:基因软件开放实验室|系统分类:科研笔记| 面向资源, 可演进软件系统

实现可演进性的基本原理

属性

属性:用来描述某个对象或种某类型的某个特征的一个数据表述的方式,称为一个属性。

比如:用来描述“属性”这种概念对象自身的属性有:名称数据类型两个属性。

例如:为描述“人的称谓”,需要一个具体的属性实例,

名称的数据是“姓名”,

数据类型的数据是“文本型”。

类型

类型:多个属性进行组合来描述的一个个体种类,称为一个类型。

例如:用“姓名”,“年龄”,“性别”,“身份证号码”,“相片”等这组属性进行组合,就描述了“人”这个实体种类,也就得到“人”这个类型。

对象

对象:由一组属性的数值来组合描述的一个个体,就称为一个对象。

例如:由{姓名=王小二,年龄=12岁,性别=男,身份证号码=XXXX,相片 = YYY.jpg}这组属性值组合在一起,就描述了一个人的个体,这个个体,就是一个对象。

属性,类型,对象三者基本关系概述

事实启示:可操作的对象的存在并不依赖于其类型的存在,而只依赖于其属性是否被标识出来,以及对象在标识出来的属性上的取值是否明确得到。比如:对于一匹马,即使我们没有建立对“马”这种动物类型的认知,这匹马本身,还是作为一匹马存在着,这并不妨碍我们骑上它去驰骋。这意味着,在事实层面操作和使用对象时,可以不必关心对应的类型是否存在,直接操作和使用对象的属性值就能反映事实的变化过程。

类型只是在归纳认识理解同类的对象时,才会必须用得上。

所以,可以有两种途径得到对象的定义:

1.直接对一组属性的取值组合进行标识;

2.取类型所包含的属性组合进行联合取值进行标识。

认识到上述事实,是理解对象及其关系“可演进”的特性

实现原理的突破口。


基本原理

传统的面相对象的软件编程所实现的软件系统,采用的是单独的上述第2种方法得到运行中的软件对象实例。“编程”的行为本身,就是在固化对象的描述框架,就是在限制运行时对象的属性和能力,不可能超出编程时所实现的“类”的描述。


    如果构建一个软件开发和运行统一的一体化平台,使平台具备直接采用上述方法
1在运行时通过临时组合不同的属性取值,以及对这组取值的处理方法来构建运行时所需的对象的能力。这实际上就是绕过了“类”的限定,直接在运行时制造出所需的对象。这样的对象,不仅不受设计时的“类”的局限,反而可以通过对运行时运用相同属性方法所直接构造出来的对象进行归纳,得出需要的“类”来,再使用归纳出的“类”(实际是以直接构建的对象为“例”,而不是源程序所设计的“类”)来直接指导后续的系统自身的构建行为。这样,就不需要经过一个“设计”的过程来阻断对象的演化,既可以实现对象的演进和突变,又可以充分利用成熟的、自动归纳的“类”来实现对象属性和行为定义的可重用性。这就是利用“可演进的对象关系”实现系统的可演进性的基本原理。


简单地说,就是在运行时打通了属性、对象和类型三者的完整关系链,就找到了实现系统的可演进性所需的内在结构。

 

珠海横琴新区诚开智能科技有限公司

                                             

 邱嘉文

20148月于珠海

顺便正面回复上篇读者李红雨先生的“好奇”。他提到:

...通常来说,演进的驱动力来自外部环境的变化,如果软件系统能够实现演进,这样的驱动力可以认为是来自需求,如何识别需求对于软件本身来说是个不容易克服的鸿沟,目前都是通过设计的流程将这种需求转化为技术的逻辑,博主的设计不知道是否在理论和实践上都有所突破,...

在上篇的回复中,我只是简单地做了一下提示:

您说的没错,目前都是通过设计的流程将这种需求转化为技术的逻辑的。这里需要对“设计流程”和“设计工作”需要进行仔细的辨析,才能理解到我的突破点何在。


我理解,李红雨先生的“好奇”中,可能带有这样的“以为”:作者是否自称是取得了某种突破,可以跨过软件设计环节,直接利用软件需求来将业务的需求转化为技术的逻辑了?果真如此,必定需要在理论和实践两方面都取得重大突破才行。

细心的的读者,或许会注意到我在这里对“设计”措辞又做了的微妙的改变,称“设计环节”。

李先生原用词是“设计流程”。我对“设计流程”一词的理解是:专门用来完成设计工作的一套工作流程。也许李先生的本意,就是用“设计流程”一词,涵盖了按流程所进行的设计工作。所以,我之前会做出提示:设计流程的概念和设计工作的概念是两个密切相关但又不同的两个概念。

就好比我们进餐馆吃菜,正常流程是:点菜,洗菜,炒菜,上菜,吃菜。如果点菜代表软件需求,上菜代表软件编码,那么,洗菜,炒菜分别对应分析和设计的流程。那么,我现在声称取得的突破,是不是就是省略了炒菜的过程,直接就上菜了呢?

我认为,我的突破只是发明了“火锅”的吃法而已。炒菜的流程确实是被省略了,但炒菜的工作(使生食料变为熟食料的工作)并没有被省略。只是完全可以和吃菜的过程“并形地进行”而已。

那种既要吃熟食,又不必把食物弄熟的“重大突破”,类似于发明永动机,我是无论如何也取得不了的。可以说,我只是在发明“软件的火锅吃法”而已。

谢谢红雨的关注。欢迎讨论。希望我的谜底没让你失望。将来有机会请您吃顿“软件火锅”体验一下。







https://blog.sciencenet.cn/blog-33982-820064.html

上一篇:应该可以建立“空间范”的概念
下一篇:一个软件开发工具是否可用于开发其自身?
收藏 IP: 113.74.32.*| 热度|

3 杨正瓴 白冰 zdlh

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

数据加载中...
扫一扫,分享此博文

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

GMT+8, 2024-11-23 17:17

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部