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

设计模式-看懂UML类图和时序图

这里不会将UML的各种元素都提到,只讲类图中各个类之间的关系; 能看懂类图中各个类之间的线条、箭头代表什么意思后,也就足够应对 日常的工作和交流; 同时,应该能将类图所表达的含义和最终的代码对应起来;

1.从一个示例开始

请看以下这个类图,类之间的关系是我们需要关注的:

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

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

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

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

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

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

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

下面我们将介绍这六种关系;


2.类之间的关系

2.1泛化关系(generalization)

类的继承结构表现在UML中为:泛化(generalize)与实现(realize):

继承关系为 is-a的关系;两个对象之间如果可以用 is-a 来表示,就是继承关系:(..是..)

eg:自行车是车、猫是动物

泛化关系用一条带空心箭头的直接表示;如下图表示(A继承自B);

eg:汽车在现实中有实现,可用汽车定义具体的对象;汽车与SUV之间为泛化关系;

注:最终代码中,泛化关系表现为继承非抽象类;

2.2实现关系(realize)

实现关系用一条带空心箭头的虚线表示;

eg:”车”为一个抽象概念,在现实中并无法直接用来定义对象;只有指明具体的子类(汽车还是自行车),才 可以用来定义对象(”车”这个类在C++中用抽象类表示,在JAVA中有接口这个概念,更容易理解)

注:最终代码中,实现关系表现为继承抽象类;

2.3聚合关系(aggregation)

聚合关系用一条带空心菱形箭头的直线表示,如下图表示A聚合到B上,或者说B由A组成;

聚合关系用于表示实体对象之间的关系,表示整体由部分构成的语义;例如一个部门由多个员工组成;

与组合关系不同的是,整体和部分不是强依赖的,即使整体不存在了,部分仍然存在;例如, 部门撤销了,人员不会消失,他们依然存在;

2.4组合关系(composition)

组合关系用一条带实心菱形箭头直线表示,如下图表示A组成B,或者B由A组成;

与聚合关系一样,组合关系同样表示整体由部分构成的语义;比如公司由多个部门组成;

但组合关系是一种强依赖的特殊聚合关系,如果整体不存在了,则部分也不存在了;例如, 公司不存在了,部门也将不存在了;

2.5关联关系(association)

关联关系是用一条直线表示的;它描述不同类的对象之间的结构关系;它是一种静态关系, 通常与运行状态无关,一般由常识等因素决定的;它一般用来定义对象之间静态的、天然的结构; 所以,关联关系是一种“强关联”的关系;

比如,乘车人和车票之间就是一种关联关系;学生和学校就是一种关联关系;

关联关系默认不强调方向,表示对象间相互知道;如果特别强调方向,如下图,表示A知道B,但 B不知道A;

注:在最终代码中,关联对象通常是以成员变量的形式实现的;

2.6依赖关系(dependency)

依赖关系是用一套带箭头的虚线表示的;如下图表示A依赖于B;他描述一个对象在运行期间会用到另一个对象的关系;

与关联关系不同的是,它是一种临时性的关系,通常在运行期间产生,并且随着运行时的变化; 依赖关系也可能发生变化;

显然,依赖也有方向,双向依赖是一种非常糟糕的结构,我们总是应该保持单向依赖,杜绝双向依赖的产生;

注:在最终代码中,依赖关系体现为类构造方法及类方法的传入参数,箭头的指向为调用关系;依赖关系除了临时知道对方外,还是“使用”对方的方法和属性;

3.时序图

为了展示对象之间的交互细节,后续对设计模式解析的章节,都会用到时序图;

时序图(Sequence Diagram)是显示对象之间交互的图,这些对象是按时间顺序排列的。时序图中显示的是参与交互的对象及其对象之间消息交互的顺序。

时序图包括的建模元素主要有:对象(Actor)、生命线(Lifeline)、控制焦点(Focus of control)、消息(Message)等等。

[下一节]设计模式-创建型模式之简单工厂模式( Simple Factory Pattern )

相关文章:

设计模式-看懂UML类图和时序图

这里不会将UML的各种元素都提到&#xff0c;只讲类图中各个类之间的关系&#xff1b; 能看懂类图中各个类之间的线条、箭头代表什么意思后&#xff0c;也就足够应对 日常的工作和交流&#xff1b; 同时&#xff0c;应该能将类图所表达的含义和最终的代码对应起来&#xff1b; 1…...

2023年全国最新安全员精选真题及答案57

百分百题库提供安全员考试试题、建筑安全员考试预测题、建筑安全员ABC考试真题、安全员证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 101.&#xff08;单选题&#xff09;遇有&#xff08;&#xff09;及以上强风、浓雾等…...

数字图像处理基础

图像增强&#xff1a;不论方法&#xff0c;只要能够得到较好的图像即可 图像复原&#xff1a;找到图像退化的原因&#xff0c;把噪声过滤得到较好的图像 RGB——HSI(色调 饱和度 亮度)彩色图像处理需要用到灰度图像处理 直方图均衡&#xff0c;灰度概率密度函数接近均匀分布&a…...

onnx手动操作

使用onnx.helper可以进行onnx的制造组装操作&#xff1a; 对象描述ValueInfoProto 对象张量名、张量的基本数据类型、张量形状算子节点信息 NodeProto算子名称(可选)、算子类型、输入和输出列表(列表元素为数值元素)GraphProto对象用张量节点和算子节点组成的计算图对象ModelP…...

虚拟机安装Centos7,ping不通百度

虚拟机安装Centos7&#xff0c;ping不通百度 一、虚拟机网络配置 网络适配器选择桥接模式&#xff0c;不勾选复制物理网络连接状态。 同时虚拟机使用默认配置都是桥接。 二、配置静态IP 1、首先&#xff0c;查看宿主机的IP和网关 2、配置静态ip的文件地址及修改命令如下&…...

leetCode算法第一天

今天开始刷算法题&#xff0c;提升自己的算法思维和代码能力&#xff0c;加油&#xff01; 文章目录 无重复字符的最长子串最长回文子串N形变换字符串转换整数 无重复字符的最长子串 leetCode链接 https://leetcode.cn/problems/longest-substring-without-repeating-characte…...

怎么将太大的word文档压缩变小,3个高效方法

怎么将太大的word文档压缩变小&#xff1f;word文档是我们在办公中使用较多的文件格式之一&#xff0c;相信小伙伴们会遇到这样的问题&#xff0c;编辑完成word文档之后发现&#xff0c;编辑完的文档体积太大了&#xff0c;无论是发送给客户还是上传到邮箱中都不方便&#xff0…...

mvc+动态代理

不使用MVC的时候系统存在的缺陷 一个Servlet都负责了那些工作&#xff1f; 负责了接收数据负责了核心的业务处理负责了数据表中的CRUD负责了页面的数据展示… 分析银行转账项目存在那些问题&#xff1f; 代码的复用性太差。&#xff08;代码的重用性太差&#xff09; 因为没…...

vue-cli(vue脚手架方式搭建)

1.首先安装node前端环境,可以帮助我们去下载其他的组件 下载完成后,去自己的电脑找到node的文件路径,复制去配置环境变量,在path中配 环境搭配完成后,在cmd中进行测试 ,输入一下两个命令进行测试 2.在hbuilderX中创建一个vue-cli项目(标准的前段项目) 3.组件路由 (1)安装 v…...

CentOS 安装 Docker

文章目录 一、更新yum源二、查看docker是否曾经安装过三、安装所需要的软件包四、设置yum源&#xff08;也可以设置成国内的阿里源等&#xff09;五、查看docker版本六、.安装docker &#xff08;默认全部选y&#xff09;七、查看docker安装版本八、docker 启动/停止/重启/开机…...

别搞了 软件测试真卷不动了...

内卷可以说是 2022年最火的一个词了。2023 年刚开始&#xff0c;在很多网站看到很多 软件测试的 2022 年度总结都是&#xff1a;软件测试 越来越卷了&#xff08;手动狗头&#xff09;&#xff0c;2022 年是被卷的一年。前有几百万毕业生虎视眈眈&#xff0c;后有在职人员带头“…...

