基于业务解析的第五代计算机语言
来源:中国电子政务网 更新时间:2010-11-05
1946年2月14日世界上第一台电子数字计算机 ENIAC诞生,验证了冯.诺依曼的EDVAC计算机体系的正确性并一直运用至今,历经了数次的硬件更新换代,信息技术以惊人的速度进步,英特尔(Intel)创始人之一戈登•摩尔(Gordon Moore)提出:集成电路上可容纳的晶体管数目,约每隔18个月便会增加一倍,性能也将提升一倍,也就是说在付出成本不变的情况下,每隔18个月计算机的性能将翻一翻。在二进制机器语言的基础上,面向各种应用涌现了许多通用或者特定领域的语言,大多数都昙花一现,然而也有一些语言如Java和C被广泛应用,究其原因最重要的还是符合用户需求发展的一般规律。用户需求驱动产生了一批影响较高的适合特定领域的编程语言,如通用商业语言COBOL,脚本语言Javascript,数据库的标准查询语言SQL,数学计算的MATLAB,数据分析的SAS,逻辑推理的Prolog等,这些语言都很好地解决领域里的专业问题。然而,语言的脚步并没有因此停止下来,面对更高的复杂的应用需求,这种演绎将持续演绎下去。
60年代中后期,软件越来越多,规模越来越大,而软件的生产基本上是各自为战,缺乏科学规范的系统规划与测试、评估标准,其恶果是大批耗费巨资建立起来的软件系统,由于含有错误而无法使用,甚至带来巨大损失,软件给人的感觉是越来越不可靠,以致几乎没有不出错的软件。这一切,极大地震动了计算机界,史称“软件危机”。软件界不禁探究:大型程序的编制不同于写小程序,它应该是一项新的技术,应该像处理工程一样处理软件研制的全过程,程序的设计应易于保证正确性,也便于验证正确性。1969年,提出了结构化程序设计方法,1970年,第一个结构化程序设计语言—Pascal语言出现,标志着结构化程序设计时期的开始。80年代初开始,在软件设计思想上,又产生了一次革命,其成果就是面向对象的程序设计及其以后十几年的各种编程框架思想的涌现,J2EE、.NET、以及各种MVC框架支撑并推动面向对象的继续探索,随后国际从事软件开发和语言研究的知名机构提出了构件化的软件编程思想,并积极研究基于构件化的开发语言,YiGo厚积8年后化茧成蝶。
后对象时代  构件思想主导程序开发
面向构件的规划可以理解为面向对象设计的新层次。面向构件的开发是一种软件开发手段,在开发周期的所有阶段,都以构件为基础,包括需求分析、设计、测试、支撑性技术架构、项目管理等。这个概念把面向构件的开发扩展到用面向构件的思想来设计和实现软件系统,它在软件开发周期的各个阶段和各个方面都以构件为中心,这跟基于构件不同,比基于构件又先进了一点。设计构件的目的是为了构件可以像零部件一样用于组装,把构件设计成项目的零件,此时面向构件就比基于构件更有优势。
一切应用系统的开发都是从业务需求出发的,最终目的也是为了处理好业务问题。系统分析员按照业务特性把系统划分为各个子系统,又把子系统划分为各个功能模块,便形成了构件业务化拆分逻辑。与“业务驱动”相一致,构件业务化是从业务的观点来分析构件,使得业务和构件相结合,从而面向构件可以更好的构建业务模型和业务流程。应用开发以技术为中心,业务人员和开发技术相分离,也使得用户需求、设计和开发相分离。构件业务化,是面向构件技术发展的必然,提高了业务构件的复用及适应业务变化的能力,使企业能够通过自身和业务(构件)的转换来应对来自市场的挑战。
但是构件的行为是离不开对象的,构件一般都包含了若干类或者原型对象。构件中还包含了一些固定的对象,它们被构件用来获取默认的初始状态和其他的构件资源。而构件中不一定要包括类,构件可以用过程体,全局变量,函数语言,汇编语言或者其他可用方法来实现自身的全部特性,构件中所包含的对象可以与该构件相分离,对于其他构件也是可见的。一个构件中可以不包含类元素,也可以包含一个或多个类元素,但是一个类元素只能让一个构件使用,除此之外,和类之间有继承关系相同,构件之间也存在这一些互相依赖的关系,一个构件中包含了一个类的父类但不一定包含它的子类,如果一个类的父类在一个构件中,类的子类在其他构件中,这两个类之间的继承关系就是跨构件,而且类之间的继承关系还导致了这两个构件之间的导入关系。规约的继承是保证正确性的一项很关键的技术,因为共同的规约是构件间达成共识的基础利用构件使项目结构更清楚,程序容易维护,代码重用性强。
计算机语言正本清源
一般来说,计算机语言分为机器语言、汇编语言和高级语言。
机器语言是由01组成的数字序列,如某种计算机的指令为1011011000000000,它表示让计算机进行一次加法操作,而指令1011010100000000则表示进行一次减法操作,其前八位表示操作码,而后八位表示地址码。从上面两条指令可以看出,它们只是在操作码中从左边第0位算起的第7和第8位不同,这种机型可包含256个不同的指令,机器语言或称为二进制代码语言,计算机可以直接识别,不需要进行任何翻译,并且对不同型号的计算机来说一般是不同的。
汇编语言是用特定的符号来代替某些操作,帮助记忆与学习。在汇编语言中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址,再由汇编程序将汇编语言书写的程序翻译成与之等价的机器语言,因此,和机器语言一样,汇编语言依赖于具体的机型,不能通用,也不能在不同机型之间移植,针对苹果机和惠普机相同的功能要开发两套程序。
高级语言主要是相对于汇编语言而言,它并不是特指某一种具体的语言,而是包括了很多编程语言,如目前流行的C#,Java,vb.net、c/c++、foxpro、delphi等,这些语言的语法、命令格式都各不相同。在这些语言中我们可以写这样的句子:c=a+b,它是将a与b相加,然后将结果给c,高级语言是面向人类而不是面向机器的语言,不用考虑异构机器内部构造的细节,只需关心任务的实现方法。
高级语言克服了异构硬件的程序移植问题,计算机不直接执行高级语言,而是需要经过编译程序将其转换成机器指令,然后计算机才执行。从编译的方式上分为解释型的高级语言和编译型的高级语言两种。
高级语言又分为过程性语言、面向对象语言、非过程性语言和管理解析语言等四个发展阶段。
过程性语言是指编写的程序包含一系列的描述,告诉计算机如何执行这些过程来完成特定的工作,适合于那些顺序的算法,用过程性语言编写的程序有一个起点和一个终点,程序从起点到终点执行的流程是直线型的,即计算机从起点开始执行写好的指令序列,直到终点、如BASIC、COBOL、FORTRAN、Pascal、C等都是过程性语言。
面向对象语言是建立在用对象编程的方法基础之上的。对象就是程序中使用的“实体”或“事物”,按钮、菜单、对话框都是对象。对象是基本元素,在面向对象程序设计中只需考虑如何创建对象以及创建什么样的对象;另外同一对象可用在不同的程序中,这无形中扩大了程序员的生产率。被一致认可的是:C++是支持面向对象的C语言,Java和J++是以C++为基础的更适于网络应用的面向对象语言,Java和J++尤其适于生成网页上栩栩如生的图画和称为applet的Java应用程序。
非过程性语言只需程序员具体说明问题的规则并定义一些条件即可。意思就是你只用说做什么,具体怎么做不需描述,语言自身内置了方法把这些规则解释为一些解决问题的步骤,这就把编程的重心转移到描述问题和其规则上,而不是数学公式。因此,非过程型语言更适合于思想概念清晰但数学概念复杂的编程工作,如数据库查询SQL语言和逻辑式语言Prolog就是非过程性语言的代表,SQL只需程序员和用户对数据库中数据元素之间的关系和欲读取信息的类型予以描述,逻辑式语言的语义基础是基于一组已知规则的形式逻辑系统,被广泛应用于各种专家系统的实现。
管理解析语言基于高层次的业务需求,涵盖企业管理软件开发的特定概念和抽象,由低层次的实现细节和具体事物抽象而来,据有字典、单据、报表、工作流、审批流等管理业务描述的快速实现,以最小的、不可拆分的业务规则作为管理解析语言的基本粒度,按照管理逻辑进行组合,形成特定管理业务的标准实现。YiGo语言是第一个实现管理解析思想的计算机语言,拥有软件开发的原子逻辑以及N多管理业务的分子操作及其界面元素,实现了对硬件、操作系统、数据库的透明操作。
YiGo化茧成蝶
YiGo扮演这样的角色:一种将技术和业务分离开来,最大程度弱化用户对技术的依赖,只需通过业务描述来推动技术实现,这种业务解析的技术实现机制是将用户的需求描述成XML文档,通过YiGo解析技术在集成开发环境中自动生成系统应用。可以看出,一个系统应用的产生主要分为两个步骤,一是描述用户的需求生成XML,二是解释XML生成系统应用,这种简单的程序开发模式,使得编程不再是技术人员的专利,熟悉业务的人员也许做的更好!
程序升级本质上就是需求重新定义或者修改的过程,反映在业务解析技术上就是导入原来的需求描述XML文件,修改相关属性,重新生成满足要求的XML文件,再提交自动解析生成新的系统应用。在这个过程中,解释完全由系统执行,用户只需清晰描述需求,因此,极大降低了二次开发的风险。
这不仅是一次技术的变革,更是一种思维模式的变革,一种程序快速交付模式的实现。
因此,考虑到语法语义及人类思维模式的匹配等构成要素,计算机语言经历了五次变革,相应产生了五代语言体系:第一代计算机语言汇编语言具备了语法语义基本形态,第二代过程性计算机语言克服了对硬件的依赖,实现了程序实现了不同硬件平台的可移植,第三代面向对象计算机语言反映了人类意识形态的特点,基于“实体”“对象”编程方法的运用,使得人类跟计算机站在同一认识高度进行对话,第四代非过程性计算机语言实现了计算机辅助决策、人工智能等半结构或无结构问题的机器学习,第五代管理解析计算机语言突破了软件编程人员的自我限制,使得计算机编程语言成为一般的管理人员而非专业技术人员也能运用和掌握的技能,并从软件的开发模式、实施方法论等维度实现近似于自然语言的人机交互。
综上所述,过程性语言重在分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象语言是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为,面向对象的程序设计方法(Object Oriented Programmiing,简称OOP)是把设计方法从复杂繁琐的编写程序代码的工作中解放了出来,符合人的思维方式和现实世界。而管理解析语言采用的构件化的思想,是面向对象开发方法的一种发展与延伸,构件和对象都抽象的描述了客观世界,都将信息隐藏了起来具有相当的独立性,但是由于构件要求是自描述的,独立性比对象更强。