一种面向粒的程序构造方法

文档序号:6602361阅读:101来源:国知局
专利名称:一种面向粒的程序构造方法
技术领域
本发明属于计算机理论领域,涉及一种程序构造方法,尤其是一种面向粒的程序 构造方法。
背景技术
过程语言如FortraruPascal和C等可以用来定义直线执行的程序,程序开始于某 一点,一步一步执行至终点。这种模式中,设计理念体现在相继执行的程序单元中。直线的 模块划分体现在函数调用中,函数调用允许程序执行从主程序跳转到子程序,又跳回主程 序。子程序的使用使程序更有效的实现一般的程序。但是,随着程序规模的不断增大,程序 越来越复杂,过程式语言也变得很复杂并且很难维护。面向对象方法的出现把系统状态变成一些单独的对象,在这些对象中可以私有化 系统状态,并且通过公有的函数控制这些状态。经过结构化和面向对象思想的不断发展,现 代软件的开发都朝着高内聚和低耦合的方向发展。程序的功能分解为各个功能模块。高级 语言通过结构化抽象等方法模块化程序,面向对象语言通过对象和类等概念,这又进一步 通过集合一个实体的行为和隐藏其内部实现提高模块的内聚、降低模块间的耦合。面向对象相对于传统设计语言和软件设计方法有许多优越性符合人类认识和分 析事物的思维习惯;代码是可高度重用的,可维护的。实现了功能模块的组件化;代码是共 享的,可继承的,减少了软件设计中的代码量等。但是,OOP也不可能是完美无缺的,近些年 出现了很多针对OOP的不足提出新的语言构建方法和相应的实现。程序所面临的上下文常常改变,比如程序所面临的输入、系统可用内存、并行系统 中的处理机个数等。从某种意义上讲,传统编程机制隐式地蕴含了程序与上下文之间的关 系,不过其潜在地假定程序与上下文之间的关系是固定不变的。然而,易变的上下文使得编 程时假定的程序与上下文之间的匹配关系常常被破坏。假设一个类拥有无返回类型方法 m。对于不同的情况,方法m可能需要进行不同的行为演化来适应新环境。传统的编程模 型可能试图使用继承关系,通过定义该类的子类来对行为的多个候选实现进行分组,解决 这个问题。然而,虽然继承关系可通过在子类中重载基类方法的方式,实现该方法的行为版 本,但它不足以用来为某一个对象的某个方法编写多个候选行为实现,换句话说,静态继承 关系不能支持对象行为的动态变化。当然也可考虑通过使用不同的方法名称来代表每个实 现,或者通过方法的不同参数来指示哪个实现被执行。但是这要求客户端,也就是将要调用 这个方法的对象,对实现的细节了如指掌。这样就破坏了类的封装性。面向粒(Granule Oriented Programming, G0P)程序构造方法就是在观察程序的 不适合性现象的基础上提出的。程序的运行与其支撑环境是密不可分的。按照Wiki定义, 计算机程序是给计算机提供的指令,计算机需要程序以产生动作,而程序仅当它的指令被 计算机的处理器执行时才有意义。可以看出,一个有确定意义的程序除了代码之外还默认 地隐含了在什么计算机上运行。完美的程序一旦运行在陌生的机器上,会产生预料不到的 结果甚至不能够正常运行下去,由此引出了程序与机器之间适合性问题。
目前的各种编程语言都没有关注程序适合性问题,面向粒的程序构建方法中,用 粒来指代那些适合性可度量的、可以被动态替换的构成程序的单位。如果程序出现了不适 合性,这些不适合性被局部化到不适合的粒上面,从而用更适合的粒进行替换,以达到改善 程序适合性的目标。

