当前位置: 首页 > news >正文

UML基础

统一建模语言(UML是 Unified Modeling Language的缩写, 是用来对软件系统进行可视化建模的一种语言。UML为面向对象开发系统的产品 进行说明、可视化、和编制文档的一种标准语言。


alt

共有9种图

UML中的图其实不止九种 (相同的图还可能会有不同的名称), 这里的九种图是被普遍认可的基础图, 分别为:用例图、类图、对象图、状态图、构件图、部署图、协作图、交互序列图、活动图。

之前在惠普时,用过时序图(即顺序图,交互序列图)


UML图也可分为用例视图、设计视图、进程视图、实现视图和拓扑视图

又可以根据静动分为静态视图动态视图

  • 静态图分为:用例图,类图,对象图,包图,构件图,部署图

  • 动态图分为:状态图,活动图,协作图,序列图

alt
alt
alt

一般情况下,又以类图,状态图,用例图最为重要


类图(Class Diagram)


类图是使用频率最高的UML图之一

If someone were to come up to you in a dark alley and say, 'Psst, wanna see a UML diagram?' that diagram would probably be a class diagram. The majority of UML diagrams I see are class diagrams.”

--- Martin Fowler 《UML Distilled: A Brief Guide to the Standard Object Modeling Language, Third Edition》[1]

“如果有人在黑暗的小巷中向你走来并对你说:‘嘿,想不想看一张UML图?’那么这张图很有可能就是一张类图,我所见过的大部分的UML图都是类图”(《UML精粹:标准对象建模语言简明指南(第3版)》)

深入浅出UML类图[2]


显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。那它其实就是用来帮助我们识别出人、事、物和业务的概念,并理清它们的关系的一种方法

计算机可以分为笔记本电脑和台式机,现在有主板、硬盘、内存、显示器、键盘、鼠标、无线鼠标、有线鼠标、机械鼠标、光电鼠标、蓝牙鼠标,请画出类之间的关系,不需要写属性,需要假设的地方在图中注明,如假设计算机只有一个显示器


类之间的关系


类与类之间的关系通常有6种,即

  • 依赖关系(Dependency): 用带箭头的虚线表示,箭头从使用类指向被依赖的类

  • 关联关系(Association): 单向关联用一个带箭头的实线表示,箭头从使用类指向被关联的类; 双向关联用带箭头或者没有箭头的实线来表示

    • 聚合关系 (Aggregation) : 是关联关系的一种,表示整体和部分之间的关系(成员也可以脱离整体而存在),如学校和老师,车子和轮胎. 用带空心菱形的实线来表示聚合关系, 菱形指向整体

    • 组合关系 (Composition) : 也是关联关系的一种,是一种比聚合关系还要强的关系(部分对象不能脱离整体对象而单独存在,如人的身体和大脑之间的关系,大脑不能脱离身体而单独存在), 用带实心菱形的实线来表示组合关系,菱形指向整体

  • 实现关系(Realization/implements): 即 接口和实现类之间的关系。类实现了接口中的抽象方法。用带空心三角箭头的虚线来表示实现关系,箭头从实现类指向接口。

  • 泛化关系(Generalization/extends): 也称继承关系, 是父子类之间的继承关系,表示一般与特殊的关系,指定子类如何特殊化父类的特征和行为。 用带空心三角箭头的实线来表示泛化关系,箭头从子类指向父类。


alt
alt

六种关系中,从弱到强依次是:

依赖关系 < 关联关系 < 聚合关系 < 组合关系 < 实现关系 = 泛化关系

其中,依赖关联还区分单向双向


六大类UML类图之间的关系[3]

UML类图详解[4]

alt
alt


实例


alt

车的类图结构为<<abstract>>,表示车是一个抽象类;

它有两个继承类:小汽车和自行车;它们之间的关系为实现关系,使用带空心箭头的虚线表示;

小汽车为与SUV之间也是继承关系,它们之间的关系为泛化关系,使用带空心箭头的实线表示;

小汽车与发动机之间是组合关系,使用带实心箭头的实线表示;

学生与班级之间是聚合关系,使用带空心箭头的实线表示;

学生与身份证之间为关联关系,使用一根实线表示;

学生上学需要用到自行车,与自行车是一种依赖关系,使用带箭头的虚线表示;


实例来自

看懂UML类图[5]

常用的UML建模详解[6]



状态(机)图(State Diagram)


状态机图描述的是围绕某一事物状态变化的图。它和活动图的区别在于,活动图是描述事物发生的流程,是多个角色参与的,而状态机描述的是事物的状态变化,并没有角色这个概念。


alt

1、和活动图一样,状态机图也是只能有一个开始状态,可以有多个结束状态。

2、状态是通过某一事件来进行变迁的。

3、状态是离散的,且一般用形容词或名词描述。

4、转换也可加上条件,表示分支结构。

alt

如:

空调开机进入自检状态,检测不通过进入错误状态并且亮红灯,检测通过默认进入制冷状态,按遥控器模式切换可以在制冷、制热、吹风切换,制冷可以设置温度,并有温度监控程序,室温低于设定温度则停止制冷,高于则开始制冷;制热则反过来;吹风就只能吹风,没有其他功能



实例


alt
alt
alt
alt
alt
alt

实心圆表示开始,只能有一个;

"空心套实心圆"表示结束,可以有多个.

圆角矩形里都是状态,

转移(即直线箭头)上是动作或返回的状态




用例图(Use Case Diagram)


描述了作为一个外部观察者,以其视角对系统的印象。

通俗理解, 用例就是软件的功能模块,所以是设计系统分析阶段的起点

强调这个系统是什么而不是这个系统怎么工作。


角色是人状的图标,用例是一个椭圆,通讯是连接角色和用例的线。


用例之间的关系


  • 包含(include)

  • 扩展(extend)

  • 泛化(generalization)

UML—用例图,Use Case[7]



实例


alt
alt

用例图的使用案例与分析[8]



在线画图网站:

VisualParadigm[9]

亿图图示[10]

参考资料

[1]

《UML Distilled: A Brief Guide to the Standard Object Modeling Language, Third Edition》: https://book.douban.com/subject/1231832/

[2]

深入浅出UML类图: http://www.uml.org.cn/oobject/201211231.asp

[3]

六大类UML类图之间的关系: https://segmentfault.com/a/1190000021317534

[4]

UML类图详解: https://juejin.cn/post/6844903893327937550#heading-2

[5]

看懂UML类图: https://design-patterns.readthedocs.io/zh_CN/latest/read_uml.html

[6]

常用的UML建模详解: https://note.youdao.com/web/#/file/WEBe8ba4466b3d1775023be4d1dab9cd6c6/note/A895F3772E37471A96C0B73F97C5C1E6/

[7]

UML—用例图,Use Case: https://www.jianshu.com/p/3cde67aed8e9

[8]

用例图的使用案例与分析: https://blog.csdn.net/ljtyzhr/article/details/45875975

[9]

VisualParadigm: https://online.visual-paradigm.com/cn/diagrams/templates/software-design/

[10]

亿图图示: https://www.edrawmax.cn/online/?lang=zh

本文由 mdnice 多平台发布

相关文章:

UML基础

统一建模语言&#xff08;UML是 Unified Modeling Language的缩写, 是用来对软件系统进行可视化建模的一种语言。UML为面向对象开发系统的产品 进行说明、可视化、和编制文档的一种标准语言。 共有9种图 UML中的图其实不止九种 (相同的图还可能会有不同的名称), 这里的九种图是…...

C# void 关键字学习

C#中void关键字是System.Void的别名&#xff1b; 可以将 void 用作方法&#xff08;或本地函数&#xff09;的返回类型来指定该方法不返回值&#xff1b; 如果C&#xff03;方法中没有参数&#xff0c;则不能将void用作参数&#xff1b;这是与C语言不同的&#xff0c;C语言有…...

OA与CRM与ORACLE

办公自动化&#xff08;Office Automation&#xff0c;简称OA&#xff09;&#xff0c;是将计算机、通信等现代化技术运用到传统办公方式&#xff0c;进而形成的一种新型办公方式。办公自动化利用现代化设备和信息化技术&#xff0c;代替办公人员传统的部分手动或重复性业务活动…...

【C++杂货铺】探索list的底层实现

文章目录 一、list的介绍及使用1.1 list的介绍1.2 list的使用1.2.1 list的构造1.2.2 list iterator的使用1.2.3 list capacity&#xff08;容量相关&#xff09;1.2.4 list element access&#xff08;元素访问&#xff09;1.2.5 list modifiers&#xff08;链表修改&#xff0…...

NX/UG二次开发—Parasolid—PK_BODY_pick_topols

最近在写一个判断圆孔深度和通盲状态的功能&#xff0c;发现PK_BODY_pick_topols射线函数可以设置到射线垂直距离&#xff0c;相当于一个圆柱空间&#xff0c;但在测试发现&#xff0c;R7的孔&#xff0c;设置&#xff1a; max_edge_dist 0.007; max_vertices 0.007; 结果测…...

【校招VIP】前端算法考点之大数据相关

考点介绍&#xff1a; 大数据的关键技术分为分析技术和处理技术&#xff0c;可用于大数据分析的关键技术主要包括A/B测试&#xff0c;关联规则挖掘&#xff0c;数据挖掘&#xff0c;集成学习&#xff0c;遗传算法&#xff0c;机器学习&#xff0c;自然语言处理&#xff0c;模式…...

Goland2023版新UI的debug模式调试框按钮功能说明

一、背景 Jetbrains家的IDE的UI基本都是一样的&#xff0c;debug模式的调试框按钮排列也是一致的&#xff0c;但是在我使用Goland2023版的新UI时&#xff0c;发现调试框的按钮变化还是很大的&#xff0c;有一些按钮被收起来了&#xff0c;如果看之前的博客会发现有一些文中的旧…...

【AIGC专题】Stable Diffusion 从入门到企业级应用0414

一、前言 本文是《Stable Diffusion 从入门到企业级应用实战》系列的第四部分能力进阶篇《Stable Diffusion ControlNet v1.1 图像精准控制》的第0414篇 利用Stable Diffusion ControlNet 法线贴图模型精准控制图像生成。本部分内容&#xff0c;位于整个Stable Diffusion生态体…...

汇编原理学习记录:物理地址=段地址*16+偏移地址

文章目录 知识点个人思考解释存储器大小为1MB段的最大占用存储为64KB物理地址段地址*16偏移地址 知识点 8086计算机拥有20根地址总线和16根数据总线&#xff0c;地址总线中的16根和数据总线存在复用 数据总线的数量决定了数据总线的宽度&#xff0c;决定了处理器的位数&#…...

mysql-2:安装mysql

MySQL安装 操作系统&#xff1a;CentOS 7MySQL&#xff1a;5.6 MySQL的卸载 查看MySQL软件 rpm -qa | grep mysqlyum repolist all | grep mysql 卸载MySQL 卸载mysql yum remove -y mysql mysql-libs mysql-common删除mysql下的数据文件 rm -rf /var/lib/mysql删除mys…...

gin框架

【狂神说】Gin框架一小时上手 | 快速转型GoWeb开发 | Go语言零基础教程_哔哩哔哩_bilibili 1.介绍 2.简单程序 1&#xff09;gin.GET/POST/PUT/DELETE函数 Go Gin 简明教程 | 快速入门 | 极客兔兔 (geektutu.com) 我的理解是&#xff1a;这类函数就像是在监听接口一样&…...

Laravel 完整开源项目大全

原型项目 Laravel 5 Boilerplate —— 基于当前Laravel最新版本&#xff08;Laravel 6.0&#xff09;并集成Boilerplate的项目Laravel 5 Angular Material Starter —— 这是一个 Laravel 和 AngularJS 的原型项目&#xff08;最高支持版本&#xff1a;5.3&#xff0c;长期未更…...

Spring MVC @Controller和@RequestMapping注解

Controller 注解 Controller 注解可以将一个普通的 Java 类标识成控制器&#xff08;Controller&#xff09;类&#xff0c;示例代码如下。 package net.biancheng.controller; import org.springframework.stereotype.Controller; Controller public class IndexController …...

软件架构之前后端分离架构服务器端高并发演进之路

软件架构之前后端分离架构&服务器端高并发演进之路 前后端分离架构从业务角度从质量属性从性能角度 服务器端关于不同并发量的演进之路1. 单体架构2. 第一次演进&#xff1a;应用服务器和数据库服务器分开部署3. 第二次演进&#xff1a;引入本地缓存和分部署缓存4. 第三次演…...

第4节-PhotoShop基础课程-Ps格式

文章目录 前言1.像素认识2. 图层认识1.图层有上下前后遮挡关系2.橡皮檫可以擦掉选择图层的像素3.新建图层4.新建删除图层 3. 分辨率的理解4. 图片格式A 前言 本章主要介绍PS常用格式 1.像素认识 下面每个格子就是像素 2. 图层认识 1.图层有上下前后遮挡关系 2.橡皮檫可以擦…...

C语言malloc函数学习

malloc的全称是memory allocation&#xff0c;中文叫动态内存分配&#xff0c;用于申请一块连续的指定大小的内存块区域&#xff0c;以void*类型返回分配的内存区域地址&#xff1b; 函数原型为void *malloc(unsigned int size)&#xff0c;在内存的动态存储区中分配一个长度为…...

从零开始学习deepsort目标追踪算法----原理和代码详解

目录 1.目标追踪的主要步骤 2、传统sort算法的流程 3.Deepsort算法流程 4、目标追踪整体代码 4.1 Configs文件目录下&#xff1a; 4.2 deep_sort/deep_sort/deep目录下&#xff1a; 4.3 deep_sort/deep_sort/sort目录下&#xff1a; 运行demo&#xff1a; DeepSORT&…...

第三章 LInux多线程开发 3.1-3.5线程创建 终止 分离

创建线程&#xff1a;&#xff08;好好记住 可能会叫写代码&#xff09; 一般情况下,main函数所在的线程我们称之为主线程&#xff08;main线程&#xff09;&#xff0c;其余创建的线程称之为子线程。 程序中默认只有一个进程&#xff0c;fork()函数调用&#xff0c;2进行 程序…...

空间曲线的参数方程

空间曲线的参数方程 二维直线 经过一点 P ( x 0 &#xff0c; y 0 ) P(x_0&#xff0c;y_0) P(x0​&#xff0c;y0​)的方向向量为 n ( c o s θ &#xff0c; s i n θ ) n(cos\theta&#xff0c;sin\theta) n(cosθ&#xff0c;sinθ)的直线参数方程为&#xff1a; [ x y …...

非华为机型如何体验HarmonyOS鸿蒙系统 刷写HarmonyOS鸿蒙GSI系统以及一些初步的bug修复

最近很多视频网站有非华为机型使用HarmonyOS鸿蒙系统的演示。其实大都是刷了HarmonyOS鸿蒙系统gsi系统。体验还可以。有些刷入后bug较多。那么这些机型是如何刷写gsi&#xff1f;可以参考我以往帖子 安卓玩机搞机-----没有第三方包 刷写第三方各种GSI系统 体验非官方系统_gsi刷…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

高防服务器价格高原因分析

高防服务器的价格较高&#xff0c;主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因&#xff1a; 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器&#xff0c;因此…...

字符串哈希+KMP

P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...