目录

1. 前言

UML全称(Unified Modeling Language),译为统一建模语言,是用来设计软件的可视化建模语言。它的特点是简单,统一,图形化,能表达软件设计中的动态与静态信息。UML从目标系统的不同角度出发,定义了用例图,类图,对象图,状态图,活动图,时序图,协作图,构件图,部署图九种图,本篇文章重点描述类图。

2. 类图概述

类图(Class Diagram)是显示了模型的静态结构,特别是模型中静态的类,类的内部结构以及它们与其他类的关系等。类图不显示暂时性的信息。类图是面向对象建模的主要组成部分。

3. 类图表示法

3.1 类的表示方式

在UML类图中,类使用包含类名,属性(field),方法(method),且带有分割线的矩形来表示。如下图 Employee 员工类,它包含有name,age,address三个属性以及 work() 方法。属性/方法名称前面加的 "+" 和 "-" 表示了这个属性或方法的可见性。一般情况下类的属性都是私有的,类的方法都是公开的;"+" 表示 public 公开的,所有人都可以访问;"-" 表示 private 私有的,只有本类中可以访问;"#" 表示protected 受保护的,只有本包中的类或子类才可以访问;什么都不加通常表示为默认,但一般很少使用;属性的完整表示方式:可见性 名称:类型 [= 缺省值];方法的完整表示方式:可见性 名称(参数列表) [: 返回值类型]。

小练习:了解了表示方式,我们再来看下面这个类图,就非常好理解啦。表示的含义就是类名为 Demo,没有属性值,有三个方法分别为 method,method1,method2;method 方法访问修饰符为public,方法名为method,没有参数,方法没有返回值;method1 方法访问修饰符为 private,方法名为 method1,没有参数,返回值类型为String;method2 方法访问修饰符为 protected,方法名为 method2,有两个参数par1,par2,参数值类型分别为Int,String,方法返回值类型为Int。

3.2 类与类之间关系的表示方式

在UML类图中,类与类之间的关系主要有关联、聚合、组合和依赖四种。关联关系表示两个类之间存在一种联系,但其中一个类的对象并不影响另一个类的对象的状态;聚合关系表示一个整体由多个部分组成,部分与整体具有相同的生命周期;组合关系表示一个整体由多个部分组成,部分与整体具有不同的生命周期;依赖关系表示一个类的对象所依赖于另一个类的对象。在UML类图中,这些关系通过虚线箭头来表示。

类与类之间的关联关系通常有6种,如下图所示。但这6种之中,一般关联关系、聚合关系、组合关系都是属于关联关系这个大类中的。只是我们通常会将它们三者分开来说,这里展示此图也是为了小伙伴们能够清楚地知道类与类之间关联关系的分类。

下面我们就对这六种关系分别做出举例解释。

(1)继承(泛化)关系

继承关系使用实线空心三角表示,空心三角指向父类,一个父类可以被多个子类继承;继承关系(也叫泛化关系)大家都不陌生,在Java中子类extends继承父类,就拥有了父类中所有非私有化的属性和方法。继承关系是对象之间耦合度最大的一种关系,在项目中,我们通常会将所有类公共的部分抽取出来作为一个Base基类,然后所有类去继承这个基类。如下图,Person人类为父类,Student学生类和Teacher教师类都继承Person人类。

(2)实现关系

实现关系使用虚线空心三角表示,空心三角指向被实现的接口,一个接口可以被多个类同时实现重写出不同的逻辑;实现关系就是接口和实现类之间的关系,Class 类 implements 实现接口 Interface,类就需要去重写接口中的所有抽象操作。举个栗子:如下 Vehicle交通工具为接口,接口中定义了一个方法 move(),但并没有具体的实现,Car汽车类和Ship船类都可以实现 Vehicle 接口,并重写move()方法。

(3)依赖关系

依赖关系使用虚线箭头表示,箭头指向被依赖的类,一个类也可以被多个类依赖;依赖关系是一种使用关系,它是对象之间耦合度最低的一种关联方式,是临时性的关联。一个类依赖另一个类,就使用带箭头的虚线表示,箭头指向被依赖类。最直观的体现就是在代码中,某个类的方法通过局部变量,方法的参数或者对静态方法的调用来访问另一个类(被依赖类)中的某些方法来完成一些职责。举个例子:如下图所示,有Driver司机类和Car汽车类,Driver类中有一个driver方法,参数需要传递Car类对象,Car类中有一个move方法。司机类依赖汽车类,司机需要有汽车,才能进行移动。

(4)一般关联关系

一般关联关系包括单向关联、双向关联、自关联三种情况。单向关联举例如:一个班级有多个学生,一个学生属于一个班级;双向关联举例如:一个人有两个电话号码,这两个电话号码都属于这个人;自关联举例如:一个人有一张身份证,这张身份证属于这个人。

在UML图中,单向关联使用实线实心三角箭头表示,双向关联使用一条实线将双方连接起来,自关联使用一个箭头指向自己就可以了。聚合关系是关联关系的一种,是强关联关系,是整体与部分之间的关系,聚合关系是通过成员变量来实现的,其中成员对象是整体对象的一部分,但是成员对象却可以脱离整体而独立存在。UML图中聚合关系使用实线空心菱形来表示,空心菱形指向整体类,实线另一端指向个体类,一个整体类可以由多个个体类聚合而成。组合关系是一种比聚合关系更为强烈的关系,在组合关系中,整体对象可以控制部分对象的生命周期,一旦整体不存在,个体也将不复存在;而上面我们说到的聚合关系中,个体可以脱离整体而独立存在,但是在组合关系中,个体不能脱离整体而存在。

以上是我对您提供的信息进行重构后得到的内容段落结构。