UML概述、类图关系及连接线表示

ops/2024/11/17 20:22:21/

一、什么是 UML

以下是官方的描述:
UML(Unified Modeling Language)即统一建模语言,它是一种用于可视化、详述、构造和文档化软件密集系统的语言。UML 并不是一种编程语言,而是一种可视化的建模语言,主要用于软件开发过程中的分析、设计阶段,帮助开发人员更好地理解系统的结构和行为。
简单来说,就是规定一个约定俗成的东西,方便大家表示一些行为(根据这个东西,大家都能知道这个行为,基本不用再一一解释)。

二、UML的主要图型

  1. 用例图(Use Case Diagram)
    • 定义:用例图主要用于描述系统的功能需求,它展示了系统中的参与者(Actor)与用例(Use Case)之间的关系。参与者可以是用户、外部系统等,用例代表系统提供的功能。
    • 示例:以一个产品销售系统为例,参与者有“用户”和“销售员”。“用户”这个参与者可以与“购买物品”“维修物品”“退货”等用例相关联;“销售员”可以与“上架物品”“查询物品”“销售物品”等用例相关联。用例图可以清晰地展示不同用户角色与系统功能之间的交互关系,帮助开发人员和用户沟通需求。

image.png
2. 类图(Class Diagram)

  • 定义:类图是一种静态结构图,用于描述系统中的类、类的属性以及类之间的关系。类是对具有相同属性和行为的对象的抽象。
  • 示例:在这个系统中,存在 “动物” 类,具有 “有生命”属性和“新陈代谢”、“繁殖”等方法或操作。“水” 与 “氧气”和“动作” 是依赖关系。“鸟”与“动物”是继承关系,即鸟肯定属于动物。“大雁”与“鸟”同样道理也是继承关系;但“雁群”与“大雁”属于聚合关系,即大雁可以组成雁群,也可以单独行动。“翅膀”和“鸟”属于组合关系,比聚合关系和关联关系强一些。类图清晰地呈现了各个类之间的关系以及类的特性和操作。

image.png
3. 时序图(Sequence Diagram)

  • 定义:时序图主要用于描述对象之间的动态交互顺序,它按照时间顺序展示了对象之间的消息传递。
  • 示例:在学生使用的学习系统中,当学生登录系统时,顺序图可以展示 “学生” 对象向 “学生系统界面” 对象发送 “输入账号密码” 消息,“学生系统界面” 对象接着向 “数据库服务器” 对象发送 “验证信息” 消息,“数据库服务器” 对象进行验证后向 “学生系统界面” 对象返回验证结果消息,若验证成功,“学生系统界面” 对象向 “学生” 对象发送 “进入学生界面” 消息。当学生在学生界面选择 “浏览课件信息” 时,“学生” 对象向 “学生系统界面” 对象发送 “请求课件信息” 消息,“学生系统界面” 对象向 “数据库服务器” 对象发送 “加载课件信息” 消息,“数据库服务器” 对象将课件信息返回给 “学生系统界面” 对象,“学生系统界面” 对象向 “学生” 对象显示结果消息。当学生选择 “下载课件” 时,“学生” 对象向 “学生系统界面” 对象发送 “获取课件信息” 消息,“学生系统界面” 对象向 “数据库服务器” 对象发送该消息,“数据库服务器” 对象将课件信息返回给 “学生系统界面” 对象,“学生系统界面” 对象完成下载并向 “学生” 对象发送 “下载成功” 消息。当学生选择 “观看教学视频” 时,“学生” 对象向 “学生系统界面” 对象发送 “加载视频信息” 消息,“学生系统界面” 对象向 “数据库服务器” 对象发送该消息,“数据库服务器” 对象将视频信息返回给 “学生系统界面” 对象,“学生系统界面” 对象向 “学生” 对象显示结果消息。时序图清晰地呈现了学生在使用学习系统时各个对象之间的交互顺序。

