统一建模语言(Unified Modeling Language,UML)是用来设计软件蓝图的可视化建模语言,一种用于软件系统分析和设计的工具。UML本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他们之间的关系。
1. 类和接口的UML表示
类
使用三层矩形框表示
第一层是类的名称
第二层是属性
格式:
[可见性]属性名:类型[=默认值]
例如:- name: String
注意:“可见性”表示该属性对类外的元素是否可见,包括公有(Public)、私有(Private)、受保护(Protected)和默认(包访问)4 种,在类图中分别用符号+、-、#、~表示。
第三层是类的方法
格式:
[可见性]名称(参数列表)[:返回类型]
例如:+ study(): void
接口
使用两层矩形框表示,顶端有<<interface>>
显示,不包含属性
第一层是接口名称
第二层是接口方法
2. 类之间的关系
泛化(继承)
【泛化关系】是一种继承关系,即子类继承父类或子接口继承父接口。
【符号及指向】带三角箭头的实线,箭头指向父类型。关于箭头指向的理解:子类型是知道父类型的存在的,父类型是不知道自己有没有子类型以及有哪些子类型的,只有知道对方的信息,才能指向对方。
实现
【实现关系】是一种类与接口的关系,即类实现接口
【符号及指向】带三角箭头的虚线,箭头指向接口。
依赖
【依赖关系】是一种使用关系,即一个类的实现需要另一个类的协助, 它是对象之间耦合度最弱的一种关系。
【代码体现】某个类的方法通过局部变量、方法的参数或者对静态方法的调用来访问另一个类(被依赖类)中的某些方法
【符号及指向】带箭头的虚线,箭头指向被依赖的类
例如,人与手机的关系,人通过手机的语音传送方法打电话
关联
【关联关系】是对象之间的一种引用关系,用于表示一类对象与另一类对象之间的联系,如老师和学生、客户和订单、丈夫和妻子等。关联关系是类与类之间最常用的一种关系,分为一般关联关系、聚合关系和组合关系。一般关联习惯上就称为关联关系。
【代码体现】 通常将一个类的对象作为另一个类的成员变量来实现关联关系
【符号及指向】关联可以是双向的,也可以是单向的。在 UML 类图中,双向的关联可以用带两个箭头或者没有箭头的实线来表示,单向的关联用带一个箭头的实线来表示,箭头从使用类指向被关联的类。
如图所示是老师和学生的关系图,每个老师可以教多个学生,每个学生也可向多个老师学习,他们是双向关联:
聚合
【聚合关系】是关联关系的一种特例,是整体与部分的关系,且部分可以离开整体而单独存在,是一种不稳定的包含关系,它们有各自独立的生命周期;例如:公司和员工的关系,公司包含员工,但如果公司倒闭,员工依然可以换公司上班。
【代码体现】通常将一个类的对象作为另一个类的成员变量来实现聚合关系。在代码层面和和关联关系是一致的,只能从语义级别来区分
【符号及指向】带空心菱形的实线,菱形指向整体
组合
【组合关系】也是关联关系的一种特例,也是整体与部分的关系,但部分不能离开整体而单独存在,这种关系比聚合更强,是一种稳定的包含关系。整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在。如公司和部门是整体和部分的关系,没有公司就不存在部门。
【代码体现】通常将一个类的对象作为另一个类的成员变量来实现组合关系。在代码层面和和关联关系是一致的,只能从语义级别来区分
【符号及指向】带实心菱形的实线,菱形指向整体
区别
- 聚合关系、组合关系与关联关系的区别
聚合关系、组合关系和关联关系实质上是对象间的关系(继承和实现是类与类和类与接口间的关系)
从语意上讲,关联关系中两种对象间一般是平等的,而聚合和组合则代表整体和部分间的关系
而聚合与组合的区别主要体现在生命周期的管理上
- 依赖关系与关联关系的区别
依赖关系是较弱的关系,一般表现为 某个类的方法通过局部变量、方法的参数或者对静态方法的调用来访问另一个类(被依赖类)中的某些方法
而关联关系是相对较强的关系,一般表现为一个类作为另外一个类的属性
某个类的方法通过局部变量、方法的参数或者对静态方法的调用来访问另一个类(被依赖类)中的某些方法
类之间的强弱关系排序:泛化 > 实现 > 组合 > 聚合 > 关联 > 依赖