2.4.2 笔记
无论建模语言怎样扩展它不可能应用于描述任何事物为了在模型中添加一些额外的模型元素无法表示的信息UML 语言提供了笔记能力笔记可以放在任何图的任意位置并且可以含有各种各样的信息信息的类型是字符串UML 语言不能解释如果某个元素需要一些解释或说明信息那么就可以为该元素添加笔记通常用虚线把含有信息的笔记与图中的一些元素联系起来如图2-12 所示
股票选项
TheorPrice()
MarketPrice()
ExpireDate()
使用B&S 公式
图2.12 笔记图示
笔记中可以包含建模者的注释或问题用以提示建模者防止日后出现不清楚该元素的含义等情况笔记中也可以包含版类版类用于描述笔记的类型版类在下一节的扩展机制中详细叙述
2.4.3 规格说明
模型元素含有一些性质这些性质以数值方式体现一个性质用一个名字和一个值表示又称作加标签值tagged value 加标签值用整数或字符串等类型详细说明UML 中有许多预定义的性质比如文档documentation 响应responsibility 持续性persistence 和并发性concurrency性质一般作为模型元素实例的附加规格说明比如用一些文字逐条列举类的响应和能力这种规范说明方式是非正式的并且也不会直接显示在图中但是在某些CASE 工具中通过双击模型元素就可以打开含有该元素所有性质的规格说明窗口通过该窗口就可以方便地读取信息了
2.5 扩 展 机 制
UML 语言具有扩展性因此也适用于描述某个具体的方法组织或用户这里我们介绍三种扩展机制版类stereotype 加标签值tagged value 和约束constrains这三种机制的更详细的讨论在第七章中进行
2.5.1 版类
版类扩展机制是指在已有的模型元素基础上建立一种新的模型元素版类与现有的元素相差不多只不过比现有的元素多一些特别的语义罢了版类与产生该版类的原始元素的使用场所是一样的版类可以建立在所有的元素类型上比如类结点组件笔记关系关联通用化和依赖UML 语言中已经预定义了一些版类这些预定义的版类可以直接使用从而免去了再定义新版类的麻烦使得UML 语言用起来比较简单版类的表示方法是在元素名称旁边添加一个版类的名字版类的名字用字符串用双尖角括号括起来表示如图2-13 所示版类也可以用一个图形表示比如图标具体的版类元素的图示方法有三种第一种在元素名称之上写版类名这是一般的表示法第二种是在元素名称旁画出版类的图标图形化表示第三种是把元素名称和版类图标合在一起图2-13 图示了这三种表示法
客户
角色
客户
客户
图2-13 版类的图示方法
当一个元素与版类连接在一起后该元素称为指定版类的元素类型比如与版类window 相连的类就称为window 版类的类这意味着该类是window 类型的了当用户定义版类的时候与之相关的类也要定义比如定义window 版类时必须定义window 版类的类图2-13 中的客户是具有版类角色的类由于版类角色添加了特别的语义给客户类所以该类代表的是系统的外部角色用户版类是非常好的扩展机制它的存在避免了UML 语言过于复杂化同时也使UML语言能够适应各种需求很多需求的新模型元素已做成了UML 语言的基础原型prototype 用户可以利用它添加新的语义后定义新的模型元素
2.5.2 加标签值
在2.4.3 节中已讨论过元素有很多性质性质用名字和值一对信息表示性质也称为加标签值UML 语言中已经预定义了一定数量的性质用户还可以为元素定义一些附加信息即定义性质任何一种类型的信息都可以定义为元素的性质比如具体的方法信息建模进展状况的管理信息其他工具使用的信息用户需要给元素附加的其他各类的信息图2-14 表示的是仪器类的性质其中抽象abstract 详细含义见第四章是预定义的性质作者和状态是用户定义的加标签值
仪器
{abstract}
{author=”HEE”}
{status=draft}
value:int
expdate:date
图2.14 仪器类的性质示例
2.5.3 约束
约束是对元素的限制通过约束限定元素的用法或元素的语义如果在几个图中都要使用某个约束可以在工具中声明该约束当然也可以在图中边定义边使用图2-15 显示的是老年人类与一般人类之间的关联关系显然并不是所有的人都是老年人为了表示只有岁以上的人才能加入老年人类我们定义了一个约束条件年龄属性大于岁的人person.age > 60 有了这个条件哪个人属于这种关联关系中也就自然清楚了反过来说假如没有约束条件这个图就很难解释清楚在最坏情况下它可能会导致系统实现上的错误在上述例子中约束被直接定义和应用在了需要使用的图上当然也可以用名字加规格说明的方法定义约束比如老年人和person.age > 60 UML 语言中预定义了一部分约束这些约束的具体内容在第七章中讨论
老年人
0..1
人
0..*
{person.age>60}