UML 高级类
1. 定义
对任何OO的系统而言,类的确是最重要的构造块.然而,在UML中更一般的构造块是类元,类仅仅是一种类元.
类元(classifier)是一种描述结构特征和行为特征的机制.
类元包括: 类,接口,数据类型,信号,构件,节点,用况和子系统.
2. 术语
2.1 类元
一般而言,有实例的建模元素被称之为类元.更重要的是类元有结构特征(以属性的形式)和行为特征(以操作的形式).
常用的类元有:类,接口,数据类型,枚举类型,信号,构件,节点,用况,子系统.
2.2 可见性
公用的:用’+’做前缀
私用的:用’-’做前缀
保护的:用’#’做前缀
UML的可见特性与大多数OO语言的语义相匹配.
2.3 范围
对类元的属性和操作进行详述的另一个重要细节是其拥有者的范围.UML中可以说明二种范围:
1) 实例 对于一个特征,类元的每个实例均有它自己的值
2) 类元 类元的实例只有该特征的一个值.
范围为类元特征的名称下面有一条下划线.
C++类中的静态的属性和操作就是UML中类元特征的映射.
2.4 抽象、根、叶和多态元素
没有任何父类的类称为根类.通过在类名的下面写一个特性”root”来指明.
没有任何子类的类称为子类. 通过在类名的下面写一个特性”leaf”来指明.
UML中,如同抽象类一样,通过把操作的名字写为斜体来指明这个操作是抽象的.
抽象操作映射到C++中称为纯虚操作.
2.5 多重性
把一个类可能有的实例数目称为多重性.
在UML中,可以通过在类图标的右上角写一个多重性表达式来指定一个累的多重性.(关联也有多重性).
多重性也可以应用于属性.可以通过在属性名后面的方括号内写一个合适的表达式来指定属性的多重性.
2.6 属性
大多数抽象层次上,只需表明属性的名称即可.但也可以对属性的信息进行详细描述.
在UML中,属性的完整语法形式为:
[可见性]属性名[多重性]:[类型][=初始值][{特性串}]
#name[0..1]:string
UML定义了三种用于属性的特征:
1) 可变(changeable): 对修改属性的值没有约束
2) 只增(addOnly):对多重性>1的属性,可以增加,但一旦被创建,就不可消除或改变
3) 冻结(frozen):在初始化对象后,就不允许改变属性值
冻结特性映射到C++中称为常量(const)
2.7 操作
大多数抽象层次上,只需表明操作的名称即可.但也可以对操作的信息进行详细描述.
在UML中,操作的完整语法形式为:
[可见性]操作名[参数表][:返回类型][{特性串}]
+getID(n:Name,s:String)
特性有:
1) 查询(query)
2) 顺序(sequential)
3) 监护(guarded)
4) 并发(concurrent)
后三个特性表达了操作的并发语义.
参数的完整语法形式是:
[方向]参数名:类型[=缺省值]
方向可以是: in, out, inout
注意:UML对操作和方法进行了区分.操作详述了一个可以由类的任何一个对象请求以影响行为的服务;方法是操作的实现.
2.8 模板类
UML中也能对模板类建模.
模板类的画法和普通类一样,只是在类图标的右上角带有一个附加个虚框,虚框中列出模板参数.
有两种方法可以对模板类的实例建模:
1) 隐式: 声明一个起名称提供了绑定的类.如:
Map<Customer, 3>
2) 显式:用一个被构造型化为<<bind>>的依赖来表明.
2.9 标准元素
UML的扩展机制,用途较少,略过不提.