论文部分内容阅读
OOP语言虽然为提高软件模块化程度发挥了极大作用,但其局限性也越来越多地受到关注,它们大多都是由于其数据封装所导致的对象灵活性缺失而造成的。为了解决这些问题,研究人员逐渐设计开发了一些新的程序设计语言,例如基于角色模型的程序设计语言、面向方面程序设计语言、动态程序设计语言等等。这些语言拥有各自不同的功能特征和运行机制,能够分别改善传统OOP语言的若干局限,但各自独立的编程模型又为开发人员的使用带来了不便。我们希望能够基于一种统一的编程模型来改善OOP模型中的局限性,使得程序设计语言能够更加强大、灵活、动态。对象代理模型是一种在面向对象系统中融入了代理机制的数据模型,它在对象创建、操纵、组合等方面所表现出的多样性和灵活性正好可以作为这样一种底层模型,为我们所期望的语言功能提供一种统一的功能框架或运行基础。本文对基于对象代理模型的程序设计语言ODPL的设计和实现进行了深入研究,其中研究的内容和创新工作主要包括以下几个方面。(1)将对象代理模型从数据库领域移植到程序设计领域对象代理模型用于改善面向对象数据库领域对复杂数据的建模、存储、查询等需求,增强了复杂数据的表现多样性和灵活性。本文基于对象代理模型的功能特征,结合OOP领域的技术现状,将该模型应用于程序设计领域,设计实现了对象代理语言ODPL。该语言能够改善由于OOP模型的数据封装性所导致的对象灵活性缺失问题,能够更好地满足应用开发中的动态性需求。在ODPL中,代理类能够以不同的代理语义与源类形成代理继承关系,由此形成的类层次体系可以表达丰富的类间关联,适应更加多样化的应用场景。选择型代理类能够为满足特定条件的源对象创建代理对象,为其扩展或屏蔽指定的属性或方法,不但能实现OOP模型中的父子继承机制,还提供了更强的动态性和灵活性。联合型代理类能够同时为多个源类扩展相同的行为,改善了OOP模型中只能自上而下逐层特化的开发模式。连接型代理类用于连接两个或多个源类,其实例可以用来表达多个源对象之间的关联关系,而OOP模型却没有相应的程序实体来对对象间关联进行直接建模。分组型代理类则为对象集合提供了统一的管理和操作界面,对分组成员的维护和访问可以借助分组型代理类的实例来自动完成,简化了程序的开发工作。ODPL可以看做是基于角色模型或AOP的程序设计语言,运用其中各种类型的代理类能够提供角色模型或AOP的很多功能特征,这也使其应用范围能够得到进一步的扩展。(2)针对对象代理模型的功能进行了强化和扩充结合实际应用的需要,在ODPL的设计实现过程中,针对对象代理模型的部分功能进行了强化和扩充。首先,在代理对象自动创建机制的基础上强化了自动销毁机制,将创建条件与销毁条件相分离,使得代理对象可以在一个有效地条件区间内存在。其次,代理对象创建条件和销毁条件的分离也使得代理对象的手工和自动创建方式得到综合统一,自动创建的代理对象能够手工销毁,而手工创建的代理对象也能够被系统自动销毁,这使得能够更加灵活地控制代理类的使用。另外,ODPL还实现了源类与代理类的融合操作,如果一个源类拥有多个处于同一级别的直接代理类,可以通过融合操作使其中某个代理类与源类之间具有比其它代理类更为紧密的逻辑关联,就好像直接把代理类的功能插入到源类中去一样,使它们在逻辑上合并为一个类。(3)提出了基于前置对象机制的ODPL运行时结构现有角色模型以及AOP语言的实现大多是在现有OOP语言的基础上进行语法层面的改造和扩充,OOP语言的运行时结构并不能对这些语言的功能提供直接支持。我们在ODPL的设计实现中提出了基于前置对象机制的运行时结构,对象间的消息能够通过前置对象得到传递,使得系统能够正常运行。前置对象机制的优点在于,ODPL中所需的各种动态功能和消息响应机制能够从机器模型的层面上得到直接支持,程序中所涉及的一些新概念和程序结构不再需要在运行时映射转换为OOP模型中的底层结构。前置对象机制还为源类与代理类的融合提供了简洁方便的实现,不但可以实现源类与代理类的融合,还可以快捷地进行反向操作以解除融合。融合操作过程只需通过简单的指针操作来完成,并不需要改变任何源代码,也不需要执行复杂的动态重编译就可以高效地执行,进一步增强了程序的动态性和灵活性。这种运行时结构可以作为角色模型或AOP语言的统一底层实现机制,为这类语言提供强大的动态性和灵活性,并降低语言实现的难度。(4)详细制定了ODPL的语法规范和语义描述本文还详细制定了ODPL的语法规范及其语义描述。从语法上看,ODPL源程序代码保持了标准的Java语法,并采用Java 5中的标注机制来描述代理类的各种代理信息,这样就不需要在Java语言中增加专门的关键字或语法模块来表达ODPL中新增的概念和结构,简化了新语言的实现难度。另外,ODPL中的大量操作都是基于源对象与代理对象之间的双向指针执行的,为了准确表述相关功能机制,我们对语言中的环境状态、对象检索、消息传递、类型匹配等操作都力图给出准确的形式化描述。由于操作语义独立于语法结构,因此也可以在本文所描述的操作语义基础上,将ODPL移植到其它语言平台上,甚至可以针对ODPL设计一套全新的语法结构。