一文读懂 UML:基础概念与体系框架

UML 图是一种标准化的建模语言,在软件开发和系统设计等领域有着广泛的应用。以下是对 UML 图各类图的详细介绍:

1.用例图

  • 定义:用例图是从用户角度描述系统功能的模型图,展现了系统的参与者与用例之间的关系。
  • 作用:帮助开发团队收集和明确系统的功能需求,确定系统的边界和范围,为后续的设计和开发工作提供依据。
  • 构成元素
    • 参与者:表示与系统进行交互的外部实体,可以是用户、其他系统或设备等。
    • 用例:代表系统提供的一个完整的功能单元,通常用椭圆表示。
    • 关系:包括关联关系(参与者与用例之间的连接)、包含关系(一个用例包含另一个用例的功能)、扩展关系(一个用例在特定条件下扩展另一个用例的功能)等。

2.类图

  • 定义:类图是对系统中类的结构和它们之间关系的静态描述。
  • 作用:它是面向对象设计的核心工具,用于定义系统中的类、类的属性和操作,以及类之间的各种关系,为系统的实现提供了蓝图。
  • 构成元素
    • :用矩形表示,分为三层,分别是类名、属性和操作。
    • 关系:包括继承关系(用空心三角形和实线表示,子类继承父类的属性和操作)、关联关系(用实线连接两个类,表示它们之间存在某种联系)、聚合关系(用空心菱形和实线表示,整体与部分的关系,部分可以脱离整体存在)、组合关系(用实心菱形和实线表示,整体与部分的关系,部分不能脱离整体单独存在)等。

3.对象图

  • 定义:对象图是类图的实例化,展示了在特定时刻系统中对象的状态和它们之间的关系。
  • 作用:用于分析系统在某一特定时刻的静态结构,帮助理解系统中对象的具体情况以及它们之间的交互方式。
  • 构成元素
    • 对象:与类图中的类相对应,是类的具体实例,对象名的表示形式通常是 “对象名:类名”,属性值会显示具体的取值。
    • 关系:与类图中的关系类似,展示对象之间的连接和关联关系。

4.顺序图

  • 定义:顺序图是一种交互图,它按照时间顺序展示了对象之间的消息传递过程。
  • 作用:用于描述系统中对象之间的动态交互过程,清晰地展示了对象之间的调用顺序和消息传递的时间顺序,有助于理解系统的行为逻辑。
  • 构成元素
    • 对象:用矩形框表示,位于顺序图的顶部,每个对象有一条垂直的生命线,表示对象的存在时间。
    • 消息:用带箭头的直线表示,从发送对象的生命线指向接收对象的生命线,箭头的类型表示消息的类型,如同步消息、异步消息等。
    • 激活期:对象执行操作的时间段,用矩形条表示,位于对象的生命线上。

5.协作图

  • 定义:协作图也是一种交互图,它侧重于展示对象之间的协作关系和组织结构。
  • 作用:强调对象之间的交互关系和链接关系,用于描述系统中对象是如何相互协作来完成特定任务的。
  • 构成元素
    • 对象:与顺序图中的对象表示相同。
    • 链接:用直线表示,连接相关的对象,表示它们之间的关联关系。
    • 消息:与顺序图中的消息类似,但在协作图中,消息通常带有顺序编号,以表示消息的发送顺序。

6.状态图

  • 定义:状态图用于描述一个对象在其生命周期内的状态变化情况。
  • 作用:帮助开发人员理解对象的行为逻辑,以及对象在不同状态下对事件的响应方式,对于处理具有复杂状态转换的对象非常有帮助。
  • 构成元素
    • 状态:用圆角矩形表示,代表对象在某一时刻的状态。
    • 转换:用带箭头的直线表示,连接不同的状态,箭头旁标注触发转换的事件和条件。
    • 初始状态和终止状态:初始状态用实心圆表示,是对象生命周期的起始点;终止状态用同心圆表示,标志着对象生命周期的结束。

