一个将软件构造直接提升到设计级的方法,欢迎大家提看法

zmzy 2002-05-21 02:17:48
我最近一直在考虑一种动态的描述系统,可以直接的动态趋近式的建立软件系统。而不是目前这样用语言进行静态的描述,然后再运行。我认为目前很多软件的问题,和目前软件体系过于复杂(而且越来越复杂)的原因就是静态的语言描述和运行时的不统一造成的。比如利用JAVA变成,JAVA语言只能静态的(在程序员的脑袋里想想运行时)描述目标系统,而不得不存在的静态数据,只好依靠XML和数据库这样的外部资源来完成,这样就造成了很多的异构系统。这样系统在不同的异构系统之间进行不停的转化,搞得技术越来越复杂。比如现在搞一个现在MIS系统,需要了解Oracle,JDBC,JAVA,JSP,XML总之一大堆的异构技术,如其是提高了建造的效率不如说是系统被绑定在一个个具体的技术结构之上了,我看是一种潜在的高成本。

为此可以考虑一种将静态描述和动态对象的统一的单一系统,在一个技术体系下完成大部分应用系统的构造。我像这样的系统会有以下一些特点:

1 系统是逐步动态构建成的,而不是静态的一次性用语言描述完成
2 通过统一的对象分布空间,将数据库,通讯,效率,安全,事务这样的技术细节抹平
3 对象可以不受一个静态描述的约束,可以进行独立演化

总之,就是在一个单一的逐步动态演化建立的对象空间中完成应用。

在这样的系统下,建造一个软件的末端工作就是设计,代码级工作基本被消灭(也许会少量保留)。由于技术体系被大大的简化,设计也可以变得更加纯粹,更加优化并趋于事情的本质


...全文
41 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
zmzy 2002-05-28
  • 打赏
  • 举报
回复
那好吧,我也在写个解释性的东西,如果愿意你留个mail,以后和你可以再讨论
jimconrad 2002-05-28
  • 打赏
  • 举报
回复
算了啦,好像逼你写论文一样。该结贴了。
jimconrad 2002-05-28
  • 打赏
  • 举报
回复
哦,等等先,我看看你还有一个回复。
jimconrad 2002-05-28
  • 打赏
  • 举报
回复
可是你所说的体系是什么啊?一直没说清楚啊!
zmzy 2002-05-28
  • 打赏
  • 举报
回复
也感谢faust,ILOG看了确实不错,你有过么?
zmzy 2002-05-27
  • 打赏
  • 举报
回复
我要吹的牛就是:我希望这个体系可以替代大多数程序员的工作,呵呵。而且我相信,就是我做不出来,以后软件必定有一个方向是象这个方向发展的。
zmzy 2002-05-27
  • 打赏
  • 举报
回复
说实话,使我懒得写,这个东西我已经作了一年了,可不是你说得那么简单。
再有了MDA(Model Driven Architecture)不知道,可有点落伍了。

说明几个关键问题:

运行时构造(就是以前说的动态构造):
运行时构造是指运行时进行系统的构造(哈哈没说一样),比如我实例化一个对象,传统情况下是描述这个实例化的过程,开始运行后才真正的产生对象。而这里在设计的时候就可以真正的实例化对象。就像你玩C&C建造基地一样。也许看起来没必要,但其实对于后面的特性很重要。

主动式结构:
举一个例子,你要求一直A=B(当A,B两个对象身处异地的时候这就是通讯),主动结构可以自动保证永远A=B,不需要你写任何代码。同理,不需要任何代码,我们完成大部分系统结构的构造

自动演化:
对象可以在主动结构不断增加的情况下,换句话说在对象和其他对象发生越来越多的关系的情况下,不断的丰富自己,由于这种对象可以自带描述(这一点和XML有类似处),所以可以修改自己的描述,自动的分化出子类。

后两个特性都是需要第一个特性支持的。上述特性在目前的技术能力下完全可以实现。

目标是可以取代目前相当一部分的信息系统核心编程,大部分的编程针对界面和外界接口就可以了。这可不是第5代编程,它已经不是程序了,程序只是其中的一类结构。这下说明白了吧

jimconrad 2002-05-27
  • 打赏
  • 举报
回复
最后一段中“给出来就给出来吧,”应该是“没给出来就没给出来吧,”
jimconrad 2002-05-27
  • 打赏
  • 举报
回复
喂,老兄,说实在,我觉得你说的我听不太懂,很多话不严谨,有点摆弄术语的味道,经不起推敲啊,抽象啊!越说越觉得你的观点没有新意。比如:

1.系统的基础是在OO基础上的,当更易于构造应用
// 这个可以理解,但是现在的程序都这样,不算新观点。

