1. 概述
类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。是定义其他图的基础,在类图的基础上可以使用状态图、协作图、组件图和配置图等进一步描述系统其他方面的特性。
类图包含的主要元素有类、接口、协作和关系。其中关系有依赖关系、泛化关系、关联关系和实现关系,类图也可以包含注释和约束,还可以包含包或子系统。
图1 类图模型
2. 类
2.1 类的表示
类是类图的主要组件,由3部分组成,即类名、属性及操作(或称为方法)。在UML中,类用矩形来表示,顶端部分存放类的名称,中间部分存放累的属性、属性的类型及值,底部部分存放类的操作、操作的参数和返回类型。
图2 User类图
User类具有两个属性,即username和password,数据类型都是String类型,User类还包含一个方法Login(),返回类型为Boolean。在UML中可以根据实际情况来选择隐藏属性部分或者操作部分,或者两者都隐藏。
2.2 类名
类名的首字母需要大写,如果类名由多个单词组成,则将这些单词合并,并且每个单词首字母大写。
2.3 属性
类的属性用于描述对象的特征,是类的一个组成部分。类可以有任意数目的属性,也可以没有属性。属性可以具有不同的可见性,即public、protected、默认、private。
2.4 操作
操作用于操纵属性或者执行其他的动作。通常把操作称为函数,但操作是位于一个类的内部,并且只适用于该类的对象。操作由操作名称、返回类型和参数组成。其中返回类型、名称和参数一起被称为操作签名。操作签名描述使用操作时所必须的所有信息。类的操作也有可见性和范围。
3. 接口
3.1 接口的表示
接口是在没有给出对象的实现和状态的情况下对对象行为的描述。接口包含操作不包含属性,没有对外界可见的关联。一个类可以实现一个或多个接口,并且所有的类都可以实现接口中的操作。
3.2 实现接口
图3 实现接口
上图定义了Callback接口,Client类实现了Callback接口,TestFace类调用了Callback接口中的方法。
4. 关系
4.1 泛化关系
泛化的定义是一种存在于一般类别和特殊类别之间的分类关系。特殊类别的每一个实例也是一般类别的一个实例。因此特殊类别间接的具备了一般类别的各种特征。在编程语言中,通过从一般类(父类)到特殊类(子类)的继承类实现泛化。例如,男人类继承人类。
4.2 高级泛化关系
4.2.1 泛化组
UML提供了一个用于组织父类和子类之间各种不同关系的特征,即泛化组。泛化组是父类的划分规则,使建模人员可以从一个公共父类继承几组不同的子类。父类可以有一个或多个泛化组,用来表达子类可以有多种不同方式继承父类。
图4 泛化方式一 图5 泛化方式二
4.3 依赖关系
依赖关系表示一个模型元素(客户方)需要另一个模型元素(供应方)来达到某种目的,供应方的修改会影响客户方的执行结果。依赖关系表明一个客户方如果没有供应方的支持是不完整的。
图6 依赖关系
4.4 关联关系
4.4.1 表示
关联关系是一种结构关系,指明一个事物的对象与另一个事物的对象之间的联系。关联关系反映了对象之间相互依赖、相互作用的关系。
图7 关联关系
图8 关联关系中的角色
图9 多个类与一个类相关联
图10 为关联添加约束
有时两个类之间关联后有一个规则,可以通过关联线附近加注一个约束来说明。例如,医生给病人看病,但看病的顺序要按照病人挂号的顺序进行。所以再病人的附近用花括号加一个“ordered”来指明这个规则,即约束。
图11 多重性
一个医生可以给多名病人看病,就是关联的多重性。可以在关联线下方注明多重性的数值。
表示法 | 说明 | 表示法 | 说明 |
0 | 表示0个对象 | 1..n | 表示1~n个对象 |
0..1 | 表示0~1个对象 | n | 表示n个对象 |
0..n | 表示0~n个对象 | * | 表示许多对象 |
1 | 表示一个对象 |
4.4.2 聚集
聚集是一种特殊的关联。表示一个类是由几部分组成的。部分类和由它们组成的类之间是一种整体与部分的关系。
图12 聚集关系
上图表明,人只有一个脑袋。菱形连线从部分指向整体。
4.4.3 三重关联
两个以上的类相互关联称为三重关联。
原文:http://blog.csdn.net/studynote/article/details/21799057