7.活动图

  • 定义:活动图是一种用于描述系统业务流程或操作步骤的图形化工具,可以看作是状态图的扩展。
  • 作用:用于展示系统中各种活动的执行顺序和逻辑关系,有助于分析和优化业务流程,也可用于描述软件系统中的算法和操作流程。
  • 构成元素
    • 活动:用圆角矩形表示,代表一个具体的操作或任务。
    • 转移:用带箭头的直线表示,连接不同的活动,表示活动的执行顺序。
    • 分支和合并:用菱形表示,用于根据条件判断来决定流程的走向。
    • 泳道:将活动图中的活动按照不同的职责或参与者进行划分,用矩形框表示,有助于清晰地展示不同角色在流程中的作用。

8.构件图

  • 定义:构件图描述了系统中的软件构件及其之间的依赖关系,展示了系统的物理架构。
  • 作用:帮助开发人员理解系统的组成结构,以及各个构件之间的相互关系,便于进行系统的模块划分和架构设计。
  • 构成元素
    • 构件:用矩形框表示,带有两个小矩形作为其接口,代表系统中的一个可独立部署的软件单元,如模块、类库、组件等。
    • 接口:用小圆圈表示,位于构件的边缘,定义了构件提供的服务和需要的服务。
    • 依赖关系:用带箭头的虚线表示,说明一个构件依赖于另一个构件的服务。

9.部署图

  • 定义:部署图用于描述系统的硬件架构,展示了软件构件在硬件节点上的部署情况以及节点之间的连接关系。
  • 作用:帮助规划系统的物理部署,确定硬件资源的分配和软件系统的运行环境,对于系统的实施和运维具有重要的指导作用。
  • 构成元素
    • 节点:用立方体表示,代表系统中的硬件设备,如服务器、客户端计算机、打印机等。
    • 构件:与构件图中的构件表示相同,部署在节点上。
    • 连接:用直线表示,连接不同的节点,表示节点之间的通信链路。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/74132.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring 及 Spring Boot 条件化注解(15个)完整列表及示例

Spring 及 Spring Boot 条件化注解完整列表及示例 1. 所有条件化注解列表 Spring 和 Spring Boot 提供了以下条件化注解(共 15 个),用于在配置类或方法上实现条件化注册 Bean 或配置: 注解名称作用来源框架Conditional自定义条件…

【Kafka】深入探讨 Kafka 如何保证一致性

文章目录 Kafka 基本概念回顾​副本角色​ 数据写入一致性​同步副本(ISR)集合​数据读取一致性​故障处理与一致性恢复​总结​ 在分布式系统领域,数据一致性是至关重要的一环。作为一款高性能的分布式消息队列系统,Kafka 在设计…

从入门到精通:SQL注入防御与攻防实战——红队如何突破,蓝队如何应对!

引言:为什么SQL注入攻击依然如此强大? SQL注入(SQL Injection)是最古老且最常见的Web应用漏洞之一。尽管很多公司和组织都已经采取了WAF、防火墙、数据库隔离等防护措施,但SQL注入依然在许多情况下能够突破防线&#…

【算法day27】有效的数独——请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。

36. 有效的数独 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例…

leetcode 2360. 图中的最长环 困难

给你一个 n 个节点的 有向图 ,节点编号为 0 到 n - 1 ,其中每个节点 至多 有一条出边。 图用一个大小为 n 下标从 0 开始的数组 edges 表示,节点 i 到节点 edges[i] 之间有一条有向边。如果节点 i 没有出边,那么 edges[i] -1 。…

PySpur: AI 智能体可视化开发平台

GitHub:https://github.com/PySpur-Dev/pyspur 更多AI开源软件:发现分享好用的AI工具、AI开源软件、AI模型、AI变现 - 小众AI PySpur是一个开源的轻量级可视化AI智能体工作流构建器,旨在简化AI系统的开发流程。通过拖拽式界面,用户…

vcpkg安装及使用教程,以安装matio库解析mat文件为例

vcpkg安装及使用教程,以安装matio库解析mat文件为例 1. vcpkg安装2 安装matio三方库3 将三方库集成到VS中3.1 全局集成3.2 集成到特定工程4 结语Vcpkg 是微软开发的一款开源的 C/C++ 包管理工具,旨在简化 C/C++ 项目依赖库的安装和管理。它支持跨平台(Windows、Linux、macO…

LLM架构解析:NLP基础(第一部分)—— 模型、核心技术与发展历程全解析

本专栏深入探究从循环神经网络(RNN)到Transformer等自然语言处理(NLP)模型的架构,以及基于这些模型构建的应用程序。 本系列文章内容: NLP自然语言处理基础(本文)词嵌入&#xff0…

【Rtklib入门指南】2. 使用RTKLIB GUI进行观测数据分析

数据准备 下载2025年1月1日的香港CORS站数据和观测星历,详情参照如下博客: 使用GAMP_GOOD进行hk数据下载教程-CSDN博客 分析工具 RTKLIB 2.4.3 demo5(也可以选用RTKLIB2.4.2,但不建议使用RTKLIB2.4.3) 分析流程 …

suse15 sp1使用华为云软件源yum源zypper源

登录suse15终端, cd /etc/zypp/repos.d/进入目录后执行以下命令: zypper ar -fcg https://mirrors.huaweicloud.com/opensuse/distribution/leap/15.1/repo/oss HuaWeiCloud:15.1:OSS zypper ar -fcg https://mirrors.huaweicloud.com/opensuse/distribu…

首屏加载时间优化解决

🤖 作者简介:水煮白菜王(juejin/csdn同名) ,一位前端劝退师 👻 👀 文章专栏: 高德AMap专栏 ,记录一下平时学习在博客写作中记录,总结出的一些开发技巧✍。 感…

Sentinel[超详细讲解]-1

定义一系列 规则 &#x1f47a;&#xff0c;对资源进行 保护 &#x1f47a;&#xff0c; 如果违反的了规则&#xff0c;则抛出异常&#xff0c;看是否有fallback兜底处理&#xff0c;如果没有则直接返回异常信息&#x1f60e; 1. 快速入门 1.1 引入 Sentinel 依赖 <depend…

02-Docker 使用

docker:快速构建、运行、管理应用的工具,可以帮助我们下载应用镜像,创建并运行镜像的容器,从而快速部署应用 1、部署mysql 先停掉虚拟机中的MySQL,确保你的虚拟机已经安装Docker,且网络开通的情况下,执行下面命令即可安装MySQL(注意:若服务器上已经有mysql 占用了330…

@DeclareParents 注解实现接口功能增强:Spring中通过接口引入实现功能增强的完整示例

以下是Spring中通过接口引入实现功能增强的完整示例&#xff1a; // 1. 目标接口及实现类 package com.example;public interface Service {void doSomething(); }Component class ServiceImp implements Service {Overridepublic void doSomething() {System.out.println(&qu…

HTML中数字和字母不换行显示

HTML中数字和字母不换行显示的默认行为及如何通过CSS的word-wrap和word-break属性进行调整。 在HTML中标签中的数字和字母默认是不换行的&#xff0c;如果要将他们换行&#xff0c;在CSS中添加”word-wrap: break-word;” 即可解决 语法&#xff1a;word-wrap: normal|break-w…

Git团队开发命令总结

简易Git工作流 myname: 团队成员个人分支dev: 团队公共分支 个人独立分支开发 同步最新的【dev公共分支】到本地。【重要】基于最新的【dev公共分支】&#xff0c;创建【个人功能开发分支】。在此基础上开发。【个人功能开发分支】开发完成&#xff0c;推送到远程库。如果【…

Python人工智能大模型入门教程:从零构建高性能预测模型

引言&#xff1a;AI大模型时代的技术革命 在AlphaGo战胜人类棋手的里程碑事件后&#xff0c;人工智能技术进入爆发式发展阶段。本教程将带您从零开始&#xff0c;使用Python构建一个工业级神经网络模型。通过本教程&#xff0c;您不仅能掌握GPU加速训练、混合精度计算等前沿技…

python-leetcode 61.N皇后

题目&#xff1a; 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题 的解…

Mybatis_Plus中的常用注解

目录 1、TableName TableId TableId的type属性 TableField 1、TableName 经过以上的测试&#xff0c;在使用MyBatis-Plus实现基本的CRUD时&#xff0c;我们并没有指定要操作的表&#xff0c;只是在 Mapper接口继承BaseMapper时&#xff0c;设置了泛型User&#xff0c;而操…

JavaScript函数知识点总结

JavaScript函数是一种可重复使用的代码块,它接受输入值(参数)、执行特定任务,并返回输出值。 1. 声明函数 function greet(name) {return "Hello, " + name + "!"; }console.log(greet("Alice")); // 输出: Hello, Alice! console.log( t…