状态机
添加到UML2.0中的主要新特性与之前的案例非常相似。基本思想是它可以创建一个复合状态的完整模块,它具有清晰的转换入口点和出口点。反过来,你也可以通过一个离散的和可重复使用的状态机的规范来分别地定义上述的复合状态的内在分解。也就是说,在这个状态机或某些其它的状态机中,相同的规范可以在多处重复使用。这样使得在不同上下文中的共享行为模式的规范更加简单化。
在UML2.0中另一个著名的状态机创新是在一个类与它的子类中继承的状态机的分类。
语言特殊化能力
UML1的实践表明了应用UML的一个相当通用的方式是,首先为一个特定的问题或领域定义一个UML Profile ,然后用这个 Profile 代替普通的UML。实质上,这些 Profile 就是一种生成像特定领域语言(DSL)的方法。
使用UML Profile 的一种可选择的办法是使用MOF标准和工具定义一种新的自定义模型化语言。后者的方法显然有很大的优势,它具有语言定义功能,这种定义可以以最佳的方式解决手头的问题。乍看上去,这种方式似乎是DSL定义的首选方式,但是进一步的观察会发现这种方法存在严重的缺陷。
如简介中所提到的,过多的差异会导致分裂性问题的出现,而设计UML的目的正是要消除这类问题的。
幸运的是,Profile 机制在这里为许多实际的案例提供了一个便利的解决方案。这是因为在不同的DSL之间存在相当多典型的公共部分。例如,实际上任何一个面向对象的建模语言都需要定义类,属性,关联,相互作用等概念。UML,作为一种多用途的建模语言,正好提供了这个便利和有用概念集合的谨慎定义。对多数可能的DSL来说这正是一个好的起点。
但是在这里不仅仅只是概念上的复用,因为从定义的角度,一个UML Profile 必须与标准UML保持一致。换句话说,一个UML Profile限定了标准UML的概念。这种限定是通过定义上的限制来限制那些给它们提供一种唯一的特殊领域解释的概念。例如,一个限制可能不允许多重继承,或者是它可能需要一个类必须具备一个特殊的属性类型。这就意味着:
任何一种支持标准UML的工具可以基于上述的 Profile 来操纵模型。任何有关标准UML的知识和实际经验都可以之间应用。因此,大多数的防止差异上的分裂问题可以完全地减轻或是甚至避免。这种推理方式带来了国际化标准,是形成SDL【ITU02】的原因――这个SDL广泛地在电信上使用――从而重新将SDL定义为一个UML Profile 。【ITU00】【ITU03】。
这并不是说任何一个DSL都能并需要被实现成一个UML Profile ;确实存在很多的案例说明UML可能缺少必备的可以被转换到相应DSL概念中的基础性概念。尽管如此,UML通用性可能比许多人所想象的更广泛。
基于上述考虑,在UML2.0中的 profiling 机制已经被合理化并且它的性能也已经被扩展了。在原型和UML概念之间的连接已经被扩展了。事实上,一个UML2.0原型被定义成好像它仅仅只是一个现有UML元类的子集,并带有关联的属性(代表加有标签的值的标签),操作和限制。这个机制使用比如像OCL这样的语言描述那些限制,它已经被充分的说明了。
除了限制个别的建模概念以外,一个UML2.0框架同样可以明确的隐藏UML概念,从而使得在一个给定的DSL中没有任何意义和必要最后,UML2.0 profiling 机制同时也可以用作一种机制,它可以从多种不同的域中观察到一个复杂的UML模型――从特定的角度――通常不一定具有DSL。也就是说,任何一个profile 都可以有选择性的以任何方式被应用或是不被应用,只要不影响基础的UML模型。例如,一个性能工程师可能会选择在模型之上通过将多种与性能相关的方法与模型元素连接,来应用一种性能模型化解释。然后可以通过一个自动化技术性能分析工具来决定。
文章来源于领测软件测试网 https://www.ltesting.net/