image.png
4. 活动图(Activity Diagram)

  • 定义:活动图主要用于描述系统的业务流程或操作流程,它展示了从一个活动到另一个活动的控制流。
  • 示例:在销售合同签订过程中,首先进行签订销售合同的活动。接着进行核对合同的活动,若发现有错误,则进行修改合同的相关活动;若核对合同无错误,则进行核对货物清单的活动。在核对货物清单时,若发现缺货,则进行补货或调整合同等相关活动;若有货,则继续核对付款单。若付款单显示未付款,则进行催款等活动;若已付款,则进行发货活动。活动图清晰地呈现了销售合同签订及后续流程中各个活动之间的执行顺序和条件判断。

image.png
5. 状态图(State Diagram)

  • 定义:状态图用于描述一个对象在其生命周期内可能处于的各种状态,以及状态之间的转换条件。
  • 示例:在网上购物的订单处理过程中,订单开始处于 “订单成立” 状态。如果库存足够且已付款,订单进入 “订单备货” 状态。接着进行 “订单出货”,若出货成功,生成出货单号和发票,进入 “出货确认” 状态。在出货确认中,检查并匹配出货信息,若信息无误,订单进入 “出货完毕” 状态。当顾客收货后,订单到达 “订单结束” 状态。若在 “订单出货” 时出货失败,则订单可能回到 “订单备货” 状态进行问题排查和重新出货等操作。清晰地呈现了订单在不同状态之间的转换以及触发状态转换的条件。

image.png

三、UML的优势

  1. 可视化沟通工具
    • UML提供了一种统一的、直观的可视化表示方式,使得开发团队成员(包括系统分析师、设计师、程序员等)之间,以及开发团队与用户之间能够更好地沟通系统的需求和设计。例如,通过用例图,用户可以直观地看到系统将提供哪些功能,而开发人员可以更好地理解用户的期望。
  2. 支持系统的整体规划和设计
    • 它能够帮助开发人员从不同的角度对系统进行建模,包括系统的静态结构(通过类图等)和动态行为(通过顺序图、活动图等)。这种多视角的建模有助于开发人员全面地考虑系统的各个方面,提前发现潜在的问题,如类之间的不合理关联、业务流程中的死锁等。
  3. 提高软件的可维护性和可扩展性
    • 由于UML模型清晰地记录了系统的结构和行为,在软件的维护和扩展阶段,新的开发人员可以通过参考UML模型更快地理解系统。例如,当需要添加新的功能时,开发人员可以通过查看用例图了解功能需求,通过类图和顺序图确定需要修改或添加的类和对象之间的交互,从而更高效地进行软件的更新和扩展。

四、UML类图的六种关系

类的关系线条

类的关系基本包含以下几种:
image.png

0.类的表示

类的表示:最上方是类名,中间是属性,下面是方法。+表示公有,-表示私有,#表示保护。
image.png

1.继承

继承是用空心三角+实线表示。箭头指向基类父类
子类派生类继承自父类基类。可以在子类派生类中声明自己的方法和属性。
image.png

2.依赖

依赖是用三角箭头+虚线表示。箭头指向被依赖的对象。
image.png

3.关联

关联是用三角箭头+实线表示。箭头指向(也可以双向)被依赖元素。
关联表示一个类和另一类有关系,它使一个类知道另一个类的属性和方法,被关联的元素间通常可以被独立的考虑。
image.png

4.聚合