发明内容
本发明的目的在于克服上述现有程序构建方法没有关注程序适合性缺点,提供一 种面向粒的程序构造方法,该方法是在观察程序的不适合性现象的基础上提出的,引入粒 作为系统的基本模块,并将程序所处的上下文作为编程要素,通过动态监测,动态替换从而 保证程序对于环境的适合性,有效延长程序的生命周期。本发明的目的是通过以下技术方案来解决的该种面向粒的程序构造方法,具体按照以下步骤(1)编写GOP程序代码所述的GOP程序是一个种子程序或个体程序;所述种子程序是一个不与任何上下 文相关联且不包含任何粒的程序,所述个体程序是一个与已有上下文相关联的程序,个体 程序由种子程序和依附于种子程序的粒组成;(2)将编写的GOP程序代码通过编译生成个体程序的类字节码文件、粒体字节码 文件、影子类字节码文件、个体配置文件以及该个体程序对应的粒树;将粒体字节码文件和 影子类字节码文件存入粒库,所述粒库是一个保存了所有粒的存储单元;(3)通过个体树加载运行步骤(2)得到的个体程序的类字节码文件、粒体字节码 文件和影子类字节码文件,所述类字节码文件、粒体字节码文件和影子类字节码文件运行 在实际上下文下,所述实际上下文的取值实时变化;(4)动态实时监测的运行程序适合性,若发现不适合现象,中断运行程序,进入步 骤(5);若运行程序因未引入的上下文而非正常终止,则进入步骤(9),否则程序继续运行
直至结束;(5)从粒库中查找相似粒,若找到相似粒则进入步骤(6),若未找到相似粒进入步 骤⑵;(6)以查找或编写的相似粒替换被中断的运行程序中不适合的粒,若相似粒替换 后满足适合性,则进入步骤(8),若相似粒替换后不满足适合性,则进入步骤(5);(7)编写新的包含相似粒的个体程序,并将新编写的粒加入粒库,进入步骤(6); 如果不编写新的个体程序,进入步骤(10);(8)演化成新的个体程序,被中断的运行程序结束中断继续运行,进入步骤(4);(9)引入新的上下文,编写相应的个体程序,进入步骤(2),如果不编写个体程序, 进入步骤(10);(10)程序终止并且不能再运行。进一步,以上步骤(1)中,所述的上下文是指支持程序的所有非功能性因素的综 合,上下文分为期望上下文和实际上下文,程序的期望上下文是该程序的理想的运行环境 描述,一个程序在自己期望上下文中总是适合的;实际上下文是程序实际运行的环境的描 述。
以上步骤(1)中,所述粒由粒名、类名、粒体和影子类构成,其中类名用来表明该 粒所依附的类,将该类称为粒的根类,粒体用来指定粒的期望环境,粒体可以定义自身的成 员并且粒体中必须包含一个适合性判断方法,适合性判断方法返回真或假;所述影子类是 对种子程序中与该影子类相同名字的类的改进,是在不同上下文下类行为的不同体现,并 且只是在相应粒体适合性判断方法为真后才有效。以上步骤(2)中,所述的个体配置文件记录个体程序的类层次结构以及各类依附 的粒的XML文件。以上步骤(2)中,所述的粒树反映个体程序所包含的粒和粒的层次的XML文件。以上步骤(4)中,所述的不适合现象是指将要运行的程序段所属的粒的适合性 判断方法的返回值为假。以上步骤(4)中在中断运行程序时,在安全点中断程序运行。以上步骤(5)中,所述的相似粒是指两个粒在其各自对应的粒树上的所有祖先 粒的层次结构相同,且这两个粒依附的类相同,同时这两个粒对应的上下文名称和次序相 同。本发明具有以下几点有益效果1)本发明用粒来指代那些适合性可度量的、可以被动态替换的构成程序的单位。 程序运行时动态监测运行中的程序的适合性,如果运行中的程序出现了不适合现象,这些 不适合性被局部化到不适合的粒上面,从而用更适合的粒进行替换,以达到改善程序适合 性的目标。使得程序自动演化成为适合当前运行环境的适合的版本。同时也避免了程序因 为隐含的适合性问题而导致的程序运行出错,并能延长了程序的生命周期。2)本发明对于可重用性也提供了很大的支持,对于应用领域的粒建立粒库,粒库 中包含了适应不同上下文、完成不同功能的粒。当运行程序中某个粒发生不适合时,从粒库 中选择适合的粒,在执行过程中替换发生不适合的粒。由于粒库保存了该应用领域所有演 化过程中的粒,这使得那些不适合当前实际上下文而被替换的粒依然得到保存。并且在实 际上下文再次变化时可能被再次使用,因而程序的可重用性得到提高。3)本发明是对OOP (面向对象编程)的完善和补充,并不是对OOP方法的完全替 代,面向粒的程序构建方法继承了 OOP的优点,同时把程序运行环境抽象为上下文变量,根 据上下文变量将程序分为相关和不相关部分,对相关部分通过追加粒来改进,通过粒的适 合性监测和替换机制,使得程序的行为与实际上下文间动态适应。


