一、什么是 UML
以下是官方的描述:
UML(Unified Modeling Language)即统一建模语言,它是一种用于可视化、详述、构造和文档化软件密集系统的语言。UML 并不是一种编程语言,而是一种可视化的建模语言,主要用于软件开发过程中的分析、设计阶段,帮助开发人员更好地理解系统的结构和行为。
简单来说,就是规定一个约定俗成的东西,方便大家表示一些行为(根据这个东西,大家都能知道这个行为,基本不用再一一解释)。
二、UML的主要图型
- 用例图(Use Case Diagram)
- 定义:用例图主要用于描述系统的功能需求,它展示了系统中的参与者(Actor)与用例(Use Case)之间的关系。参与者可以是用户、外部系统等,用例代表系统提供的功能。
- 示例:以一个产品销售系统为例,参与者有“用户”和“销售员”。“用户”这个参与者可以与“购买物品”“维修物品”“退货”等用例相关联;“销售员”可以与“上架物品”“查询物品”“销售物品”等用例相关联。用例图可以清晰地展示不同用户角色与系统功能之间的交互关系,帮助开发人员和用户沟通需求。
2. 类图(Class Diagram)
- 定义:类图是一种静态结构图,用于描述系统中的类、类的属性以及类之间的关系。类是对具有相同属性和行为的对象的抽象。
- 示例:在这个系统中,存在 “动物” 类,具有 “有生命”属性和“新陈代谢”、“繁殖”等方法或操作。“水” 与 “氧气”和“动作” 是依赖关系。“鸟”与“动物”是继承关系,即鸟肯定属于动物。“大雁”与“鸟”同样道理也是继承关系;但“雁群”与“大雁”属于聚合关系,即大雁可以组成雁群,也可以单独行动。“翅膀”和“鸟”属于组合关系,比聚合关系和关联关系强一些。类图清晰地呈现了各个类之间的关系以及类的特性和操作。
3. 时序图(Sequence Diagram)
- 定义:时序图主要用于描述对象之间的动态交互顺序,它按照时间顺序展示了对象之间的消息传递。
- 示例:在学生使用的学习系统中,当学生登录系统时,顺序图可以展示 “学生” 对象向 “学生系统界面” 对象发送 “输入账号密码” 消息,“学生系统界面” 对象接着向 “数据库服务器” 对象发送 “验证信息” 消息,“数据库服务器” 对象进行验证后向 “学生系统界面” 对象返回验证结果消息,若验证成功,“学生系统界面” 对象向 “学生” 对象发送 “进入学生界面” 消息。当学生在学生界面选择 “浏览课件信息” 时,“学生” 对象向 “学生系统界面” 对象发送 “请求课件信息” 消息,“学生系统界面” 对象向 “数据库服务器” 对象发送 “加载课件信息” 消息,“数据库服务器” 对象将课件信息返回给 “学生系统界面” 对象,“学生系统界面” 对象向 “学生” 对象显示结果消息。当学生选择 “下载课件” 时,“学生” 对象向 “学生系统界面” 对象发送 “获取课件信息” 消息,“学生系统界面” 对象向 “数据库服务器” 对象发送该消息,“数据库服务器” 对象将课件信息返回给 “学生系统界面” 对象,“学生系统界面” 对象完成下载并向 “学生” 对象发送 “下载成功” 消息。当学生选择 “观看教学视频” 时,“学生” 对象向 “学生系统界面” 对象发送 “加载视频信息” 消息,“学生系统界面” 对象向 “数据库服务器” 对象发送该消息,“数据库服务器” 对象将视频信息返回给 “学生系统界面” 对象,“学生系统界面” 对象向 “学生” 对象显示结果消息。时序图清晰地呈现了学生在使用学习系统时各个对象之间的交互顺序。
4. 活动图(Activity Diagram)
- 定义:活动图主要用于描述系统的业务流程或操作流程,它展示了从一个活动到另一个活动的控制流。
- 示例:在销售合同签订过程中,首先进行签订销售合同的活动。接着进行核对合同的活动,若发现有错误,则进行修改合同的相关活动;若核对合同无错误,则进行核对货物清单的活动。在核对货物清单时,若发现缺货,则进行补货或调整合同等相关活动;若有货,则继续核对付款单。若付款单显示未付款,则进行催款等活动;若已付款,则进行发货活动。活动图清晰地呈现了销售合同签订及后续流程中各个活动之间的执行顺序和条件判断。
5. 状态图(State Diagram)
- 定义:状态图用于描述一个对象在其生命周期内可能处于的各种状态,以及状态之间的转换条件。
- 示例:在网上购物的订单处理过程中,订单开始处于 “订单成立” 状态。如果库存足够且已付款,订单进入 “订单备货” 状态。接着进行 “订单出货”,若出货成功,生成出货单号和发票,进入 “出货确认” 状态。在出货确认中,检查并匹配出货信息,若信息无误,订单进入 “出货完毕” 状态。当顾客收货后,订单到达 “订单结束” 状态。若在 “订单出货” 时出货失败,则订单可能回到 “订单备货” 状态进行问题排查和重新出货等操作。清晰地呈现了订单在不同状态之间的转换以及触发状态转换的条件。
三、UML的优势
- 可视化沟通工具
- UML提供了一种统一的、直观的可视化表示方式,使得开发团队成员(包括系统分析师、设计师、程序员等)之间,以及开发团队与用户之间能够更好地沟通系统的需求和设计。例如,通过用例图,用户可以直观地看到系统将提供哪些功能,而开发人员可以更好地理解用户的期望。
- 支持系统的整体规划和设计
- 它能够帮助开发人员从不同的角度对系统进行建模,包括系统的静态结构(通过类图等)和动态行为(通过顺序图、活动图等)。这种多视角的建模有助于开发人员全面地考虑系统的各个方面,提前发现潜在的问题,如类之间的不合理关联、业务流程中的死锁等。
- 提高软件的可维护性和可扩展性
- 由于UML模型清晰地记录了系统的结构和行为,在软件的维护和扩展阶段,新的开发人员可以通过参考UML模型更快地理解系统。例如,当需要添加新的功能时,开发人员可以通过查看用例图了解功能需求,通过类图和顺序图确定需要修改或添加的类和对象之间的交互,从而更高效地进行软件的更新和扩展。
四、UML类图的六种关系
类的关系线条
类的关系基本包含以下几种:
0.类的表示
类的表示:最上方是类名
,中间是属性,下面是方法。+
表示公有,-
表示私有,#
表示保护。
1.继承
继承
是用空心三角
+实线
表示。箭头指向基类
或父类
。
子类
或派生类
继承自父类
或基类
。可以在子类
和派生类
中声明自己的方法和属性。
2.依赖
依赖
是用三角箭头
+虚线
表示。箭头指向被依赖的对象。
3.关联
关联
是用三角箭头
+实线
表示。箭头指向(也可以双向)被依赖元素。
关联
表示一个类和另一类有关系,它使一个类知道另一个类的属性和方法,被关联的元素间通常可以被独立的考虑。
4.聚合
聚合
是用空心菱形头
的实线
+三角箭头
表示,菱形头
指向整体。
聚合`是关联关系的一种,是整体和部分的关系,是一种强的关系,但是部分可以脱离整体而存在。
5.组合
组合
是用带实心菱形头
的实线
+三角箭头
表示,菱形头
指向整体。是聚合
关系的一种,它要求整体包含部分对象的生命周期。
6.实现
实现
是空心三角
+虚线
表示,箭头
指向接口。
五、聚合和组合的区别
聚合是一个个的有独立完整生命周期的个题,聚在一起。而组合脱离了整体就不存在了,无法独立存在。
翅膀和轮子 跟 鸟、汽车是组合关系
而人 跟公司跟部门,是聚合关系,可以辞职可以加入别的公司,是聚合
身体器官跟人是组合关系,脱离了人体,就没有生命周期了,是组合
大雁 跟雁群是聚合关系,可以单飞可以加入别的鸟群,是聚合
鸟翅膀跟大雁是组合关系,脱离了大雁,鸟翅膀就没有s生命周期了,是组合
奔驰汽车 跟 婚庆车队 聚在一起,是聚合关系,今天参加这个婚庆车队,明天也可以参加其他的婚庆车队,是聚合
而轮子和方向盘,脱离了汽车,没有自己生命周期,是组合
六、总结
继承
和实现
体现的是一种类与类、或者类与接口间的纵向关系
;
依赖
,关联
,聚合
,组合
体现的是类与类、类与接口间的引用,即横向关系
;
这几种关系,所表现的强弱程度依次为:组合 > 聚合 > 关联 > 依赖。