论文部分内容阅读
泛型程序设计是一种重要的程序设计风范,它强调使用概念进行程序设计,追求抽象和效率的和谐统一,以易扩展、易交互的方式表达算法、数据结构及其它软件概念的抽象表示和系统组织,在业界得到了越来越广泛的关注和应用。
将非泛型风范的遗产软件重构为泛型软件,有利于提高软件的复用性、类型安全性;对泛型软件做进一步重构,支持其演化,可以改善代码结构,提高软件质量。本文对泛型程序重构模型、非泛型程序实例重构、泛化关系重构、面向概念的重构等泛型程序重构的关键问题进行了深入研究。
本文主要研究成果包括:
(1)为了解决重构正确性分析问题,提出了一个泛型程序重构模型,并分析了常见重构的目的、步骤和实施效果。在这个模型下,重构可以分为三个部分:前置条件、程序变换和后置条件。使用前置条件和后置条件来表达重构的保行为性质,可以基于这个模型分析重构前后程序行为的一致性。我们给出了若干常见的泛型程序原子重构的分析函数,用于表示软件重构的前置条件和后置条件,分析探讨了重构的语义。此外,我们对常见的泛型程序重构进行了分类总结,从重构的复杂性角度将常见重构分成三类:基本重构、面向概念的重构和设计模式的重构。
(2)针对现有泛型实例重构方法效率不高的问题,提出了一种基于泛型变量类型传播分析的重构方法。在高效的变量类型传播分析方法基础上,通过改进类型传播图的构造,实现了高效地重构。解决了在类型传播图上表示类型参数的类型传播问题,使用拷贝节点方式实现了泛型变量属性敏感的分析,精度比基于属性的传统变量类型传播分析更高。研究了Java程序泛型实例重构中的别名问题。别名可能造成类型传播分析中的隐式路径,降低分析的精度。探讨了一种基于约束合并的别名分析方法,通过消除别名,提高了重构的精度。
(3)提出了一种基于类型约束分析的泛型类重构方法,解决了现有方法不考虑参数化类型的类型约束,会在重构中引发类型错误的问题。研究了如何将面向对象软件重构中的泛化关系重构,如提炼接口、提炼父类(子类)、成员移动等,应用于泛型软件,支持泛型软件的演化。我们深入研究了泛型程序的类型约束规则,提出了一种基于类型约束的泛化关系重构方法,可以保证重构后程序的类型正确性。
(4)提出了一种基于源代码使用约束分析的面向概念的C++程序重构方法。概念是新的C++标准C++Ox中出现的语言新特性,从遗产软件中抽取概念,并将遗产软件重构为符合C++Ox标准的代码,对软件的优化、维护都具有重要意义。在深入研究概念的定义和表示基础上,探讨了如何从遗产软件中提取有效表达式和关联类型约束,作为构成概念的组成部分,从而发掘出遗产软件中的概念,并实施重构。与现有方法相比,我们的方法通用性更高,不仅适用于函数模板,也适用于类模板,此外,考虑了由于继承、函数调用、别名等因素造成的约束,以及关联类型约束,提高了约束分析的精度,结果更接近于C++Ox标准的代码。