OJ刷题 第十二篇

21308 - 特殊的三角形 时间限制 : 1 秒 内存限制 : 128 MB 有这样一种特殊的N阶的三角形&#xff0c;当N等于3和4时&#xff0c;矩阵如下&#xff1a; 请输出当为N时的三角形。 输入 输入有多组数据&#xff0c;每行输入一个正整数N&#xff0c;1<N<100 输出 按照给出…...

【计算机专业应届生先找培训还是先找个工作过渡一下?】

计算机专业应届生先找培训还是先找个工作过渡一下&#xff1f; 计算机应届生是先培训还是先工作&#xff0c;这个问题应该困扰了很多专业技能一般的同学&#xff0c;尤其是学历方面还没有优势的普通本专科院校。都说技术与学历优秀的人进大厂&#xff0c;技术一般学历优秀的人能…...

MySQL数据库,联合查询

目录 1. 联合查询 1.1 内查询 1.2 外查询 1.3 自连接 1.4 子查询 1.5 合并查询 1. 联合查询 联合查询&#xff0c;简单的来讲就是多个表联合起来进行查询。这样的查询在我们实际的开发中会用到很多&#xff0c;因此会用笛卡尔积的概念。 啥是笛卡尔积&#xff1f;两张表…...

springboot注解(全)

一、什么是Spring Boot Spring Boot是一个快速开发框架&#xff0c;快速的将一些常用的第三方依赖整合&#xff08;通过Maven子父亲工程的方式&#xff09;&#xff0c;简化xml配置&#xff0c;全部采用注解形式&#xff0c;内置Http服务器&#xff08;Jetty和Tomcat&#xff0…...

进制转换—包含整数和小数部分转换(二进制、八进制、十进制、十六进制)手写版,超详细

目录 1.进制转换必备知识&#xff1a; 1.1 二进制逢2进1 8进制逢8进1 10进制逢10进1 16进制逢16进1 1.2为了区分二、八、十、十六进制&#xff0c;我们通常在数字后面加字母进行区分 2. 二进制与八进制、十六进制相互转换 2.1 二进制转八进制 2.2 八…...

什么是UML?

文章目录 00 | 基础知识01 | 静态建模类图对象图用例图 02 | 动态建模时序图通信图状态图活动图 03 | 物理建模构件图部署图 UML&#xff08;Unified Model Language&#xff09;&#xff0c;统一建模语言&#xff0c;是一种可以用来表现设计模式的直观的&#xff0c;有效的框图…...

5.3 Mybatis映射文件 - 零基础入门,轻松学会查询的select标签和resultMap标签

本文目录 前言一、创建XML映射文件二、MybatisX插件安装三、mapper标签四、select标签UserMapper接口方法UserMapper.xml 五、resultMap标签定义resultMap标签修改select标签 总结 前言 MyBatis的强大在于它的语句映射&#xff0c;它提供了注解和XML映射文件两种开发方式&…...

“华为杯”研究生数学建模竞赛2020年-【华为杯】B题:汽油辛烷值优化建模(附获奖论文和python代码实现)

目录 摘 要: 1 问题重述 1.1 问题背景 1.2 问题重述 2 模型假设 3 符号说明...

C6678开发概述与Sys/bios基本使用

C6678开发概述 参考开发环境标记及术语创建sys/bios自定义平台运行第一个sys/bios程序Clock模块使用Demo 参考 TMS320C6678 Multicore Fixed and Floating-Point Digital Signal Processor Datasheet TMS320C66x DSP CorePac User Guide 官方手册 创龙6678开发教程 开发环境 …...

复杂系统交付中的风险治理与经济模型转型

1. 复杂系统交付中的风险本质与治理转型在航空航天、国防军工等复杂系统开发领域&#xff0c;项目失败率长期居高不下。根据IBM对全球500个大型系统的调研&#xff0c;73%的项目存在严重进度延迟&#xff0c;平均超支达到原始预算的189%。这种系统性失效的根源在于传统工程治理…...

