1. 概念
UML(Unified Modeling Language )是用来描述一个一个系统的静态结构的一门语言,它既可以用于一般概念建模、细节建模,也可以用于数据建模。既然算是一门语言,它就具有交流的功能:
- 谁和谁交流:涉及程序开发的所有人员
- 交流什么:程序的整体设计,即类与类之间的关系
UML中普通类、抽象类和接口统称为类。UML类图的组成部分为程序所涉及的所有类,以及类与类之间的所有关系。
2. 符号表示
假设此时定义一个Person类,代码如下:
public class Person{
public int age;
protected String name;
private double salary;
person(){}
person(int age, String name){
this.age = age;
this.name = name;
}
public int getAge(){
return this.age;
}
public void setAge(int age){
this.age = age;
}
}
UML中类的画法如下所示:
其中类图分为类名、成员变量和成员方法三个部分,其中成员变量的格式为访问控制修饰符 变量名 :变量类型
,成员方法的使用格式为访问控制修饰符 方法名(参数类型 参数名) :返回值类型
。
访问控制修饰符的定义为:
- +:表示public
- -:表示private
- #:表示protected
3. 关系
UML中类与类之间的关系大致可分为两大类:
- 依赖
- 泛化
- 实现
- 关联
- 聚合
- 组合
3.1 泛化
泛化表现在程序中就是OOP中的继承(extend),因此它也被称为Is-A关系,因为从另一个类继承而来的类能够被当作父类使用。
父类可以表现多个子类共享的特征,此时父类就称为泛化;而子类表示一般类的特殊实例,它被称为特化。
例如。定义Person类为父类,同时定义两个子类Teacher和Student来继承Person类,它们之间的关系用UML类图表示为:
3.2 实现
UML中的实现和程序中接口的实现是一致的,如果此时定义一个接口为Work,接口中只有一个抽象方法work();然后定义一个接口的实现类Teacher来实现该接口,它表现在UML中为:
3.3 依赖
依赖关系是一种使用关系,它用于定义一个类以某种方式依赖于另一个类,但另一个类不一定依赖于它。因此,依赖关系也被称为Use-A关系。
假设此时有一个Car类和一个Driver类,Driver类中的成员方法drive的参数列表中需传递Car的对象。此时Driver和Car就形成了依赖关系。它们表现在UML图中为:
依赖关系可能存在的情况:
- 类的成员属性中使用到了另一个类
- 类成员方法的返回值用到了另一个类
- 类成员方法的参数中使用到另一个类
- 类成员方法的方法体中使用到另一个类
3.4 关联
关联表示两个实体间的关系,相比于依赖关系,存在关联关系的两个实体之间的联系更加的紧密。关联关系又可以分为:
- 聚合
- 组合
3.4.1 聚合
聚合关系表示整个和部分之间的关系,而且整体和部分是可以分开的,它是关联关系的一种特例。例如Computer有keyboard、mouse和monitor等组成,而且组成Computer的各个部分是可以从中分离出来的。它们之间的关系用UML类图表示为:
3.4.2 组合
组合表示的也是整体和部分之间的额关系,它此时整体和部分是不可分开的。例如每个Student都会有一个学校,同时都会有一个学号,它们三者之间构成的关系就是组合关系。它表现在UML类图中为: