论文部分内容阅读
设计模式(Design Patterns)是软件工程中的一个重要概念,其基本思想是对面向对象设计中的常见问题进行描述,并给出优良的解决方案,使得设计师在遇到类似的问题时可以重用优良的解决方案,从而实现在设计层次上的复用。每个模式中所描述的解决方案都具有易于理解、方便维护、易于扩展等优点,因此,模式在软件系统中的使用十分普遍,已经成为开发人员进行设计交流的重要工具和手段。然而,由于传统的模式描述使用非形式化的方法(例如,在经典的模式描述中[98]采用半形式化的UML图以及自然语言的注释对模式进行描述),使得对同一个模式的理解出现歧义。另外,由于缺乏相关的抽象机制,许多模式相关的本质概念无法得到正确的描述与体现。最后,由于采用了非形式化的描述,无法对模式的描述进行自动的处理以及提供相应的工具支持。与此同时,在广泛的模式应用中,人们逐渐总结出了模式应用中经常需要处理的问题,称为模式相关问题(Pattern-related Problems)。模式相关问题包括描述的实例化、模式的演化、模式的实现等。这些问题与模式的描述紧密相关,是模式应用中所必须处理的问题。同样,由于模式的非形式化描述,也无法对模式相关问题进行自动处理,从而使得模式的使用变得低效,易于出错,同时也消耗了设计人员的开发精力,使其无法专注于核心的业务逻辑。因此,针对模式的形式化问题,本文进行了如下研究:·采用定理证明器Coq(The Coq Proof Assistant)对模式的结构进行形式化的描述。描述过程中,本文采用Coq的模块管理系统,将每个模式定义为一个抽象的模块类型(Module Type),每个模块类型的定义中包含了对模式的基本结构和结构规范。·在对模式的基本结构进行描述时,本文提出采用记录类型,并结合多态集合的概念,将模式的结构参与者分为单一参与者和集合参与者。这种区分为松耦合地处理模式的相关问题提供了基础。其中,模式的实例化问题可以归结为对单一参与者的处理,而模式的演化问题可以归结为对集合参与者的处理。同时,这种区分也为用面向方面建模(Aspect-Oriented Modeling,AOM)的思想处理模式相关问题奠定了基础。·在基本结构的基础上,采用Coq的高价逻辑,通过定义一系列的简单关系和复杂关系,对结构参与者之间的结构关系进行精确的描述,从而获得模式的结构规范。·采用元建模的方法,在工业级的建模框架Eclipse建模框架(Eclipse Modeling Framework, EMF)中实现了Coq中的形式化描述,为模式的实际使用提供工具支持。模式的基本结构和结构规范构成了模式的形式化描述。基于模式的形式化描述,可以对模式的相关问题及其解决方案进行形式的研究。本文所研究的模式相关问题包括:模式的实例化、模式的演化和模式的实现。针对每个问题的特点,本文提出以下解决方案:·对于模式的实例化,本文定义相应的模块类型,每个模块类型中定义该模式的实例化函数。实例化函数接受模式结构的可变点作为参数,返回模式的单参与者结构,且确保该结构满足模式的结构规范。利用Coq的规范语言,对实例化函数的正确性规范进行描述,并利用Coq的证明系统证明实例化函数满足该规范。·对于模式的演化,本文同样定义模块类型,并根据模式的结构特征,对模式的演化规则进行抽象,并在Coq中以演化函数的形式进行描述。每个演化函数返回集合参与者结构且确保该结构满足模式的结构规范。基于模式的结构规范,在Coq中定义每个演化函数的正确性规范,并同时在证明系统中证明演化函数的正确性。·对于模式的实现,本文采用情态演算的基本概念,将运行时的模式视为情态演算所描述的动态系统,并将模式的相关方法理解为动态系统中的动作。根据情态演算的基本思想,动作的基本功能是动态系统中的动态关系的真假值。因此,本文显示地提出了模式的动态关系的概念,情态演算的动作理论能全面而精确地描述模式的行为,从而弥补了传统模式描述在概念上的缺失。·针对每个模式相关问题及其解决方案,本文都提供了相应的EMF的实现,从而构建了一个模式管理系统(Pattern Management System)的原型。总之,本文在Coq系统中对模式的形式化描述和其相关问题进行了深入而全面的研究,并且在EMF中实现了相应的概念,为模式在实际软件开发过程中的使用提供了有效的工具支持。