什么是UML
UML即统一建模语言(Unified Modeling Language),它是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效。
什么是类图
类图(Class diagram)是显示了模型的静态结构,特别是模型中存在的类、
类的内部结构
以及它们与其他类的关系
等。
以上定义摘自百度百科。
以上涉及到两个重点:
- 类的内部结构
- 他们与其他类的关系
类图描述类的内部结构
Class Diagram要描述类的内部结构,首先就得知道面向对象的编程语言中类有什么,才能知道类图需要表示什么。
虽然说是类图,与类互为相同级别的抽象类,和接口分别是如何用类图表示的?
类图(包括类,抽象类,接口)中表示类是以一个矩形框横向分为三层来表示的。在第一层中表示类(抽象类,接口)的名字。在第二层中表示成员变量,在第三层中定义该类的方法。
而在这三种中,类以普通字体来标识; 而抽象类是以斜体来标识; 接口是在类的基础上,在类的名字上加上<
类里面的成员变量以及方法又是如何用类图表示的?
在类图中第二个方框是成员变量。
权限修饰符
面向对象中的权限修饰符有四个,由开放到严格分为: private, protected, default, public
在类图中,是这么表示的:
权限修饰符 | 类图中的表示 |
---|---|
public | + |
default | |
protected | # |
private | - |
如,在People类里面,有一个成员变量为 name, 数据类型为 String, 权限为 public , 则对应的表示方式为:
+ name : String
相应的我们在编程中,一般会生成对应的getter/setter方法,在UML类图中是这么表示的:
# getName方法
public String getName() {
return this.name;
}
则在这里对应的UML类图是这么画的:
+ getName() : String
对应的setter方法为:
public void setName(String name) {
this.name = name;
}
对应的类图为:
+ setName (name String) : void
UML类图元素之间的关系
在面向对象中类和类之间的关系有:
- 继承
- 实现
- 组合
- 聚合
- 关联
- 依赖
继承
继承也叫作泛化(Generalization),用于描述父子类之间的关系。在UML中,泛化关系用带空心三角形的实线来表示。
实现
指的是一个class类实现interface接口(可以是多个)的功能;在UML中,实现关系用带宽心三角形的虚线来表示。
聚合()
聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;在UML中用空间菱形表示。
组合(Composition)
组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的。在UML中用实心的菱形表示。例如汽车和引擎,汽车和门的关系。
依赖
可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;
关联
他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系。