UML 2.0之路:快车道还是绕行? UML已经被迅速和广泛地接受,但UML 1.X系列修订版从来没有离开过批评。在2000年6月国际年会的讨论中,指出了它的很多缺点。这之后UML又经历了几个里程碑,2000年9月,OMG发布了3个UML 2.0提案需求,详述了对下一次重大修订的RFP。今年2月,UML 1.4修订任务组提交了UML 1.4规范的最终草案。对UML 2.0的重大修订到底进行得如何?Cris Kobryn于2001年4月在《SOFTWARE DEVELOPMENT》上发表了本文,分析了UML 1.4的改进以及UML 2.0的修订状况。
最后的1.X系列
在历经17个月的讨论和解决问题之后,第二个UML修订任务组在今年2月结束了它的工作,并提交了一份名为《OMG UML V1.4:修订和建议》的报告。
UML 1.4中最有意义变化的是对外围和扩展机制、构件和制品以及协作和模式方面所做的改动。对外围和扩展机制结构的修订是为了使用户和开发商能正确、有效地定制UML;修正构件建模结构是针对当前基于构件开发的需求;修正协作建模结构则是为了改善语义组织并支持从属协作。

对扩展机制所做的改进包括用图形表示法和表格来描述构造型和标记值定义,对这些表示法的更新是为了支持大而复杂的外围,比如与企业分布式对象计算和企业系统集成RFP的提议相关的那些外围。图1定义了一个构造型《Persistent》,它可以用来详细说明其实例能永久地存储在数据库中的类。《Persistent》基于UML元模型中的元类Class,包括三个用于Table、DB和isContainer的标记定义(同性质列表中的性质相对比)。表1则显示了同一个构造型及其中一个标记定义(Table)的表格形式。

提议对构件的修订则致力于允许建模者在软件生命周期的早期阶段详细说明构件,并且增强了对EJB和COM+的支持。在修订的版本中可以更容易地区分可执行构件(如EJB Entity Bean、Com Objects等)和实现它们的制品(如EJB JAR文件、DLL等)。图2显示了一个构件图示例,其中包括构件ShoppingCart、ShoppingSession和Catalog。有意思的是ShoppingCart还包括三个寄居在其中的类:ShoppingCart、ShoppingCartPK("PK"表示主关键字)和ShoppingCartInfo。ShoppingCart类用关键词《focus》标记,表明它是类的构造型《focus》的实例。同样地,在ShoppingCartPK和ShoppingCartInfo上的关键字《auxiliary》表明它们都是构造型《auxiliary》的实例,《auxiliary》也是类的构造型。构造型《focus》和《auxiliary》通常成对地使用,用以区别定义核心逻辑或控制流的类(例如中心类)和使用次要的逻辑或控制流的那些类(例如辅助类)。这些构造型对定义类簇通常很有用,特别是在设计或分析阶段。对构件、模式和框架建模感兴趣的读者,可以参考构件工作组的网页(www.celigent.com/omg/umlrtf)。

UML 1.4的最终报告曾提到,由于UML 2.0 RFP的提交工作已经开始,应该考虑把UML 1.4作为UML 1.X系列最后的较小修改版。不过有一个例外,那就是集成UML RFP行为语义的最终提案,这一计划将在完成UML 1.4之后提交UML 2.0初稿之前完成。
修正路标
自去年举行的UML WORLD 2000讨论会以来,在UML的演化上最令人关注的发展之一,就是OMG决定将UML 2.0的工作划分为几个互补的、在系统体系结构上密切合作的RFP:底层结构RFP、上层结构RFP和对象约束语言(OCL)RFP。将需求分类的好处在于使规范成果更加模块化,并能同时进行这些修订。不过这也对维护体系结构的完整性提出更大的挑战,并且会导致更多的集成开销。
1.UML 2.0底层结构RFP
这个RFP致力于改进UML体系结构基础,包括其核心和扩展机制。其他的UML 2.0 RTP 将在此基础上对上层结构和相关的设施(例如图形交互设施)进行修订。这个RFP的需求包括:在体系结构上改进与其他OMG建模规范的接口,例如MOF和XMI;重新构造该语言,使其容易理解、实现和扩展,当然仍保留已被证实的语义和表示法结构;提供一级扩展机制(特别是元类)以及与元模型体系结构一致的外围。
2.UML 2.0上层结构RFP
该提案要求改善对软件开发最优方法的支持,例如基于构件的开发、企业过程建模、体系结构建模和可执行的模型。它要求对很多体系结构和行为建模构造进行修订,特别是在以下领域:
● 改进对基于构件开发的支持,包括构件装配和运行时替换,能详细描述用于主流构件体系结构(例如:EJB和COM+)的执行容器和外围。
● 增强对运行体系结构的支持(与可执行模型相比),包括对层次结构和动态行为的规范。
● 精化关系语义,包括泛化、关联和依赖关系。
● 改进对行为建模的封装和度量,特别是状态图和交互图。
● 精化与事件管理以及控制和对象流规范相关的活动图语义。
由于上层结构RFP在相当大程度上依赖底层结构RFP,计划底层结构RFP在上层结构RFP之前完成。
3.UML 2.0对象约束语言RFP
本RFP主要关心与UML元模型密切联系的OCL元模型的定义。增加了OCL实现的精确性和一致性,并且便于在UML工具中交换OCL约束。尽管底层结构和上层结构RFP都可能使用OCL描述它们的形式化规则,但它们并不依赖于OCL RFP。
就在本文的写作阶段,OMG又成立了第四个RFP:UML 2.0图交换RFP。其目的是在建模工具之间交互模型图,也包括布局。(UML 1.4模型交换规范是UML 1.4的一部分,但它只描述了语义而没有图交换。)
是快车道还是绕行?
虽然UML 1.X系列的发展势头渐减,UML 2.0正在崛起,但现在预测UML 2.0的提交过程是否会进展迅速还为时过早。标准化的过程是正式而漫长的,它需要寻求不同范围的技术和商业需求的融合,没有理由认为UML 2.0的提交过程将是一个例外。除了前面已经提到的关于集成多个RFP的问题之外,提交者还会遇到很多其他的挑战,其中包括:
● 在体系结构上与其他的OMG元模型体系结构的协作性 像UML一样,MOF和XMI也在不断改进,因此应该注意修订周期中的协调问题。
● 与元模型相对的外围 在UML 2.0中,一级扩展机制(在用户层次上的元类)的引入,将进一步检验用于描述平台和领域定制语言的方法,这些方法多种多样,而且都很具竞争力。
● 体系结构建模 尽管都认为体系结构是个很好的概念,应该在这方面多做些工作,但对于它是什么以及应该怎样描述它,在工业上达成的一致意见并不多。
● 行为语义的集成性 没有明确将最终提交版与UML RFP的行为语义集成需要做多少工作。
● 在体系结构上与其他规范的结合 例如与SDL-2000和EXPRESS的结合。应从其他规范中借用有用的概念,并在技术上进行综合。
尽管面临很大挑战,但到目前为止,至少在体系结构上已经证明OMG在UML 1.X上的道路是可行的,没有理由怀疑它会在UML 2.X系列中为我们提供有效的指引。