2 UML是动态设计其结果还是静态的
// 这个也可以理解,现在大家都在这么做,不算新观点。

3 本系统的本质在于运行时构造结构,
// 哪个系统不是在运行时构造啊?难道你的对象不是在运行是生成?难道new就不算是运行时在堆里开辟新单元?难道mdi不是动态构造的结构?难道你用word写一篇文章所构造的那么多图元对象原先就生成好的?你突然想到要在情书中插入你女朋友的照片怎么办?难道word会算计到你要插入图片,甚至知道你女朋友的样子?就算知道,他怎么知道你要插入5张还是6张?!显然是动态的嘛。所以不算新观点。

当然还有主动结构和自动演化的主要特性
// 主动结构(?这个词是不是最好改一下,和“自动演化”的短语结构好像不同哦,但是他们是并列的关系,看来是同一种结构的。)和自动演化还算是新东西。那不就是我刚刚说的意思:vc1.0自动演化成vc.net?!可你又说“神奇”。

4 吹牛一下,我觉得这是对目前开发方式的一个重大进步,比MDA要彻底的多
// 吹牛,我都不知道你的牛在什么地方你就吹。证明完了吹牛也不迟嘛!重大进步在哪里啊?你都没做对比就先把结论给出来;给出来就给出来吧,我来根据你的话一点一点推敲。可是每推敲一点都疑点重重,看不出任何“进步”。反而像你编程经验不足,满篇的乱想,空想。……不好意思,说话直接了一点。如果说的不对,还请你给出比较严谨一点的立论。mda什么东西我明天去看看。
zmzy 2002-05-27
  • 打赏
  • 举报
回复
jimmy 太夸张了吧,可没有那么神,而且哪样也不好,脱离实例。

我已经想好了如何完成第一步,就是抛弃代码,正发愁怎么实现呢,工作量有一些。
jimconrad 2002-05-27
  • 打赏
  • 举报
回复
唯一可以突破的就是:你给软件一个起始点,然后让软件自己设计自己,自己进化自己!
如果再具体一点就是:我开发了vc1.0版本,然后装入一台机子。运行了n年之后,你查看原先的程序,发现成了vc.net版本了……
你想的是不是这样?

(对,我以后就研究这了!嘿嘿。)
zmzy 2002-05-27
  • 打赏
  • 举报
回复
我的mail cxtzmzy@hotmail.com QQ 10315475 欢迎讨论甚至加盟开发
zmzy 2002-05-27
  • 打赏
  • 举报
回复
1 系统的基础是在OO基础上的,当更易于构造应用
2 UML是动态设计其结果还是静态的
3 本系统的本质在于运行时构造结构,当然还有主动结构和自动演化的主要特性
4 吹牛一下,我觉得这是对目前开发方式的一个重大进步,比MDA要彻底的多
zmzy 2002-05-24
  • 打赏
  • 举报
回复
truefasle 说说你的基本想法,我们可以交流 mail: cxtzmzy@hotmail.com
truefalse 2002-05-24
  • 打赏
  • 举报
回复
我刚发表的 qq就是设计工具 可以和你的想法结合起来。
faust 2002-05-23
  • 打赏
  • 举报
回复
其实,你用的模式,还是用OO的方法

不过呢,你更加的具体化了

怎么说呢,国外有一个ILOG公司推出了一系列的代码库,也和你的模式类似

但是他们的模式,应该是无数面向OO的设计后提炼出来的某一个领域的OO的复用代码

你现在的情况也类似,我认为,你这种思路一定会要大量的OO的设计事件,把OO的实践中积累出的可复用代码,作为一个库,再基于这个库开发


但你不可能脱离你的来源,就是面向OO的大量实践,这种产品想成功绝对不能否定UML,反而要指导用户怎么用UML来调用你的设计

UML中有对可复用对象的描述与设计

你应该深入的考虑一下
jimconrad 2002-05-22
  • 打赏
  • 举报
回复
关于对你补充说明的看法:(第一次修订)

您提到:
“动态的意思可以做一个粗糙的比喻:比如建造一个网页可以用html手写一个静态的文本,然后解释实现。也可以用frontpage画一个,任意的修改,这就是动态的。”
我认为:
某种程度而言html也是一种程序语言,而且是解释性的。我们可以把“解释”和“编译”广义看成是平台对语言的“翻译”。你所说的动态特性除了html以外(include),所有程序语言都拥有这个特性,唯一区别是“翻译”的时刻不同,但是执行效果都依赖于特定的编译器或解释器,只要编译器或解释器定了,该代码的效果也就定了。比如c++,他也是先写成静态文本,当然你也可以任意修改,所以他应该也是动态的啊。或许你的例子错了?