Linux驱动开发:原子操作实现LED设备互斥访问

1. 项目概述&#xff1a;用原子操作给LED驱动加把“锁”在嵌入式Linux开发里&#xff0c;驱动开发是绕不开的一环。很多时候&#xff0c;一个硬件设备&#xff0c;比如一个简单的LED灯&#xff0c;可能会被多个用户空间的应用程序同时访问。想象一下&#xff0c;一个APP想开灯&…...

【UE5】EnhancedInput进阶实战:从基础绑定到模块化设计

1. EnhancedInput系统概述与核心优势 第一次接触UE5的EnhancedInput系统时&#xff0c;我完全被它的灵活性震惊了。相比传统输入处理方式&#xff0c;这套系统就像从手动挡汽车升级到了自动驾驶——不仅能识别简单的按键动作&#xff0c;还能精确捕捉输入设备的压力感应、手势轨…...

Win11任务栏小喇叭失踪?别慌!3个亲测有效的修复方法(含重启资源管理器与音频服务)

Win11任务栏音量图标消失&#xff1f;3种专业修复方案与深度解析 刚升级Win11的用户常会遇到一个令人抓狂的小问题——任务栏右下角的音量图标突然"离家出走"。这个看似微不足道的小喇叭&#xff0c;却是我们日常调节系统音量的主要入口。当它消失时&#xff0c;不仅…...

Win10/Win11网络适配器出问题?试试这个重置TCP/IP和Winsock的终极命令(netsh winsock reset)

彻底解决Windows网络协议栈故障&#xff1a;netsh命令深度指南 当你的Windows 10或11设备突然无法联网&#xff0c;甚至连网络适配器都显示异常时&#xff0c;大多数人会本能地尝试重启电脑或切换飞行模式。但如果你发现这些常规操作毫无效果&#xff0c;甚至Windows自带的网络…...

深入解析瑞芯微RK3399/RK3288平台ISP驱动:从V4L2框架到Camera Sensor联动

1. 项目概述 在嵌入式Linux开发&#xff0c;特别是涉及多媒体处理的项目中&#xff0c;图像信号处理器&#xff08;ISP&#xff09;驱动的理解往往是打通摄像头应用链路的关键一环&#xff0c;也是很多开发者感觉“黑盒”最多的地方。最近在调试基于瑞芯微RK3399和RK3288平台的…...

Rust异步任务取消机制:从协作式取消到结构化并发实践

1. 项目概述&#xff1a;当异步任务“半途而废”时在Rust的异步编程世界里&#xff0c;我们常常专注于如何让任务“跑起来”——用async/await优雅地处理并发&#xff0c;用Future描述计算&#xff0c;用tokio或async-std这样的运行时来驱动一切。代码逻辑清晰&#xff0c;从A点…...

为什么你的Midjourney胶片图总像数码后期?——从光子散射模型到显影时间算法的底层差异解析

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;胶片质感的视觉直觉与认知偏差 胶片质感并非单纯的技术残留&#xff0c;而是一种经由人类视觉系统长期训练形成的感知锚点——它将颗粒噪点、色偏渐变、边缘晕影等非理想光学特征&#xff0c;编码为“真…...

QLC SSD可靠性提升:LDPC软判决与智能固件如何实现低开销加固

1. 项目概述&#xff1a;当QLC成为主流&#xff0c;可靠性成了“房间里的大象”如果你最近关注过固态硬盘市场&#xff0c;或者自己动手组装过电脑&#xff0c;大概率会注意到一个趋势&#xff1a;QLC闪存颗粒的硬盘越来越多了&#xff0c;而且价格越来越香。从大厂的消费级产品…...

CellProfiler:生物图像分析的瑞士军刀,让科研更智能更高效

CellProfiler&#xff1a;生物图像分析的瑞士军刀&#xff0c;让科研更智能更高效 【免费下载链接】CellProfiler An open-source application for biological image analysis 项目地址: https://gitcode.com/gh_mirrors/ce/CellProfiler 你是否曾经面对成百上千张细胞图…...