1.基本元素:类、类之间的关系
2.类图是用来描述系统结构的静态模型
3.类
类是对一组具有相同属性、操作、关系和语义的对象的抽象
包括类名、属性和类的方法
在uml图中用矩形框表示
1)名称
在矩形框最上面
不能省略
是由字符、数字、下划线组成的唯一字符串
表示方法:1.简单名:只有一个名称
2.全名(路径名):包名:类名
2)属性
可以有0个或多个
语法:【可见性】属性名【:类型】【=初始值】【{属性字符串}】
可见性:+表示公有,-表示私有,#表示受保护,没有则就是未定义,不存在默认的可见性
属性名:一个名词或名词短语,单个单词首字母大写,多个单词除第一个单词其余首字母大写
类型:数据类型,就像之前了解到的任一语言,如string是字符串,float是浮点型等等
初始值:为了防止漏掉取值或非法取值破坏系统完整性来设置
属性字符串:关于属性的其他信息,任何想加入但是没地方加的都可以加这里
3)操作(类的方法)
可以有0或多个
语法:【可见性】属性名【(参数表)】【:返回类型】【{属性字符串}】
可见性:+表示公有,-表示私有,#表示受保护,~表示包内公有类型,没有则就是未定义,不存在默认的可见性
操作名:一个动词或动词短语,
参数表:是操作的输入;定义方式是"名称:类型";如果存在多个参数,各参数用逗号隔开;可以有默认值
返回类型:虽然是可选的,但是大部分编程语言只支持一个返回值,一般无返回值要加一个void
属性字符串:同类的属性(一种操作函数(function在完成操作后要有一个返回值,可以在这里说明函数的返回值将其类型
4)约束
用{}的形式写在类的边上,指定个别属性的取值范围
例如给a类的b属性加上约束,只能c、d、e对其进行指定那就可以在类旁边写上{b=c or d or e}
4.类之间的关系
依赖关系:有向虚线指向被依赖
1)使用依赖(一个用到另个)包括:
调用(call):调用操作
参数(parameter):操作与参数之间的关系
发送(send):发送者和接收者之间的关系
实例化(instantiate):用一个类的方法创建了另一个类的实例
2)抽象依赖(使用者和提供者之间的关系)有三种类型:
跟踪依赖(trace):存在连接,但不如映射精确
精化依赖(refine):不同语义层次上的元素之间的映射,比如分析阶段有a类,设计阶段要将a类进行精化,详细到可以实现的程度)
派生依赖(derive):一个实例可以从另一个实例中导出BirthDate是具体的Age可以从其中导出,二者是派生依赖关系
3)授权依赖:一个事物访问另一个事物三种类型:
访问(access):允许一个包访问另一个包的内容
导入(import):允许一个包访问另一个包的内容并为被访问包的组成部分增加别名
友元(friend):允许一个元素访问另一个元素,不管被访问元素是否具有可视性
4)绑定依赖(bind):对目标模板使用给定的实际参数进行实例化
泛化关系:子类指向父类空心三角箭头实线
关联关系:实线
1)关联名:源对目标对象执行的动作,一个动词
2)角色:在连线的两端可以写上这个类在这个关系中扮演的角色
3)多重性:类之间的联系,一对一,一对多,多对多等(1表示1,*表示多个,1...*表示一个或多个)
4)聚合:整体和部分的关联,是一个has-a的关系,空心菱形实线
5)组合:强聚合关系,实心菱形实线
6)导航性:本端的对象可以被另一端的对象访问,分为单向和双向
7)关联类:描述关系的类,公司和雇员之间有一个工作类,这个类就是关联类,关联类与关联线用虚线连接
8)约束:指明约束在有约束的那个类附近用花括号加上约束
or约束,在两个类之间用虚线连接上面用花括号写上or约束
实现关系:将不同语义层的元素连接起来,如类实现接口,指向被实现的类
泛化是将同一语义层的元素连接起来
5.类图建模先建立概念层类图(类与现实世界的事物有很大关系,一般很少考虑实现),再建立说明层类图(主要考虑接口部分),最后建立实现层类图(提供实现的细节)