图1是面向粒的程序构造方法流程图;图2是粒的构成图;图3是粒库中粒的加载运行机制图;图4是相同种子的个体间相似粒替换展示图。
具体实施例方式GOP思想目前实现为对Java语言的扩展,称作GranuleJ。GranuleJ里面,对象代 码体现在Java类里面,粒体和影子类代码遵循我们设计的语法语义规则。
下面结合附图对本发明做进一步详细描述参见图1 面向粒的程序构造方法的流程按照以下步骤(1)编写GOP程序代码所述的GOP程序是一个种子程序或个体程序;所述种子程序是一个不与任何上下文相关联且不包含任何粒的程序,所述个体程序是一个与已有上下文相关联的程序,个体 程序由种子程序和依附于种子程序的粒组成;步骤(1)涉及的GOP程序构建方法的相关概念和具体内容1)上下文上下文是对程序运行环境的一种抽象描述。总的来看,解决领域问题时支持程序 的所有非功能性因素的综合为该程序的上下文。上下文分为期望上下文和实际上下文。程序的期望上下文是该程序的理想的运行 环境描述,一个程序在自己的期望上下文中总是适合的;实际上下文是程序实际运行的环 境的描述。另一方面,影响到程序整体的外界系统的上下文称为环境上下文,比如程序运行 环境的硬件条件,网络状态等。而对于组成程序的各个模块,不仅受环境上下文影响,还有 领域上下文作用在其上,领域上下文指软件系统内部所有与某个模块交互的模块的状态, 根据这些模块的状态当前模块可以有不同的表现。2)粒GOP领域里,构成软件系统的基本模块包括粒。粒是能感知其生存的环境(即上下 文),并完成某个特定功能的、可单独执行、可动态装卸的代码段。GOP最大的突破在于粒不 单纯是完成特定功能的代码块,粒是与其期望上下文“共生”的功能块。粒的期望上下文是 该程序的理想的运行环境描述,一个粒在自己的期望上下文中总是适合的。粒不仅关心其 本身作为组成软件系统的功能模块,粒同时是与其期望的运行环境,即我们提及的上下文 这些非功能因素紧密结合的。粒分为底层粒和高层粒底层粒是一个最小的粒单元,它不包含子粒,对于问题领 域来讲它的执行过程是透明的,是一步完成的、不可再分的,或者编程人员认为该粒的所有 内容对应的上下文都是一致的。高层粒是由底层粒或者高层粒通过一定逻辑组合在一起 的,高层粒在不适合发生时,可能不需要全部进行替换,适合性监测模块会根据实际上下文 局部化到某个更低层的粒。参见图2,粒210是GOP程序的一阶实体,粒提供可以将程序功能代码和其期望的 环境相关联的方法,所以粒需要包括粒名220、类名230、粒体240和影子类250四部分内 容。其中类名用来表明该粒所依附的类,将该类称为粒的根类,粒处于OOP程序中类层次结 构中的某个位置,粒依附于基本OOP程序中某个类,将该类称为粒的根类。粒体是程序对于 程序运行环境和适合性的关注,粒体中可以定义粒成员,在粒本身或影子类中可以使用,粒 体还必须包含一段适合性计算方法,方法中定义粒在何种环境中适合运行、何种环境下不 适合,并返回真或假值,由GOP程序运行环境获取,根据获取到的值决定该粒是否适合在当 前上下文环境中运行。所述影子类是对种子程序中与该影子类相同名字的类的改进,是在 不同上下文下类行为的不同体现,并且只是在相应粒体适合性判断方法为真后才有效。当 监测到实际上下文与该粒中粒体所描述的粒的期望上下文适合时,影子类发生作用,类的行为被改变。GOP并不破坏OOP对象的继承、封装和多态特性。粒体只是对所处环境的判断,而 影子类在软件系统中处于与类相同的位置,所有对象的行为都是封装在对象内部,也只使 用消息发送来与其他类的对象发生交互,只是在GOP中,一部分对象的行为可以在影子类 内定义。多个粒可以依附于类层次中同一个类,彼此之间是独立的,各个粒关注不同的上 下文,描述在不同上下文环境下类应该表现出来的不同行为。同一个类和该类的各个粒体、 影子类构成了不同的粒,这些粒刻画了完成相似功能的实体在不同上下文中不同的行为表 现,这些粒互称为相似粒。当程序运行时的上下文不断发生改变、切换时,某个粒发生了不 适合现象,可以使用其与当前实际上下文适合的相似粒来替换当前粒。粒可以依附于类层次结构中任何一个类而存在,类层次结构可以看做一颗向下生 长的树,树的根节点在Java中是Object类,树结构中上层类总是比下层类更抽象,越是处 于下层的类越具体,相应地,根类位于上层的粒称上层粒,根类位于较低层的粒称下层粒, 由此形成粒之间的层次结构。当程序发生不适合时,首先检查最局部的粒是否适合,如果不 适合,替换最局部的粒,否则,检查上层粒是否适合,依此类推。这样,程序的不适合性总可 以局部化到最小,替换付出的代价也最小。3)种子程序,个体程序一个程序的适合性是指该程序的期望上下文与实际上下文之间的匹配程度。GOP 定义最初的程序为个体程序,种子程序是程序演化过程的起点,此时程序中没有粒体、影子 类等,并且程序的类层次是一个树结构。程序执行中如果发现不适合的状况,程序停止,程 序员针对不适合性编写相应粒体和影子类,称加入了粒体和影子类后的程序为个体程序。 网络环境中,多个虚拟机假设最开始运行种子相同的程序,由于所处的具体环境不同,环境 的变化过程不同,所以不适合发生的原因和位置不同,依据GOP程序的演化机制,会在多个 虚拟机上产生不同的个体程序。虽然这些个体程序本身不相同,但是具有相同的种子程序。 当不适合性在某个虚拟机上被发现时,使用种子-个体关联方法,可以在本地或别的虚拟 机上寻找种子程序相同的个体程序,进一步寻找相似粒,将不适合局部化,替换最小的粒。(2)将编写的GOP程序代码通过编译生成个体程序的类字节码文件、粒体字节码 文件、影子类字节码文件、个体配置文件以及该个体程序对应的粒树;将粒体字节码文件和 影子类字节码文件存入粒库,所述粒库是一个保存了所有粒的存储单元;目前实现的GranuleJ系统内部,编译器以粒体、影子类和类文件作为输入,对粒、 影子类和类分别产生二进制字节码作为输出,同时生成种子文件。由于GOP引入上下文变 量、粒体和影子类作为程序的一阶实体,所以字节码需要与标准Java不同,GOP系统设计了 粒体和影子类的字节码,这些实体是标准Java虚拟机不能识别的。参照标准Java和GOP语义,对粒体和影子类分别设计字节码结构。粒体的字节码 结构如下表1所示,影子类的字节码结构如下表2所示表1粒体字节码结构Magic粒体文件魔数,使GVM明白当前加载的是粒体
Version版本信息
Constant—pool与类相同,该项存放了粒体中各种文字字符串、粒名、方
法名等常量
Access—flag指名了粒体的访问标志,粒体统一作为private处理
This—granule指向表示该粒体全限定名称的字符串常量的指针
Super—Granule指向表示父粒体全限定名称的字符串常量的指针
Root—class指向表示根类全限定名称的字符串常量的指针
Fields粒体中声明的字段,不包括粒体对应的根类中的字段
Fitness—Method粒体中唯一的适合性判断方法,返回值类型是boolean型
Attributes该粒体中所定义的属性的基本信息表2影子类的字节码结构
.影子类字节码结构
项描述
Magic.影子类文件魔数,使GVM明白当前加载的是影子类
Version版本信息
Constantjool“存放了影子类中各种文字字符串、粒名、方法名等常量
Access_flag“指名了影子类的访问标志,影子类统一作为pnvate处理
ThiS_claSS.指向表示该影子类全限定名称的字符串常量的指针
GranuleJn“指向表示影子类所在粒体全限定名称的字符串常量的指针
Seed_class“指向表示种子类全限定名称的字符串常量的指针
Fields.影子类新声明的字段,不包括种子类和粒体中的字段
Methods“影子类中定义的方法
Attributes影子类中所定义的属性的基本信息参考表1、表2 影子类字节码中各项与粒中各项相似,不同之处在于,影子类不存 在superclass,此项始终为O。影子类字节码中包含seed_class项来指向shadowclass的 禾中子类seedclass, granule项来指向shadowclass的相关粒granule。(3)通过个体树加载运行步骤(2)得到的个体程序的类字节码文件、粒体字节码 文件和影子类字节码文件,所述类字节码文件、粒体字节码文件和影子类字节码文件运行 在实际上下文下,所述实际上下文的取值实时变化;
(4)动态实时监测的运行程序适合性,若发现不适合现象,中断运行程序,进入步骤(5);若运行程序因未引入的上下文而非正常终止,则进入步骤(9),否则程序继续运行
直至结束;(5)从粒库中查找相似粒,若找到相似粒则进入步骤(6),若未找到相似粒进入步 骤⑵;参考图3 :G0P对于应用领域的粒建立粒库310,粒库中包含了适应不同上下文、 完成不同功能的粒210。步骤(2)生成的类、粒体和影子类字节码和种子文件加载运行,动 态地监测程序所处上下文的变化,实时地根据当前实际上下文选择适合的粒运行,并在某 个粒发生不适合时,从粒库中选择适合的粒320,构建新的目标类330,根据粒的根类信息 321,在执行过程中替换相应位置处331发生不适合的粒,使程序的生命周期延长。(6)以查找或编写的相似粒替换被中断的运行程序中不适合的粒,若相似粒替换 后满足适合性,则进入步骤(8),若相似粒替换后不满足适合性,则进入步骤(5);参考图4 每一次粒的替换都形成新的个体程序410、411,这些个体程序的形态各 异,但都是从相同种子程序演化而来,由个体程序-种子程序关联方法,可以在不同个体程 序间根据位置信息确定相似粒421、422。个体程序中包含许多粒,不同层次的相似粒之间可 以互相替换,由此会形成更多个体程序,这些个体程序被保存入粒库,以提高粒的复用性。(7)编写新的包含相似粒的个体程序,并将新编写的粒加入粒库,进入步骤(6); 如果不编写新的个体程序,进入步骤(10);(8)演化成新的个体程序,被中断的运行程序结束中断继续运行,进入步骤(4);(9)引入新的上下文,编写相应的个体程序,进入步骤(2),如果不编写个体程序, 进入步骤(10);(10)程序终止并且不能再运行。综上所述,GOP是对OOP的完善和补充,并不是对OOP方法的完全替代,GOP继承了 OOP的优点,同时把程序运行环境抽象为上下文变量,根据上下文变量将程序分为相关和不 相关部分,对相关部分通过追加粒来改进,通过粒的适合性监测和替换机制,使得程序的行 为与实际上下文间动态适应。提高了代码的复用性,有效延长程序的生命周期。
权利要求
一种面向粒的程序构造方法,其特征在于,按照以下步骤(1)编写GOP程序代码所述的GOP程序是一个种子程序或个体程序;所述种子程序是一个不与任何上下文相关联且不包含任何粒的程序,所述个体程序是一个与已有上下文相关联的程序,个体程序由种子程序和依附于种子程序的粒组成;(2)将编写的GOP程序代码通过编译生成个体程序的类字节码文件、粒体字节码文件、影子类字节码文件、个体配置文件以及该个体程序对应的粒树;将粒体字节码文件和影子类字节码文件存入粒库,所述粒库是一个保存了所有粒的存储单元;(3)通过个体树加载运行步骤(2)得到的个体程序的类字节码文件、粒体字节码文件和影子类字节码文件,所述类字节码文件、粒体字节码文件和影子类字节码文件运行在实际上下文下,所述实际上下文的取值实时变化;(4)动态实时监测的运行程序适合性,若发现不适合现象,中断运行程序,进入步骤(5);若运行程序因未引入的上下文而非正常终止,则进入步骤(9),否则程序继续运行直至结束;(5)从粒库中查找相似粒,若找到相似粒则进入步骤(6),若未找到相似粒进入步骤(7);(6)以查找或编写的相似粒替换被中断的运行程序中不适合的粒,若相似粒替换后满足适合性,则进入步骤(8),若相似粒替换后不满足适合性,则进入步骤(5);(7)编写新的包含相似粒的个体程序,并将新编写的粒加入粒库,进入步骤(6);如果不编写新的个体程序,进入步骤(10);(8)演化成新的个体程序,被中断的运行程序结束中断继续运行,进入步骤(4);(9)引入新的上下文,编写相应的个体程序,进入步骤(2),如果不编写个体程序,进入步骤(10);(10)程序终止并且不能再运行。
2.根据权利要求1所述的面向粒的程序构造方法,其特征在于,步骤(1)中,所述的上 下文是指支持程序的所有非功能性因素的综合,上下文分为期望上下文和实际上下文,程 序的期望上下文是该程序的理想的运行环境描述,一个程序在自己期望上下文中总是适合 的;实际上下文是程序实际运行的环境的描述。
3.根据权利要求1所述的面向粒的程序构造方法,其特征在于,步骤(1)中,所述粒由 粒名、类名、粒体和影子类构成,其中类名用来表明该粒所依附的类,将该类称为粒的根类, 粒体用来指定粒的期望环境,粒体可以定义自身的成员并且粒体中必须包含一个适合性判 断方法,适合性判断方法返回真或假;所述影子类是对种子程序中与该影子类相同名字的 类的改进,是在不同上下文下类行为的不同体现,并且只是在相应粒体适合性判断方法为 真后才有效。
4.根据权利要求1所述的面向粒的程序构造方法,其特征在于,步骤(2)中,所述的个 体配置文件记录个体程序的类层次结构以及各类依附的粒的XML文件。
5.根据权利要求1所述的面向粒的程序构造方法,其特征在于,步骤(2)中,所述的粒 树反映个体程序所包含的粒和粒的层次的XML文件。
6.根据权利要求1所述的面向粒的程序构造方法,其特征在于,步骤(4)中,所述的不适合现象是指将要运行的程序段所属的粒的适合性判断方法的返回值为假。
7.根据权利要求1所述的面向粒的程序构造方法,其特征在于,步骤(4)中在中断运行 程序时,在安全点中断程序运行。
8.根据权利要求1所述的面向粒的程序构造方法,其特征在于,步骤(5)中,所述的相 似粒是指两个粒在其各自对应的粒树上的所有祖先粒的层次结构相同,且这两个粒依附 的类相同,同时这两个粒对应的上下文名称和次序相同。
全文摘要
本发明公开了一种面向粒的程序构造方法,该方法通过编写GOP程序代码并将该代码通过编译生成个体程序的类字节码文件、粒体字节码文件、影子类字节码文件、个体配置文件以及该个体程序对应的粒树;通过个体树得到的个体程序的类字节码文件、粒体字节码文件和影子类字节码文件。动态实时监测的运行程序适合性,若发现不适合现象,则从粒库中查找相似粒或者编写新的粒加入粒库,以查找或编写的相似粒替换被中断的运行程序中不适合的粒。本发明的方法是在观察程序的不适合性现象的基础上提出的,引入粒作为系统的基本模块,并将程序所处的上下文作为编程要素,通过动态监测,动态替换从而保证程序对于环境的适合性,有效延长程序的生命周期。
文档编号G06F9/45GK101819536SQ20101017283
公开日2010年9月1日 申请日期2010年5月14日 优先权日2010年5月14日
发明者张长军, 曾庆花, 朱常鹏, 李聪, 王一群, 王妮, 赵银亮, 郑双明 申请人:西安交通大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1