1. 概念

UML(Unified Modeling Language )是用来描述一个一个系统的静态结构的一门语言,它既可以用于一般概念建模、细节建模,也可以用于数据建模。既然算是一门语言,它就具有交流的功能:

  • 谁和谁交流:涉及程序开发的所有人员
  • 交流什么:程序的整体设计,即类与类之间的关系

UML中普通类、抽象类和接口统称为类。UML类图的组成部分为程序所涉及的所有类,以及类与类之间的所有关系。

2. 符号表示

假设此时定义一个Person类,代码如下:

  1. public class Person{
  2. public int age;
  3. protected String name;
  4. private double salary;
  5. person(){}
  6. person(int age, String name){
  7. this.age = age;
  8. this.name = name;
  9. }
  10. public int getAge(){
  11. return this.age;
  12. }
  13. public void setAge(int age){
  14. this.age = age;
  15. }
  16. }

UML中类的画法如下所示:
Person类图.png

其中类图分为类名、成员变量和成员方法三个部分,其中成员变量的格式为访问控制修饰符 变量名 :变量类型 ,成员方法的使用格式为访问控制修饰符 方法名(参数类型 参数名) :返回值类型

访问控制修饰符的定义为:

  • +:表示public
  • -:表示private
  • #:表示protected

3. 关系

UML中类与类之间的关系大致可分为两大类:

  • 依赖
    • 泛化
    • 实现
  • 关联
    • 聚合
    • 组合

3.1 泛化

泛化表现在程序中就是OOP中的继承(extend),因此它也被称为Is-A关系,因为从另一个类继承而来的类能够被当作父类使用。

父类可以表现多个子类共享的特征,此时父类就称为泛化;而子类表示一般类的特殊实例,它被称为特化

例如。定义Person类为父类,同时定义两个子类Teacher和Student来继承Person类,它们之间的关系用UML类图表示为:
泛化.png

3.2 实现

UML中的实现和程序中接口的实现是一致的,如果此时定义一个接口为Work,接口中只有一个抽象方法work();然后定义一个接口的实现类Teacher来实现该接口,它表现在UML中为:
实现.png

3.3 依赖

依赖关系是一种使用关系,它用于定义一个类以某种方式依赖于另一个类,但另一个类不一定依赖于它。因此,依赖关系也被称为Use-A关系。

假设此时有一个Car类和一个Driver类,Driver类中的成员方法drive的参数列表中需传递Car的对象。此时Driver和Car就形成了依赖关系。它们表现在UML图中为:
依赖.png

依赖关系可能存在的情况:

  • 类的成员属性中使用到了另一个类
  • 类成员方法的返回值用到了另一个类
  • 类成员方法的参数中使用到另一个类
  • 类成员方法的方法体中使用到另一个类

3.4 关联

关联表示两个实体间的关系,相比于依赖关系,存在关联关系的两个实体之间的联系更加的紧密。关联关系又可以分为:

  • 聚合
  • 组合

3.4.1 聚合

聚合关系表示整个和部分之间的关系,而且整体和部分是可以分开的,它是关联关系的一种特例。例如Computer有keyboard、mouse和monitor等组成,而且组成Computer的各个部分是可以从中分离出来的。它们之间的关系用UML类图表示为:
聚合.png

3.4.2 组合

组合表示的也是整体和部分之间的额关系,它此时整体和部分是不可分开的。例如每个Student都会有一个学校,同时都会有一个学号,它们三者之间构成的关系就是组合关系。它表现在UML类图中为:

组合.png

4. 工具推荐