为了避免UML语言整体的复杂性,UML没有吸收所以的面向对象的建模机制和技术而是设计了扩展机制,通过扩展机制用户可以定义使用自己的元素。在前边介绍UML构成的时候,提到了UML的扩展机制(extensibility mechanism):版型(stereotype)、标记值(tagged value)和约束(constraint)。在很多情况下我们利用UML的版型这种机制对UML进行扩展,使其能够应用到更广泛的领域。
1、什么是版型
版型是建模元素的一种类型,扩展UML的语义。版型必须以UML中已经定义的元素为基础,可以扩展语义但不能扩展已存在的元素结构。版型不是给元素增加新的属性或约束,而是直接在已有元素中增加新的语义,这种机制可以看作是已有元素进行专有化。版型的表示方法是在模型元素的旁边添加一个版型的名称,版型名称使用双括号括起来,《版型名》。版型是一种非常好的扩展机制他避免了UML语义过于复杂化,同时也使得UML能够适应各种需求。
通常人们在特定方法或特定的应用领域中使用UML时,会使用版型。有些概念、方法或特定领域特有标注UML不支持,用户就可以自定义。自定义版型时需要作以下工作:描述自定义版型的基础是哪个元素;对该元素语义的影响;给出使用该版型的例子。
利用UML的扩展机制对UML进行扩展是已经非常有意义的工作,有时我们需要使用UML来建模,但是UML本身提供的元素满足不了我们的需要,此时并不意味者UML没有用了,而是需要我们应用UML的扩展机制来实现自定义元素,从而实现建模。
1.1 数据建模
我们在进行数据建模时经常使用的建模工具是ERWin、Power Designer、ERStudio等。既然UML功能强大使用UML可以进行数据建模吗?当然可以,此时我们需要UML的扩展机制。对于关系型数据库来说,可以用类图描述数据库模式,用类描述数据库表,用类的操作来描述触发器和存储过程。
进行数据库设计时有一些关键概念我们需要用UML来表示,他们是模式(schema)、主键、外键、域、关系、约束、索引、触发器、存储过程、视图等。从某种意义上说,使用UML进行数据库建模就是要确定如何使用UML中的元素来表示这些概念。同时考虑引用完整性、范式等要求。下面是使用版型来表示这些元素。
数据库中的概念
版型
对应UML元素
数据库
《database》
组件
模式
《schema》
包
表
《table》
类
视图
《view》
类
域
《domain》
类
索引
《index》
操作
主键
《PK》
操作
外键
《FK》
操作
唯一约束
《Unique》
操作
检查约束
《check》
操作
触发器
《trigger》
操作
存储过程
《SP》
操作
表之间非确定性关系
《Non-Identifying》
关联,聚合
表之间非确定性关系
《Identifying》
组合
1.2 Web建模
对Web应用程序建模时需要利用UML的扩展机制对UML的建模元素进行扩展,对Web建模主要是利用了UML的版型这个扩展机制,在类和关联上定义一些版型以解决Web应用系统建模的问题。Jim Conallen提出的扩展方法影响比较大,称为WAE(Web application extension for UML)。WAE定义了一些常见的Web建模元素的版型,但他并没有也不可能预先定义所有的版型,如果我们在开发中遇到WAE没有提供的版型,完全可以根据UML的扩展机制定义自己的版型。
1.3 业务建模
用UML进行业务建模需要对UML做一些扩展,可以通过在UML的核心建模元素上定义版型来满足业务建模的需要。目前用的比较多的是Eriksson和Penker定义的一些版型称为Eriksson-Penker业务扩展。Eriksson-Penker扩展方法主要是利用UML的扩展机制对UML的核心元素进行扩展,这些扩展可分为几个方面的内容:业务过程方面的元素、业务资源方面的元素、业务规则方面的元素、业务目标方面的元素以及其他一些元素。
2、标记值
标记值是一对字符串包括标记字符串和值字符串也就是一个键值对,它存储着有关元素的一些信息。标记值可以与任何元素相关联,包括模型元素和表达元素。标记表示建模者想要记录的名字,值是给定元素的值。通常使用类似下面的方式表示:
{Name=“Tom”}
如果标记是个布尔类型,可以省略其值,默认为真。除了布尔类型以外其它的类型都必须明确写出值。
3、约束
约束是用文字表达式表示的语义限制,它应用于元素。约束显示在{}内,可以直接放在图中或者独立出来。约束可以是UML预定义的,也可以之自定义的。描述约束的语言可以是正式的数学符号、OCL语言、伪代码或自然语言。如果这种语言是非正式的,那么它的解释也是非正式的,并且要由人来解释。即使约束由一种正式语言来表示,也不意味着它自动为有效约束。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/royal_coffee/archive/2007/01/28/1496318.aspx