UML类图

221 阅读5分钟

1、UML

1.1、什么是UML

UML(Unified Modeling Language,统一建模语言) 是一种标准化的图形化建模语言,用于软件系统的分析、设计、实现和文档化。它提供了一套丰富的图形符号和规则,帮助开发人员、设计师和业务分析师可视化、理解和沟通系统的结构和行为。

1.2、UML的组成

UML由多种类型的图(Diagrams)组成,主要分为两大类:

结构图(Structural Diagrams)

描述系统的静态结构,展示系统的组成部分及其关系。

  • 类图(Class Diagram):描述类、接口、属性、方法及其关系。
  • 对象图(Object Diagram):展示某一时刻系统中的对象及其关系。
  • 组件图(Component Diagram):描述系统的物理组件及其依赖关系。
  • 部署图(Deployment Diagram):展示系统的硬件和软件部署结构。
  • 包图(Package Diagram):用于组织和管理系统中的包及其关系。
  • 复合结构图(Composite Structure Diagram):描述类的内部结构及其协作关系。

行为图(Behavioral Diagrams)

描述系统的动态行为,展示系统的交互和流程。

  • 用例图(Use Case Diagram):描述系统功能及其与外部用户的交互。
  • 活动图(Activity Diagram):展示业务流程或操作的工作流。
  • 状态图(State Machine Diagram):描述对象在其生命周期中的状态变化。
  • 序列图(Sequence Diagram):展示对象之间的交互顺序。
  • 通信图(Communication Diagram):描述对象之间的交互关系(类似于序列图,但更强调关系)。
  • 时序图(Timing Diagram):展示对象状态随时间的变化。
  • 交互概览图(Interaction Overview Diagram):结合活动图和序列图,描述复杂的交互流程。

2、UML类图

2.1、基本元素

2.1.1. 类(Class)

定义:类是对象的蓝图,描述了对象的属性(成员变量)和行为(方法)。如下图所示:

image-20250206115517806

  • 表示:矩形框,分为三部分:
    1. 类名:顶部,粗体。
    2. 属性:中间,格式为属性名: 类型
    3. 方法:底部,格式为方法名(参数列表): 返回类型
  • **可见性:**符号表示属性和方法的访问权限:
    • +:公共(Public)
    • -:私有(Private)
    • #:受保护(Protected)
    • ~:包内可见(Package/Default)

2.1.2. 接口(Interface)

  • 定义:接口是类必须实现的方法集合,没有具体实现。
  • 表示:矩形框,顶部有<<interface>>标识,分为两部分:
    1. 接口名:顶部。
    2. 方法:底部。

image-20250206135424737

2.2、UML类图的关系

UML(Unified Modeling Language,统一建模语言)是软件系统分析和设计的重要工具,能帮助开发人员梳理思路、记录成果。UML 类图则专注于描述类与类之间的关系,是学习设计模式的必备知识。下面将详细介绍 UML 类图中各类关系。

image-20250207090620295

2.2.1、依赖关系

  1. 关系介绍:当一个类在方法局部变量、方法参数位置或方法返回值处使用了另一个类时,就产生了依赖关系(dependence)。这种关系较为松散,一个类的变化可能影响依赖它的类。

  2. 代码演示

    class Head {}
    class Body {}
    class Hand {}
    class Leg {}
    
    public class Person {
        public Person() {
            Head head;
            Body body;
            Hand hand;
            Leg leg;
        }
    }
    
  3. 关系图示:在 IDEA 中,选中相关类,通过右键 “Diagrams>Show Diagram...”,并在工具栏选中 “Show Dependencies” 查看。依赖关系用灰色虚线普通箭头指向被依赖的类。

    img

2.2.2、泛化关系(继承关系)

  1. 关系介绍:泛化关系(generalization)即继承关系,是依赖关系的特例。子类继承父类,拥有父类的属性和方法,实现代码复用与扩展。

  2. 代码演示

    public class People {
        private String name;
        private String sex;
        private Integer age;
    }
    
    class Chinese extends People {}
    
  3. 关系图示:在 IDEA 中操作同上,泛化关系用深蓝色实线实心箭头从子类指向父类。

    image-20250206143116165

2.2.3、实现关系

  1. 关系介绍:实现关系(implementation)指一个类实现一个接口,也是依赖关系的特例。接口定义规范,类实现接口中的方法,保证功能一致性。

  2. 代码演示

    //UserService.java
    public interface UserService {}
    
    //UserServiceImpl.java
    public class UserServiceImpl implements UserService{}
    
  3. 关系图示:在 IDEA 中查看方式不变,实现关系用绿色虚线实心箭头从实现类指向接口。

    image-20250206142959271

2.2.4、关联关系

  1. 关系介绍:关联关系(association)表示类与类之间的联系,具有导航性(单向或双向)和多重性(如 “1”“0…”“0,1” 等)。它描述了类之间的静态结构关系。

  2. 代码演示

    //Emp.java
    public class Emp {}
    
    //Dep.java
    public class Dep {
        private List<Emp> emps;
    }
    
  3. 关系图示:在 IDEA 中操作后,关联关系用灰色普通箭头 + 灰色实心菱形指向关联的类,菱形靠近拥有关系的类。

    img

2.2.5、聚合关系

  1. 关系介绍:聚合关系(aggregation)体现整体和部分的关系,整体与部分可分离。是关联关系的特例,具有导航性和多重性,如电脑与鼠标、键盘的关系。

  2. 代码演示

    class Mouse {}
    class Keyboard {}
    
    public class Computer {
        private Mouse mouse;
        private Keyboard keyboard;
    
        public void setMouse(Mouse mouse) {
            this.mouse = mouse;
        }
    
        public void setKeyboard(Keyboard keyboard) {
            this.keyboard = keyboard;
        }
    }
    
  3. 关系图示:在 IDEA 中查看时,聚合关系同样用灰色普通箭头 + 灰色实心菱形指向,菱形靠近整体类,并标注多重性。

    img

2.2.6、组合关系

  1. 关系介绍:组合关系(composition)也表示整体和部分的关系,但整体与部分不可分开。同样具有关联的特性,像人体各部分构成整体。

  2. 代码演示

    class Head {}
    class Body {}
    class Hand {}
    class Leg {}
    
    public class Person {
        private Head head = new Head();
        private Body body = new Body();
        private Hand hand = new Hand();
        private Leg leg = new Leg();
    }
    
  3. 关系图示:在 IDEA 中,组合关系用灰色普通箭头 + 灰色实心菱形表示,菱形靠近整体类,且部分类旁可标注创建信息。

    img