
目录一. 前言二. 类图概述三. 类图表示法3.1 类的表示方式3.2 类与类之间关系的表示方式3.2.1 继承(泛化)关系3.2.2 实现关系3.2.3 依赖关系3.2.4 一般关联关系3.2.5 聚合关系3.2.6 组合关系一. 前言UML全称(Unified Modeling Language)译为统一建模语言是用来设计软件的可视化建模语言。它的特点是简单统一图形化能表达软件设计中的动态与静态信息。UML从目标系统的不同角度出发定义了用例图类图对象图状态图活动图时序图协作图构件图部署图九种图本篇文章重点描述类图。二. 类图概述类图(Class Diagram)是显示了模型的静态结构特别是模型中静态的类类的内部结构以及它们与其他类的关系等它不显示暂时性的信息是面向对象建模的主要组成部分。三. 类图表示法3.1 类的表示方式在UML类图中类通常包含类名属性(field)方法(method)且带有分割线的矩形来表示。如下图 Employee 员工类它包含有nameageaddress三个属性以及 work() 方法。属性/方法名称前面加的 和 - 表示了这个属性或方法的可见性 表示 public 公开的所有人都可以访问- 表示 private 私有的只有本类中可以访问# 表示protected 受保护的只有本包中的类或子类才可以访问一般情况下类的属性都定义为私有的类的方法定义为公开的属性的完整表示方式可见性 名称类型 [ 缺省值]方法的完整表示方式可见性 名称(参数列表) [: 返回值类型]小练习了解了表示方式我们再来看下面这个类图就非常好理解啦。表示的含义就是类名为 Demo没有属性值有三个方法分别为 methodmethod1method2method 方法访问修饰符为public方法名为 method没有参数方法没有返回值method1 方法访问修饰符为 private方法名为 method1没有参数返回值类型为Stringmethod2 方法访问修饰符为 protected方法名为 method2有两个参数par1par2参数值类型分别为IntString方法返回值类型为Int。3.2 类与类之间关系的表示方式类与类之间的关联关系通常所熟知的是6种如下图所示但这6种之中一般关联关系聚合关系组合关系都是属于关联关系这个大类中的只是我们通常会将它们三者分开来说这里展示此图也是为了小伙伴们能够清楚的知道类与类之间关联关系的分类。下面我们就对这六种关系分别做出举例解释。3.2.1 继承(泛化)关系继承关系使用实线空心三角表示空心三角指向父类一个父类可以被多个子类继承继承关系(也叫泛化关系)大家都不陌生在 Java 中子类 extends 继承父类就拥有了父类中所有非私有化的属性和方法。继承关系是对象之间耦合度最大的一种关系在项目中我们通常会将所有类公共的部分抽取出来作为一个 Base 基类然后所有类去继承这个基类。如下图Person 表示人的类为父类Student 学生类和 Teacher 教师类都继承Person人类3.2.2 实现关系实现关系使用虚线空心三角表示空心三角指向被实现的接口一个接口可以被多个类同时实现重写出不同的逻辑实现关系就是接口和实现类之间的关系Class 类 implements 实现接口 Interface类就需要去重写接口中的所有抽象操作。举个栗子如下 Vehicle 交通工具为接口接口中定义了一个方法 move()但并没有具体的实现Car 汽车类和 Ship 船类都可以实现 Vehicle 接口并重写 move() 方法3.2.3 依赖关系依赖关系使用虚线箭头表示箭头指向被依赖的类一个类也可以被多个类依赖依赖关系是一种使用关系它是对象之间耦合度最低的一种关联方式是临时性的关联。一个类依赖另一个类就使用带箭头的虚线表示箭头指向被依赖类。最直观的体现就是在代码中某个类的方法通过局部变量方法的参数或者对静态方法的调用来访问另一个类(被依赖类)中的某些方法来完成一些职责。举个例子如下图所示有 Driver 司机类和 Car 汽车类Driver 类中有一个 driver 方法参数需要传递 Car 类对象Car 类中有一个 move 方法。司机类依赖汽车类司机需要有汽车才能进行移动3.2.4 一般关联关系一般关联关系有单向关联双向关联自关联三种情况单向关联举例Addres 是地址类Customer 是顾客类每一个顾客都会有一个地址Customer 类中是可以定义Address对象作为自己的属性这就属于单向关联。UML 图中单向关联使用实线实心三角箭头表示。双向关联举例Customer 顾客类Product 商品类。一个顾客可以拥有多个商品一个商品也归属于一位顾客像这样双方各自含有对方类型的成员变量就属于双向关联。双向关联使用一条实线将双方连接起来就可以了。自关联举例自关联在 UML 图中是使用一个箭头指向自己就可以了自关联这种情况比较少见但是却通常应用在树中。一个树 Tree 可以有多个分支一个分支上有很多叶子这种情况通常会使用 Node 节点来展示在 Node 节点中在定义自己 Node说白了就是 Node 里面嵌套 Node如果嵌套两层不够可以继续嵌套 Node类似套娃。3.2.5 聚合关系聚合关系是关联关系的一种是强关联关系是整体与部分之间的关系。聚合关系是通过成员变量来实现的其中成员对象是整体对象的一部分但是成员对象却可以脱离整体而独立存在。UML 图中聚合关系使用实线空心菱形来表示空心菱形指向整体类实线另一端指向个体类一个整体类可以由多个个体类聚合而成举个栗子学校的老师学校的保安学校里会存在老师保安学生食堂阿姨等等一系列不同的人这些人共同组成这个学校如果有一天学校不在了这些人仍然会存在老师可以去另一家学校教书保安也可以去另一家学校当保安。放在代码中就是一个类中的属性是由其他多个类对象构成的如图Teacher 教师类的类对象就可以作为 University 大学类中的一个属性存在这就是聚合。3.2.6 组合关系组合关系是一种比聚合关系更为强烈的关系在组合关系中整体对象可以控制部分对象的生命周期一旦整体不存在个体也将不复存在而上面我们说到的聚合关系中个体可以脱离整体而独立存在但是在组合关系中个体不能脱离整体而存在这就是它们二者最大的区别UML图中组合关系使用实线实心菱形表示实心菱形指向整体类实现另一端指向个体类一个整体类可以由多个个体类组合而成举个栗子Head 头类头可以由眼睛耳朵鼻子嘴巴等构成但如果头不存在那么组成头的眼睛耳朵嘴巴鼻子也就不复存在了。