什么是UML建模
UML(统一建模语言)是一种图形化的语言,用于描述软件系统的设计。简单来说,UML建模就像是用图画来表达软件系统是如何工作的,帮助开发者更好地理解、设计和交流软件的设计。
UML建模的目的
- 更好地理解系统:通过图形化的方式,让人们更容易理解软件系统的工作原理。
- 方便团队协作:UML图可以帮助团队成员更好地沟通,确保大家对软件的理解一致。
- 指导开发过程:UML图可以作为开发过程中的参考,帮助开发者按照设计来编写代码。
- 方便维护和扩展:有了UML图,未来的维护和扩展工作也会更加容易。
UML图的类型
UML图有很多种,以下是几种常见的类型:
-
用例图
- 定义:展示系统的主要功能和用户之间的交互。
- 例子:展示一个网上商城系统中用户可以进行的操作,如浏览商品、下单购买等。
-
类图
- 定义:展示系统中类(Class)之间的关系。
- 例子:展示一个图书馆系统中书籍、读者和管理员之间的关系。
-
序列图
- 定义:展示对象之间的交互顺序。
- 例子:展示用户登录系统的过程,包括用户输入用户名和密码,系统验证等步骤。
-
状态图
- 定义:展示对象的状态变化及其触发条件。
- 例子:展示一个订单的状态变化,如从“未支付”到“已支付”,再到“已发货”。
-
活动图
- 定义:展示系统的流程和活动。
- 例子:展示一个购物车结算的流程,包括选择商品、确认订单、支付等步骤。
-
组件图
- 定义:展示系统组件之间的关系。
- 例子:展示一个软件系统中各个模块之间的依赖关系。
-
部署图
- 定义:展示系统在实际环境中的部署情况。
- 例子:展示一个网站如何部署在服务器上,以及客户端如何与服务器通信
事物
UML中的事物是用来描述系统中的各种元素的,它们是UML模型的基本组成部分。UML中的事物可以分为四大类:结构事物、行为事物、分组事物和注释事物。
1. 结构事物
结构事物是UML中用来描述系统静态部分的事物,它们代表系统中的持久对象或实体。结构事物包括:
-
类
- 定义:描述了一组具有相同属性、操作和关系的对象。
- 例子:在图书馆系统中,“书籍”类可以描述书籍的属性,如书名、作者、出版社等。
-
接口
- 定义:定义了一组操作,这些操作可以由一个或多个类实现。
- 例子:一个“可借阅”接口可以定义借书和还书的方法,由“书籍”类实现。
-
组件
- 定义:表示软件中的物理部分,如源代码文件、库等。
- 例子:一个“数据库组件”可以表示数据库系统中的模块。
-
节点
- 定义:表示物理计算资源,如计算机、服务器等。
- 例子:一台“Web服务器”可以表示部署应用程序的服务器。
2. 行为事物
行为事物描述了系统中的动态行为,即系统随着时间推移所做的事情。行为事物包括:
-
交互
- 定义:描述了对象之间的通信。
- 例子:一个“序列图”可以展示用户与系统之间的交互过程。
-
状态机
- 定义:描述了对象在其生命周期中的状态变化。
- 例子:一个“状态图”可以展示订单从“未支付”到“已支付”再到“已发货”的状态变化。
3. 分组事物
分组事物用于将其他事物组织在一起,以便更好地理解和管理它们。分组事物包括:
-
包
- 定义:将相关的类、接口、组件等组织在一起。
- 例子:一个“用户管理包”可以包含所有与用户管理相关的类。
-
构件
- 定义:表示物理工件,如文档、源代码文件等。
- 例子:一个“需求文档”可以表示系统需求文档。
4. 注释事物
注释事物用于添加注释或解释其他事物。注释事物包括:
- 注释
- 定义:提供额外的信息或解释。
- 例子:在类图中添加注释来解释某个类的用途或注意事项
关系
1. 依赖
依赖是一种使用关系,它表示一个事物(称为客户端)使用另一个事物(称为供应商)。如果改变供应商可能会影响客户端,那么就存在依赖关系。
- 定义:表示一个事物依赖于另一个事物的特性或行为。
- 符号:通常用一条带箭头的虚线来表示。
- 例子:如果一个类A需要使用类B提供的方法或属性,那么类A就依赖于类B
2. 泛化
泛化是一种继承关系,表示一个类(子类)继承另一个类(父类)的所有特性及行为。
- 定义:表示一个类(子类)是另一个类(父类)的一种特殊情况。
- 符号:用一条实线加空心三角箭头表示。
- 例子:汽车类可以是车辆类的一个子类,继承车辆的所有属性和方法。
3. 关联
关联描述了一组对象之间的一种结构连接,表示两个或多个类之间的连接关系。
- 定义:表示一个类的对象与另一个类的对象之间的联系。
- 符号:用一条实线来表示,两端可以有箭头表示导航性。
- 例子:一个“学生”类可以与一个“课程”类相关联,表示学生选修了某门课程。
4. 实现
实现是接口和实现它的类之间的关系,表示一个类(实现者)实现了接口中定义的行为。
- 定义:表示一个类(实现者)实现了接口中定义的所有方法。
- 符号:用一条实线加三角箭头表示,类似于泛化的关系。
- 例子:一个“可打印”接口可以被“文档”类实现,这样文档类就可以打印文档内容。
类图
类图是UML中最常用的图之一,它用于描述系统的静态结构。类图展示了系统中的类、接口、它们的属性(字段)、方法(操作)以及类之间的关系。
类图的组成元素
类图主要由以下几个部分组成:
- 类:代表系统中的一个抽象概念,包含一组属性和方法。
- 接口:定义了一组方法的集合,类可以通过实现接口来获得这些方法。
- 关联:表示类之间的连接关系。
- 聚合:一种特殊的关联关系,表示整体与部分之间的关系,部分可以存在于多个整体中。
- 组合:也是一种特殊的关联关系,但比聚合更紧密,表示部分是整体的一部分,且部分不能脱离整体而存在。
- 依赖:表示一个类依赖于另一个类的功能。
- 泛化:表示继承关系,一个类(子类)继承另一个类(父类)的属性和方法。
- 实现:表示一个类实现了某个接口。
类图的绘制方式
一个类在类图中通常表示为三个部分的矩形框:
- 顶部:类的名称,通常是粗体字。
- 中部:类的属性(字段),描述类的数据。
- 底部:类的方法(操作),描述类的行为。
属性和方法的可见性通常用符号来表示:
+
表示公共(Public),外部可以直接访问。-
表示私有(Private),只能在类内部访问。#
表示受保护(Protected),类及其子类可以访问。~
表示包级(Package),同一个包内的类可以访问。
类图的例子
让我们通过一个简单的例子来理解类图。
假设我们要设计一个简单的图书管理系统,包含如下几个类:
- 书籍(Book):包含书籍的基本信息。
- 图书馆(Library):包含书籍的集合,并且能够进行借书、还书等操作。
- 用户(User):包含用户的基本信息,并且能够借书、还书。
类图
1+-----------------+ +-----------------+ +-----------------+
2| 书籍 (Book) | | 图书馆 (Library)| | 用户 (User) |
3+-----------------+ +-----------------+ +-----------------+
4| -书名: String | | -书籍列表: Book[]| | -用户名: String |
5| -作者: String | | +借书(User, Book): void| | -密码: String |
6| -出版社: String | | +还书(User, Book): void| | +借书(Book): void|
7+-----------------+ +-----------------+ +-----------------+
8| +借书(): void | | +查找书籍(String): Book| | +还书(Book): void|
9| +还书(): void | | +添加书籍(Book): void | +-----------------+
10+-----------------+ +-----------------+ (依赖) ------------> (依赖)
11 | | |
12 | | |
13(关联) ----------------> (关联) ------------> (关联)
14 | |
15 | |
16+-----------------+ +-----------------+
17| 书籍接口 (Bookable)| | 可借阅 (Borrowable)|
18+-----------------+ +-----------------+
19| +借书(): void | | +借(): void |
20| +还书(): void | | +还(): void |
21+-----------------+ +-----------------+
22 (实现) ----------------> (实现)
在这个类图中:
- 书籍(Book) 类实现了 书籍接口(Bookable),意味着它必须实现接口中定义的方法。
- 图书馆(Library) 类与 书籍(Book) 类之间存在关联关系,表明图书馆包含了一个书籍列表。
- 用户(User) 类与 图书馆(Library) 类之间存在依赖关系,因为用户需要通过图书馆来借书和还书。
- 可借阅(Borrowable) 接口被 书籍(Book) 类实现,表示书籍支持借书和还书的方法。
使用类图的好处
- 清晰性:类图能够清晰地展示系统中类之间的关系。
- 易于理解:对于大型项目,类图可以帮助开发人员快速了解系统结构。
- 方便讨论:类图是一个很好的工具,可以帮助团队成员讨论和设计系统架构。