您提到:
“这里的静态数据,指的是存在的固定结构和数据,比如数据库结构和数据,XML结构和数据。这些内容在一个传统的语言内是很难大量容纳的,需要在语言外系统内存储,这样语言的大量工作是和这样的系统进行交互,搞得很复杂。”
我认为:
复杂不是偶然而是必然。因为计算机的用途越来越广,不同公司、开发小组生产出来的系统不可能总是一样,于是才出现了很多规范、标准,于是不同软件系统才能互相访问。不管是传统语言也好、还是现代语言也好,我们暂且分为程序语言和存储语言,前者主要是一些指令构成,实现的是操作;后者主要是数据。大规模系统都不可避免二者之间的交互,因为缺一不可。如果设计这样的系统,大概所有的设计师主张将业务处理流程和数据库两个部分分开实现,因为这样灵活性、可维护性、扩展性才好。目前的情形只是这两部分分别有人做了,所以表面看来变复杂了,其实是变简单了,当然这是软件规模变大、分工越来越细的结果。在若干年前做这样的系统是不可想象的。

您提到:
“我所说体系并不是一种静态语言,而是一种动态的构造方法,这点先要说明。”
我想说:
你这里的意思是构造方法和语言无关,我也认为动态构造方法其实是设计问题,不是语言问题。可你原先说的:
“比如利用JAVA编程,JAVA语言只能静态的(在程序员的脑袋里想想运行时)描述目标系统,而不得不存在的静态数据,只好依靠XML和数据库这样的外部资源来完成,这样就造成了很多的异构系统。”
而这里说的好像是将系统不能动态构造归罪于语言,前后对比这个因果关系好像有点混乱吧?

您提到:
“我们不需要新建立数据库和通讯系统,是以之为基础的,但在新系统中是看不见的。”
我认为:
这还是设计问题,即封装。好,你现在说不需要重新建立数据库和通信系统,而你原来这样说的:
“...只好依靠XML和数据库这样的外部资源来完成,这样就造成了很多的异构系统。”
你后来说的好像没有反对异构系统耶,只是希望对异构系统进行封装,这是软件复用的必然过程。现在这项工作大家都在做,比如数据库的那些标准和接口,都是为了解决这个问题。所以你的观点好像不是新观点哦。

您说:
“可以考虑一种将静态描述和动态对象的统一的单一系统”“这正是我要做的呀,最基本的道理就是取消设计时和运行时的区别”
我说:
这还是分析和设计问题。分析设计都要考虑系统的数据、功能、行为三个原则。你说的其实是其中的“行为”分析设计工作。如果你设计好了系统运行时的状态及变迁,系统运行时的所有行为都是可预见的啊。其实静态描述就是描述系统运行时的情况,静态描述(设计文档)和动态对象本来就是统一的!不需要你去做。你要做的就是使用语言描述出整个系统,包括数据、功能和行为。所以你所说的“统一”是无源之水,没有前提。

您提到:
“代码?也许需要,但不是必需的,我们不再依赖代码了。”
我认为:
不依赖代码总的依赖某种语言把你的系统描述出来吧。如果我们把这些描述系统的语言成为广义的代码,难道你还认为代码不是必需的吗?如果是,那不是陷入了唯心论:系统在我心中。可是那是在你心中的啊,你不说我怎么知道?!

您提到:
“抹平的工作是由本系统来完成的。然后使用这个系统进行业务设计的人不用再关心了。当然系统管理人员为了效率还是要关心的。这个很重要,这就是为了建立一个平坦的对象空间,这样才可以便于建立抽象的对象结构。”
我的想法:
这不是嘛,抹平工作(即封装)其实是本系统的设计问题嘛。管理员要关心,那设计师更要“关心”了!连工作都是他做的他能不关心嘛?!
最后那句话说的太悬了(太抽象了)吧,和前面没有任何联系冒出一句无法测试的l论断来。

您的回复:

>您提到:“就是在一个单一的逐步动态演化建立的对象空间中完成应用。”
>我想问:我觉得说的有点抽象,因为这看来是一个新想法,没有足够的案例、样本让我理解您的想法。希望说得再详细一点。

我也是在完善这样的想法,我想是对传统的方法的颠覆。说实话,我觉得像j2ee,.net这样的体系不会走得太远(指的是10年的周期),因为他们会越来越复杂,成本越来越高。就像结构化编程在70‘80年代达到极限一样。

我的想法:
越看越悬,你的这些话好像都没有办法测试。既没正面回应,往往又抛出新的无法测试、没有提及依据的观点。
我觉得你的想法都没有跑出现有的软件技术的框架。
zmzy 2002-05-22
  • 打赏
  • 举报
