建模贴吧淘的东西,大神颇多

建模和编程的本质区别是什么

黄毅

来自: 黄毅(程序猿) 2011-06-02 15:19:20

1人 喜欢 
  • TY
    TY (你的因果就是你的世界) 2011-06-02 16:13:40

    你很敏锐啊,已经触到了许多关键的地方。由模型产生代码,是国外软件界MDA背景(其实要宽一些,大致统称为模型驱动软件开发或软件工程)目前盯住的基本目标,但其中问题也不少。

    总体而言,这涉及建模与传统理解的编程到底有何区别问题。上面提到的国际软件界中这个领域的主流意见,基本还是以OMG的MDA策略中奠定的,主要要点就是“提升抽象层级”,以及所谓“将建模语言当编程语言用”。虽然如此,他们的既定目标却只敢说“部分自动生成代码”,而大部分活跃的实践者努力的方向,则是试图完全自动产生代码,甚至于试图达成往返工程。

    所谓“可执行模型”最近随着可执行UML的进展,似乎被重视得更多了。

    综合地看,国外这个领域还在探路,所遇到的问题,可能和它们最初的前提(比如上面提到的两个)有关。比如:就象你问题中暗示的,如此模型那么确定,为何计算机不能自动处理呢(注意:我不是用的“转换”,这又涉及到模型与代码的关系与异同问题)。既然模型语言“当作”编程语言用了,那为何OMG专家们不敢假定能完全自动生成代码(或“可执行”)呢?

    这些问题,正是目前这个领域并没有解答清楚的。大家可以一起进一步讨论:-)

  • 黄毅
    黄毅 (程序猿) 2011-06-03 08:34:02

    可能问题的关键是能否设计出这样一个建模语言:它要够抽象,可以用来表达做什么;又要够精确,可以直接被机器自动处理。
    我对建模、模型这些概念的精确含义还是一知半解,有木有精确的定义?

  • TY
    TY (你的因果就是你的世界) 2011-06-03 09:05:22

    这个事是国外这个领域正在做的,而且相当集中:几乎就成了UML的后续工作。

    软件开发实践中人不是很计较概念,更注意过程(建模-转换),但也有一些代表性的定义,很难说有多么的公认,属于相当宽泛的那种。有空我们专门介绍一下。

  • tertio
    tertio (母语式英语学习) 2011-06-04 11:36:14

    模型和语言的关系:

    模型是心智的产物,它由一组描述语言构成,特别的是,这些描述语言不仅仅是描述一组静态的事实,它还描述了系统的动力机制,而且通过这些描述,我们可以知道系统在任何输入下的反馈,包括内部的变化和输出。

    模型的重点在于动态。

    在我的语言中,引入了时态概念,就是为了达到这个目的。

  • 半缘君
    半缘君 2011-06-07 12:00:50

    作为交换标准的元语言常常是描述性的,而那些可执行的语言则是特殊的,它们之间要相互进行交换

        回应
  • TY
    TY (你的因果就是你的世界) 2011-06-07 14:35:47

    Zhang3:
    我的理解也许有些不同:模型并不一定是心智的产物;不一定是“语言的”;关于动态性,是建模与模型应用的一个要点,也许还是难点,但却未必是重点。

    半缘君:
    基本上,现在国外软件工程领域比较流行的观点,就是把模型界定在这个“描述性”上(这是一个极端宽泛的定义,大致上,我很多年前也曾经倾向于类似的想法),然后,把传统的程序(或代码)摆在“执行”的层面上。

    其实这里有很多问题(在我看来,和这个领域十多年不尽如意的进展状况有关)。比如:描述性,是否就意味着语言陈述?和图是什么关系?描述性与宣告性/声明性(软件常用术语declare, declarative)有什么区别吗?(因为,任何一个完整的程序,都有declare的部分)。

  • TY
    TY (你的因果就是你的世界) 2011-06-07 14:45:31

    接我的那篇日志“形式化是一个有毒的概念”里的话题,“描述性”,与“形式化”又有什么关系?这同样涉及到模型的本质问题。比如,软件界的UML,现在开始展“可执行”的版本(就是为达成可执行的模型),同时也很自然:舍弃图形,所以同时变成所谓文本化UML。这个方向,没有解决问题,可能更偏了——偏的结果不会是做不出东西,而是达不成某些效果,稍稍改善编程方式的同时,带来的新问题也不少——比如,维护模型,以及因此而多增加的一个层次,成了新的问题,所以有要人强调模型-代码往返工程,但也有人隐隐地意识到二者本质上可能不能往返——对这一点还没看到谁明确地论述。

  • 半缘君
    半缘君 2011-06-07 15:57:53

    描述元语言与执行语言的一个例子:
    XPDL与BPEL是完全不同且互补的标准,BPEL是一个“执行语言”,旨在提供一个Web服务编排定义,BPEL的定义关注一个进程以Web服务和XML数据集成为主的可执行。而XPDL则是一个与开发者相关实现无关的流程过程描述规范和交换接口,在工作流结构完整性方面XPDL较为成熟,但XPDL未在基于SOA架构下的服务编排方面给定更多标准化的交换格式,大部分BPM厂商均以XPDL扩展语法提供私有的扩展,而此部分正是BPEL所努力的,虽然BPEL已经向其不擅长的人工流程和非Web Service服务编排领域拓展规范,但仍然需要在非集成领域的流程规范方面向XPDL老大哥学习,比如在面向BPM业务分析师视角,目前BPEL2.0尚缺失对过程模拟规范的制定。

  • TY
    TY (你的因果就是你的世界) 2011-06-07 18:03:33

    看了这个知道老兄最近研究了些什么了:-)
    这些东西都很有成就,当然,从讨论的角度,我关心的是问题(BPMN的出现和讨论更集中地代表和反映了这个领域遇到的一些问题)。比如:

    “执行”的语义到底是什么?一个建模语言编写的东西(被称为模型)可执行了,这个执行,与比如一个C++程序可执行,差别究竟在哪里?

    又如,所谓“描述性语言”,就是建模语言吗?它的“可执行”又是怎么说?

    我们可以说,一个“业务流程文件”是可执行的。这个“执行”与工作流的执行的异与同又在哪里?

  • tertio
    tertio (母语式英语学习) 2011-06-07 21:19:45

    执行的含义是:它对应着一个虚拟机模型,只有完备地描述了这个虚拟机模型,以及代码被调入虚拟机的过程,才有执行的具体语义。

    其实可以这么想,在不同的虚拟机模型下,相同的代码所完成的功能是可以完全不同的。比如一个c语言在c虚拟机上执行,是我们所希望看到的功能,同样一段c语言在一个语法解析器虚拟机上执行,输出就会是一颗抽象语法树。

    考虑这些时,最大的问题就是:讨论所用的语言本身所造成的混淆和陷阱。

        回应
  • TY
    TY (你的因果就是你的世界) 2011-06-07 22:44:04

    如果说一段c程序在c虚拟机上“执行”,与它在语法解析器上“执行”,都叫“执行”的话,这个“执行”概念我完全不能满意:-D

        回应
  • tertio
    tertio (母语式英语学习) 2011-06-08 00:07:59

    如果说一段c程序在c虚拟机上“执行”,与它在语法解析器上“执行”,都叫“执行”的话,这个“执行”概念我完全不能满意:-D
    --------------------------------------------------------------------------------------------------
    **考虑这些时,最大的问题就是:讨论所用的语言本身所造成的混淆和陷阱。 **

    这的确都叫“执行”,其含义不多一点也不少一点,两种“执行”的地位是平等的。

  • TY
    TY (你的因果就是你的世界) 2011-06-08 09:01:02

    这个问题,我想引进一个看法:我们所讨论的一切问题,都是自然语言能够“说得清楚”的问题,自然语言是表达能力最强的,所有的数学、逻辑、计算机语言,都是自然语言的子集。

    换言之,没有一个问题,是用计算机语言说得清楚,而自然语言说不清楚的,如果那样,一定是我们对自然语言的使用有问题,例如,没有对不同的概念做出准确的区分,等。

    既然是“两种执行”,就是两件不同的事,它们相同与不同的具体地方是什么,这就是我的问题。当然,答案不能是,一个是虚拟机,一个是解析器——这就好像说,张三李四不同,因为一个是张三,一个是李四;相同,因为都是人。这个答案基本弱到没有意义了。

  • tertio
    tertio (母语式英语学习) 2011-06-08 09:13:41

    我想说的也许是:“执行”这个概念是有语义背景的,单独谈“执行”的含义是没有意义的。

    维特根斯坦说,世界是事实的总和,而不是事物的总和。

    世界是由关系所构成的,“执行”的含义也只能在一个关系网中得到理解。

    等我对虚拟机进行了逻辑建模,就应该可以清晰的看出来了。

  • 半缘君
    半缘君 2011-06-08 10:37:51

    一个故事是由主题、人物、情节、细节和话题、话茬构成的。但这个故事写成英文,它必定是由26个英文字母构成的。对于故事的动力学分析,由上面那些概念就够了,它就是故事的可执行环境,不需要还原到英文字母的可执行,因为还原后的语义变化了,不再是我们要分析的那个语义了。

  • 半缘君
    半缘君 2011-06-08 10:45:24

    自然语言是表达能力最强的,所有的数学、逻辑、计算机语言,都是自然语言的子集。 

    =================
    我不同意这个看法,自然语言的界限是存在的,这正是我们为什么要建立人工语言的原因之一。比如所谓的算法语言,对于算法(做什么)的描述,就是自然语言所不擅长的,还有流程的描述,至少是不直观的,所谓UML采用了各种图示方法。至少偏微分方程的意思,用自然语言来表达,恐怕也是难度极大的。

  • TY
    TY (你的因果就是你的世界) 2011-06-08 11:48:48

    @Zhang3
    目前的状况,例如:模型也可执行,程序也可执行。这个“可执行”(executable)已经成为了掩盖本质的地方,阻碍了进一步的深入。所以需要真正区分它们背后所谓事实的不同。

    @半缘君
    自然语言表达力最高这个命题,我还会保留——这是一个“能”的问题,不是“方便”的问题。所有的局部语言——可用DSL——数学、计算机语言,当然是因为更方便,所以才发明的。所谓自然语言,就是表达我们思想的语言。谁包含谁,似乎一目了然啊。

        回应
  • tertio
    tertio (母语式英语学习) 2011-06-08 22:20:06

    @Zhang3 
    目前的状况,例如:模型也可执行,程序也可执行。这个“可执行”(executable)已经成为了掩盖本质的地方,阻碍了进一步的深入。所以需要真正区分它们背后所谓事实的不同。 
    --------------------------------------------------------------------------------------------
    正如我所极力强调的“一切都是语言”,如果把“执行”的语义构造出来,那么这些都
    不再是问题了。

    这正是我正在做的工作之一。

  • 半缘君
    半缘君 2011-07-06 10:42:32

    使用UML面向对象的业务建模方法,分为业务分析和业务设计两项任务。建立的业务模型包括业务用例模型和业务对象模型。
    业务分析的任务是:搞清楚企业将面对哪些类型的外部客户、供应商等相关业务伙伴?这些业务伙伴将需要企业的哪些业务过程的运作?企业的这些业务过程为这些业务伙伴能提供什么服务价值?从伙伴的外部角度看,业务过程应该怎样一步一步通过交互操作完成?业务分析对应的结果模型就是业务用例模型。
    业务设计的任务是:设计一组方案来实现业务分析中提出的业务过程。这组方案应包括:需要找到哪些类型的业务对象资源,包括业务人员、业务中应用的设备、生产资料、信息系统等?这些业务对象资源应具备怎样的表象特征和行为特征?这些业务对象间建立了怎样的关联,通过这些关联可以互相发送消息,驱动业务对象做出动作行为,最终满足业务过程的外部需求?业务设计对应的结果模型就是业务对象模型。

    业务分析的语言是描述性的,回答“做什么”,而业务设计语言对前者来说就是可执行的“算法”语言,回答“如何做”的语言。

    参见表达佳作赏析:http://blog.sina.com.cn/u/2191450162

  • TY
    TY (你的因果就是你的世界) 2011-07-06 22:19:11

    半缘君说的就是BPM领域比较有代表性的看法之一。其实,再扩咱一点,也就是软件工程领域的一种基本观点。

    实际上,这里是个陷阱。我认为就是让BPM领域很多年没有实质性突破的关键之一。

    所谓,此执行不是彼执行。

  • DeepBlue
    DeepBlue (很多事其实都是无关痛痒的...) 2012-08-30 15:15:02

    很遗憾现在才看到这个帖子 本人最近在研究及使用UML 想到一个问题 希望拿出来探讨:
    我知道使用UML工具(如Rose)的转化功能 能够得到JAVA等语言的框架代码 但是本人对这样做是否具有实用价值存在疑问? 
    经过思考 个人觉得UML做做模型构建的草图就足够了 在模型建立后 如果还要做很多工作以期望生成框架代码 不如直接开始使用编程语言来的快捷实在。
    各位的意见呢?

  • TY
    TY (你的因果就是你的世界) 2012-08-30 20:27:34
    很遗憾现在才看到这个帖子 本人最近在研究及使用UML 想到一个问题 希望拿出来探讨: 我知道使用  ...  DeepBlue

    欢迎!

    国外软件工程中围绕建模技术这个领域(目前主要聚集在MDE,模型驱动工程名下),UML当然是它们捧的“圣杯”。

    所谓转换或代码生成(模型-模型,模型-代码)是他们集中探索的热点。基本上我看到他们拿出来秀的东西,大多属于基于UML模型的代码生成一类。较新的,用可执行模型(比如可执行UML)。也有个别用“模型解释”(通过解释器实现模型之所表达)。

    转换的一个话题是往复,即可逆向工程。这个怀疑的人比较多,似乎不少人认为不仅没必要,而且有害。

    仅仅生成代码框架这种,其实就是帮你打打字——你定义了模型,这些所谓模型是要在代码中一一声明的,框架自动生成至少帮你完成了这个。至于逆向转换,对于正常开发与维护,我也认为,基本没必要,因为在自主的开发过程中出现这个,至少意味着你的开发流程管理是混乱的。既然运用了建模技术,就要建立真正以模型为中心的思想:模型如手足,代码如衣服 :-)

  • DeepBlue
    DeepBlue (很多事其实都是无关痛痒的...) 2012-08-31 10:43:17
    欢迎! 国外软件工程中围绕建模技术这个领域(目前主要聚集在MDE,模型驱动工程名下),UML当  ...  TY

    感谢解释!
    可执行模型我的理解就是图形化编程语言的雏形或者说其中之一 不知你觉得这个解释如何?
    从实现角度 如果模型已经细化到了可转换为代码的程度 为什么不直接用编程语言描述呢?因此我觉得MDE(或者MDA)可能追求的是一种形式化的美感。不能说不对,但至少对实现的角度来看, 是引入了不少多余的东西的。
    至于逆向工程 如果给开发人员的代码不是面向对象的呢?如果当初写代码的人并不是按照可转化的指导原则编写的呢?这些都是问题 所以我觉得应该意义不大。
    最后 深深的赞同你的“模型如手足,代码如衣服” Hand shake!

  • TY
    TY (你的因果就是你的世界) 2012-08-31 10:51:55

    图形化/文本化是个老生常谈的争论点。以最近UML的可执行版本来说,我看到他们恰恰在强调文本化模型(因为UML本来是图形的)。


    从开发实战角度,中肯的切入方式,是将UML模型视为比文字、手绘图形更好的表达手段(需求和设计的想法),如果确实实现了这一点,就将管理的重心逐步转移到它上面。

    最终,以模型为中心还是以代码为中心,是可以从开发组织的文化角度理解的深刻区别。

        回应
  • TY
    TY (你的因果就是你的世界) 2012-08-31 11:02:08

    “如果模型已经细化到了可转换为代码的程度 为什么不直接用编程语言描述呢”

    目前这个领域的专家的标准答案基本上仍然是:

    1)建模比编程具有更高的抽象水平(从汇编到高级语言……到今天的UML)
    2)模型是描述性,规范性的,即what,程序(代码)是实现,包含所有细节,即how。

    见MDE社区的讨论:
    http://modeldrivensoftware.net/forum/topics/what-is-the-essential

  • 哎哟
    哎哟 (规律是自然的积习) 2012-11-08 22:08:14

    窃以为层次是简单通往复杂的途径,正如原子/分子/细胞/组织/器官/。。。是生命的层次。同样地,有不同层次的语言,计算机才能做更复杂的事情

  • TY
    TY (你的因果就是你的世界) 2012-11-09 13:18:52
    窃以为层次是简单通往复杂的途径,正如原子/分子/细胞/组织/器官/。。。是生命的层次。同样地,  ...  哎哟

    完全赞同。再进一步,需要研究层次为何而分因何而成。以本楼话题而言,例如,软件领域的模型驱动工程最基本的口号是提升开发的抽象层次。但从第四代语言,CASE到MDE,似乎有些东西停滞不前。新的层次到底是什么?可以这么一直分/升下去吗?从汇编到高级编程语言与从高级到建模,层次的性质有什么变化吗?UML到底处于怎样的尴尬之中?这些问题都涉及对层级的更进一步的理解。

  • Elaine2046
    Elaine2046 2013-10-23 08:39:44
    模型和语言的关系: 模型是心智的产物,它由一组描述语言构成,特别的是,这些描述语言不仅仅  ...  tertio

    有道理 ~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值