聚合是用空心菱形头实线+三角箭头表示,菱形头指向整体。
聚合`是关联关系的一种,是整体和部分的关系,是一种强的关系,但是部分可以脱离整体而存在。
image.png

5.组合

组合是用带实心菱形头实线+三角箭头表示,菱形头指向整体。是聚合关系的一种,它要求整体包含部分对象的生命周期。
image.png

6.实现

实现空心三角+虚线表示,箭头指向接口。
image.png

五、聚合和组合的区别

聚合是一个个的有独立完整生命周期的个题,聚在一起。而组合脱离了整体就不存在了,无法独立存在。
翅膀和轮子 跟 鸟、汽车是组合关系
而人 跟公司跟部门,是聚合关系,可以辞职可以加入别的公司,是聚合
身体器官跟人是组合关系,脱离了人体,就没有生命周期了,是组合
大雁 跟雁群是聚合关系,可以单飞可以加入别的鸟群,是聚合
鸟翅膀跟大雁是组合关系,脱离了大雁,鸟翅膀就没有s生命周期了,是组合
奔驰汽车 跟 婚庆车队 聚在一起,是聚合关系,今天参加这个婚庆车队,明天也可以参加其他的婚庆车队,是聚合
而轮子和方向盘,脱离了汽车,没有自己生命周期,是组合

六、总结

继承实现体现的是一种类与类、或者类与接口间的纵向关系;
依赖关联聚合组合体现的是类与类、类与接口间的引用,即横向关系;
这几种关系,所表现的强弱程度依次为:组合 > 聚合 > 关联 > 依赖。


http://www.ppmy.cn/ops/134521.html

相关文章

浅谈“通感一体”

文章目录 5G_Advanced的关键技术通感一体的介绍通感一体应用通感一体面临的挑战 5G_Advanced的关键技术 2024年6月18日16点30分,在上海举行的3GPP RAN第104次会议上,R18标准正式冻结,标志着5G技术的又一重要里程碑。值得注意的是&#xff0c…

spark性能优化调优指导性文件

1.让我们看一下前面的核心参数设置: num-executors10||20,executor-cores1||2,executor-memory10||20,driver-memory20,spark.default.parallelism64 假设我们的火花队列资源如下: 内存1T,内…

git配置用户信息

在 Git 中配置用户信息,主要是设置你的用户名和电子邮件地址,这些信息会被 Git 用来记录提交的作者信息。以下是配置用户信息的步骤: 打开命令行工具。 设置你的用户名: git config --global user.name "你的名字"例如…

npm list -g --depth=0(用来列出全局安装的所有 npm 软件包而不显示它们的依赖项)

您提供的命令 npm list -g --depth0 是在 Node Package Manager (npm) 的上下文中使用的,用来列出全局安装的所有 npm 软件包而不显示它们的依赖项。 这是它的运作方式: npm list -g --depth0-g: 指定列表应包括全局安装的软件包。--depth0: 限制树形结…

【智能化仪表设计】化工仪表及自动化全套课件

目录 第二章 压力测量仪表 第一节: 压力单位 第三章 流量测量仪表 第四节:涡街流量计 第五节:电磁流量计 第四章 物位测量仪表 第三节:电容式物位传感器 第四节:声波式物位仪表 三、预处理系统的设计原则和…

探索MoviePy:Python视频编辑的瑞士军刀

文章目录 🎬 探索MoviePy:Python视频编辑的瑞士军刀第一部分:背景介绍第二部分:MoviePy是什么?第三部分:如何安装MoviePy?第四部分:MoviePy的基本函数使用方法1. 视频剪辑2. 视频拼接…

pyflink datastream数据流ds经过一系列转换后转为table,t_env.from_data_stream(ds)

在 pyflink 处理数据流过程中,有时候需要将data_stream转为table,下面是正确的方式,即每一个算子(map,reduce, window)操作之后需要指定输出数据类型。 from pyflink.common.typeinfo import Types from pyflink.datastream import StreamEx…

基于图像处理与机器学习的车牌检测识别系统设计与实现

摘要:随着智能交通系统的快速发展,车牌检测识别技术在交通管理、安防监控等领域的应用日益广泛。然而,复杂环境因素如光照变化、遮挡、背景干扰等给车牌检测识别带来诸多挑战。本研究旨在设计并实现一种鲁棒性强、准确率高的车牌检测识别系统…