回复
jimmy 稍候我会仔细回答你的问题,我需要更清楚地说明,也是要我自己想清楚,毕竟现在这个系统还不存在,但可以肯定它有足够的变化性
faust 2002-05-21
  • 打赏
  • 举报
回复
统一建模语言就可以实现你说的模式


这方面的研究还会继续演进,总之是让重复性的劳动减少

不过有些设计过程,很难简化

只在特定的应用中,可以重用已有的模式

而真正能帮助设计的,应该是设计模式

可以参考一下里面提到的37种设计模式

zmzy 2002-05-21
  • 打赏
  • 举报
回复
感谢jimmy的仔细阅读,有几点特来说明:

>您提到:“我最近一直在考虑一种动态的描述系统,可以直接的动态趋近式的建立软件系统。”
>我想问:什么叫动态的描述?可否更具体一点说说。

动态的意思可以做一个粗糙的比喻:比如建造一个网页可以用html手写一个静态的文本,然后解释实现。也可以用frontpage画一个,任意的修改,这就是动态的。当然这是一个粗糙的比喻,实际的问题比不这样简单。
理论一点可以这么说:就是在运行时状态下构造系统,而不是一次性的描述后进入运行时系统。

>您提到:“比如利用JAVA编程,JAVA语言只能静态的(在程序员的脑袋里想想运行时)描述目标系统,而不得不存在的静态数据,只好依靠XML和数据库这样的外部资源来完成,这样就造成了很多的异构系统。”
>我想问:
>1.有什么语言能够“动态的”描述系统?
>2.“不得不”存在静态数据?是指static变量还是指什么?可否给“静态数据”一个定义?
>3.“异构系统”?很正常啊。你不可能自己做一个数据库啊?否则工作量也太大了吧?再说如果每次都为了保持同构而创建新事物,那软件的复用性有放到什么地方去了呢?

1 这里的静态数据,指的是存在的固定结构和数据,比如数据库结构和数据,XML结构和数据。这些内容在一个传统的语言内是很难大量容纳的,需要在语言外系统内存储,这样语言的大量工作是和这样的系统进行交互,搞得很复杂。
2 我所说体系并不是一种静态语言,而是一种动态的构造方法,这点先要说明。
3 我们不需要新建立数据库和通讯系统,是以之为基础的,但在新系统中是看不见的。

>您提到:“如其是提高了建造的效率不如说是系统被绑定在一个个具体的技术结构之上了”
>我认为:这倒是事实,对别人依赖程度太大的系统不灵活。

这点我的感觉太深,由于任何一个大系统利用的技术太多,异构性太强,而且技术进步的太快。所以当一个大系统投入应用后久的有一个团队不停的进行维护(成本很高),所以一个大系统运行3-5年后,除了那个团队,外人很难理解这个系统。

>您提到:“为此可以考虑一种将静态描述和动态对象的统一的单一系统”
>我想问:如何去做?

这正是我要做的呀,最基本的道理就是取消设计时和运行时的区别

>您提到:“系统是逐步动态构建成的,而不是静态的一次性用语言描述完成”
>我想问:不懂中。是不是让程序运行时自己生成某些“动态”代码?

代码?也许需要,但不是必需的,我们不再依赖代码了。

>您提到:“通过统一的对象分布空间,将数据库,通讯,效率,安全,事务这样的技术细节抹平”
>我想问:抹平的工作还是本系统应该做的啊。只是设计问题啊,好像和你说的“动态”,“异构”没有关系啊?

你说得很好,抹平的工作是由本系统来完成的。然后使用这个系统进行业务设计的人不用再关心了。当然系统管理人员为了效率还是要关心的。
这个很重要,这就是为了建立一个平坦的对象空间,这样才可以便于建立抽象的对象结构。

>您提到:“对象可以不受一个静态描述的约束,可以进行独立演化”
>我想问:就像生物学里的继承、突变、自组织一样哦!好想法!不过我不知道你对你的这个想法的实现有什么设想、方案、办法?

基因算法早就有,不过这里不会使用不受控制的自动演化,还是人工控制比较好(对于关键业务系统这一点很重要)。基本的原则就是对象允许自带描述对象。

>您提到:“就是在一个单一的逐步动态演化建立的对象空间中完成应用。”
>我想问:我觉得说的有点抽象,因为这看来是一个新想法,没有足够的案例、样本让我理解您的想法。希望说得再详细一点。

我也是在完善这样的想法,我想是对传统的方法的颠覆。说实话,我觉得像j2ee,.net这样的体系不会走得太远(指的是10年的周期),因为他们会越来越复杂,成本越来越高。就像结构化编程在70‘80年代达到极限一样。
加载更多回复(6)

1,265

社区成员

发帖
与我相关
我的任务
社区描述
软件工程/管理 管理版
社区管理员
  • 研发管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