十七、统一建模语言 UML
统一建模语言(Unified Modeling Language,UML)是一种通用的建模语言,具有创建系统的静态结构和动态行为等多种结构模型的能力,具有可扩展性和通用性,适合于多种多变结构系统的建模。
统一建模语言的特点:
- 统一标准
- 面向对象
- 可视化、表达能力强
- 独立于过程
- 易掌握、易用
一、UML 组成元素
1、事物
1)结构事物
- 类(Class)
- 接口(Interface)
- 协作(Collaboration)
- 用例(User)
- 主动类(Active Class)
- 构件(Component)
- 制品(Arifact)
- 节点(Node)
2)行为事物
- 交互(Interaction)
- 状态机(State Machine)
- 活动(Activity)
3)分组事物:最主要的分组事物就是包
4)注释事物:UML 模型的解释部分
2、关系
1)依赖:实心箭头的虚线
2)关联和聚集:描述一组链,链是对象之间的连接
3)泛化:空心箭头的实线
4)实现:空心箭头的虚线
两种场景会用到实现
- 接口和实现他们之间的类或者构件
- 用例和实现用例的协作
3、图
序号 | 图 | 需求分析 | 设计阶段 | 编码实现 | 测试 | 运行维护 |
1 | 用例图 | ✓ | ✓ | |||
2 | 类图 | ✓ | ✓ | |||
3 | 对象图 | ✓ | ✓ | ✓ | ||
4 | 包图 | ✓ | ✓ | |||
5 | 构件图 | ✓ | ✓ | ✓ | ||
6 | 配置图 | ✓ | ✓ | ✓ | ✓ | |
7 | 活动图 | ✓ | ✓ | ✓ | ||
8 | 顺序图 | ✓ | ✓ | ✓ | ✓ | |
9 | 状态图 | ✓ | ✓ | ✓ | ||
10 | 合作图 | ✓ | ✓ | ✓ | ✓ |
二、模型图
1、用例图(Use Case Diagram)
用例模型(Use Case Model)描述的是外部执行者所理解的系统功能。主要用于需求分析阶段,是系统开发者和用户反复讨论,对需求规格说明书达成共识。
用例图的组成元素:1)方框符号代表系统;2)椭圆符号代表用例;3)人形符号代表执行者。他们之间的关系用连接线表示,其关系由连接线上的文字标明。
2、类图(Class Diagram)
用类和它们之间的关系描述系统一种图示,展示了系统中类的静态结构和类与类之间的相互联系,表示一个系统的逻辑结构。
类的图符中的属性只注明类型而不能有具体值。
类的图符分为长式和短式:长式由类名、属性和操作组成;短式只有类名。
3、对象图(Object Diagram)
对象是类的实例,及时地反映了系统执行到某处时系统的工作状况。
对象的图符中,也分为长式和短式,对象名加了下划线,对象名后面可以接冒号和类名,用来说明创建该对象的类。
4、包图(Package DIagram)
包是一种组合结构,包由关系密切的一组模型元素组成,还可以由其他包嵌套构成。
包将许多累集合成一个更高层次的单位,形成一个高内聚、低耦合的类集合,降低系统的复杂性。
构件的组成元素:
- 公有访问(+)
- 私有访问(-)
- 保护访问(#)
包之间的关系:泛化和依赖
5、构件图(Component Diagram)
构件图又称为组件图,显示代码本身的逻辑结构,描述系统中存在的软件结构以及他们之间的依赖关系。
构件图的组成元素:构件、依赖关系、界面
构件是系统体系结构中独立的物理可替换单位,代表系统的一个物理模块,表达的是系统代码本身的结构。是包与类对应的物理代码模块,逻辑上与包、类对应,实际上是一个文件。
6、配置图(Deployment Diagram)
配置图描述了系统中硬件和软件的物理配置情况和系统体系结构,显示系统运行时刻的结构。
配置图的组成元素有结点和连接
配置图中的结点代表计算机资源,通常是服务器、客户机等硬件,结点包括其上运行的软件结构以及对象。各结点之间的连接是交互的通信路径,例如:TCP/IP,NFS,FUSE 等协议。
7、顺序图(Sequence Diagram)
顺序图用来描述对象之间动态的交互关系,着重体现对象间消息传递的时间顺序。顺序图存在两个轴:水平轴表示不同的对象,垂直轴表示时间。
8、合作图(Collaboration Diagram)
合作图也称协作图,用于描述相互合作的对象间的交互关系和连接关系。
合作图的组成元素是对象图,箭头表示对象间的消息流向,消息箭头必须附加标记,索命消息发送的先后顺序,还可以显示条件、重复和回送值。
9、状态图(State Diagram)
状态图用来描述一个特定对象的所有可能的状态及其引起状态迁移的事件。
状态图的组成元素:1)状态;2)迁移(附有文字说明);3)起始状态;4)结束状态
并不是所有的对象都能画状态图,只有具有个数限制、意义明确的状态的对象,并且其行为受不同轧辊太的影响而发生改变的对象,才需要画状态图。
1)事件
2)状态迁移
3)迁移动作
10、活动图(Activity Diagram)
活动图由状态图变化而来,各自用于不同目的。状态图着重描述对象的状态变化以及触发状态变化的事件;交互模型(顺序图和合作图)则描述对象之间的动态交互行为;活动图描述系统中各种活动的执行顺序,刻画一个方法中所要进行的各项活动的执行流程。
活动图的组成元素:1)活动;2)初态;3)终态;4)判断;5)同步
三、视图模型
模型的四个视图:逻辑视图、开发视图、过程视图、物理视图。统一的场景(scenarios)。
- 场景(用例视图)
描述系统的功能需求,展示外部用户能够观察到的系统功能模型,例如:用例图。
- 逻辑视图
描述如何实现系统内部的功能,系统的静态结构和动态协作关系,包括有类图、对象图、状态图、顺序图、合作图、活动图等
- 开发视图(实现试图)
描述系统代码构件组织和实现模块以及他们之间的依赖关系,例如:构件图。
- 过程视图(进程视图)
描述系统的并发性,并处理这些线程间的通信和同步,将系统分割成并发执行的控制线程以及处理这些线程的通信和同步,包括:状态图、顺序图、合作图、活动图、构件图、配置图。
- 物理视图(部署试图)
定义系统中软硬件的物理体系结构及连接、哪个程序或对象驻留在哪台计算机上执行,配置图。
四、设计模式
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。
1、创建型设计模式
创建型设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。
- 工厂模式(Factory Pattern)
- 抽象工厂模式(Abstract Factory Pattern)
- 单例模式(Singleton Pattern)
- 建造者模式(Builder Pattern)
- 原型模式(Prototype Pattern)
2、结构型设计模式
结构型模式关注对象之间的组合和关系,旨在解决如何构建灵活且可复用的类和对象结构。
- 适配器模式(Adapter Pattern)
- 桥接模式(Bridge Pattern)
- 过滤器模式(Filter、Criteria Pattern)
- 组合模式(Composite Pattern)
- 装饰器模式(Decorator Pattern)
- 外观模式(Facade Pattern)
- 享元模式(Flyweight Pattern)
- 代理模式(Proxy Pattern)
3、行为型模式
行为型模式关注对象之间的通信和交互,旨在解决对象之间的责任分配和算法的封装。
- 责任链模式(Chain of Responsibility Pattern)
- 命令模式(Command Pattern)
- 解释器模式(Interpreter Pattern)
- 迭代器模式(Iterator Pattern)
- 中介者模式(Mediator Pattern)
- 备忘录模式(Memento Pattern)
- 观察者模式(Observer Pattern)
- 状态模式(State Pattern)
- 空对象模式(Null Object Pattern)
- 策略模式(Strategy Pattern)
- 模板模式(Template Pattern)
- 访问者模式(Visitor Pattern)
4、设计模式的六大原则
1)开闭原则(Open Close Principle)
开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。
2)里氏代换原则(Liskov Substitution Principle)
里氏代换原则是面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。LSP 是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。
3)依赖倒转原则(Dependence Inversion Principle)
这个原则是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。
4)接口隔离原则(Interface Segregation Principle)
这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。它还有另外一个意思是:降低类之间的耦合度。由此可见,其实设计模式就是从大型软件架构出发、便于升级和维护的软件设计思想,它强调降低依赖,降低耦合。
5)迪米特法则,又称最少知道原则(Demeter Principle)
最少知道原则是指:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。
6)合成复用原则(Composite Reuse Principle)
合成复用原则是指:尽量使用合成/聚合的方式,而不是使用继承。
相关文章:
十七、统一建模语言 UML
统一建模语言(Unified Modeling Language,UML)是一种通用的建模语言,具有创建系统的静态结构和动态行为等多种结构模型的能力,具有可扩展性和通用性,适合于多种多变结构系统的建模。 统一建模语言的特点&am…...

OpenTelemetry 介绍
文章目录 1. 概述什么是OpenTelemetry发展历史与背景主要特点与优势2. 核心概念追踪(Tracing)指标(Metrics)日志(Logs)行李(Baggage)3. 主要组件API层SDK层数据收集器(Collector)导出器(Exporters)OTLP(OpenTelemetry Protocol)4. 集成方式语言支持(SDK)自动与手动插桩常见框…...

【连载14】基础智能体的进展与挑战综述-多智能体系统设计
基础智能体的进展与挑战综述 从类脑智能到具备可进化性、协作性和安全性的系统 【翻译团队】刘军(liujunbupt.edu.cn) 钱雨欣玥 冯梓哲 李正博 李冠谕 朱宇晗 张霄天 孙大壮 黄若溪 在基于大语言模型的多智能体系统(LLM-MAS)中,合作目标和合…...

blender云渲染指南2025版
一、云渲染核心概念 Blender云渲染是将本地渲染任务迁移到云端服务器集群的技术,通过分布式计算实现效率提升100倍以上的解决方案,其核心逻辑是:用户上传Blender项目文件至【渲染101】等云平台,云端调用高性能服务器(…...

Mysql-OCP PPT课程讲解并翻译
#跳过介绍,直接从干货开始记录 第一章 安装mysql windows安装...

加速项目落地(Trae编辑器)
目录 vscode安装python支持 vscode常用插件 Trae编辑器 两个界面合成 补充(QT开发的繁琐) AI编程哪家强?Cursor、Trae深度对比,超详细! - 知乎 Trae兼容vscode的插件,我们可以先在vscode里面装好再一…...

配置 Web 服务器练习
一、要求 1.通过https://ip 可以访问到网站首页 2.通过 https://ip/private/ 实现用户访问控制,仅允许已经添加的 tom,jerry 能够访问到 private 子路径的界面 3.通过 https://ip/vrit/ 实现能够访问到将系统 /nginx/virt 目录下的网页文件࿰…...

Python程序,输入IP,扫描该IP哪些端口对外是开放的,输出端口列表
#!/usr/bin/env python # -*- coding: utf-8 -*-""" IP端口扫描程序 输入IP地址,扫描该IP哪些端口对外是开放的,输出端口列表 """import socket import sys import concurrent.futures import ipaddress from tabulate im…...
如何设置内网映射端口到外网访问?哪些软件可以进行端口映射?
大多数时候我们所使用的服务器都是在内网搭建的,而且内网是可以访问外网的,但外网是没法直接访问内网IP和端口服务的。也就是说外网无法直接访问到内网的网络地址,需要大家去搭建一个内外网互通的桥梁,把内网服务器指定端口映射到…...

OpenCv实战笔记(3)基于opencv实现调用摄像头并实时显示画面
一、实现效果 二、实现原理 使用 OpenCV 打开摄像头,持续捕获视频帧,并在一个窗口中实时显示这些帧,直到用户按下 ESC 键退出。整体流程:打开摄像头(cv::VideoCapture)>创建图像显示窗口(cv…...
QMK键盘固件自定义指南 - 打造你的专属键盘体验
QMK键盘固件自定义指南 - 打造你的专属键盘体验 🚀 前言 在机械键盘的世界里,QMK固件让你的键盘不再只是简单的输入设备,而是可以按照你的意愿定制的强大工具。本文将深入浅出地介绍如何自定义QMK键盘的行为,从基础概念到高级应…...

upload-labs靶场通关详解:第四关
一、分析源代码 可以看出这一关仍然是黑名单验证,但是它禁止了更多的后缀。像php3,php4这类后缀也被加入了黑名单,第三关的方法在这里显然就失效了。那么我们想一想,既然配置文件中存在将php3当作php来执行的功能,那么…...

openharmony系统移植之gpu mesa3d适配
openharmony系统移植之gpu mesa3d适配 文章目录 openharmony系统移植之gpu mesa3d适配1. 环境说明2. gpu内核panfrost驱动2.1 使能panfrost驱动2.2 panfrost dts配置 3. buildroot下测试gpu驱动3.1 buildroot配置编译 4. ohos下mesa3d适配4.1 ohos下mesa3d编译调试4.1.2 编译4.…...

Linux58 ssh服务配置 jumpserver 测试双网卡 为何不能ping通ip地址
判断为NAT模式网卡 能ping 通外网 ens34为仅主机模式网卡 [rootlocalhost network-scripts]# ip route show default default via 10.1.1.254 dev ens33 proto static metric 100 10.0.0.0/8 dev ens33 proto kernel scope link src 10.1.1.37 metric 100 11.0.0.0/8 dev…...
LangChain:大语言模型应用的“瑞士军刀”入门指南
LanChain入门指南 什么是LangChain?LangChain的核心价值1. 模块化设计 - AI界的"乐高积木"2. 典型应用场景 快速入门实战环境准备第一个示例:公司命名生成器进阶功能:带记忆的对话机器人 学习路线建议常见问题解答总结 什么是LangC…...
网站网页经常 400 错误,清缓存后就好了的原因剖析
目录 一、HTTP 400 错误的常见起因(一)URL 有问题(二)缓存或 Cookie 出状况(三)文件尺寸超标(四)请求头信息不对劲二、清缓存为何能奏效三、其他可以尝试的解决办法(一)重新检查 URL(二)暂时关闭浏览器插件(三)切换网络环境(四)更新浏览器版本(五)检查服务器…...
Redis BigKey 问题是什么
BigKey 问题是什么 BigKey 的具体表现是 redis 中的 key 对应的 value 很大,占用的 redis 空间比较大,本质上是大 value 问题。 BigKey怎么找 redis-cli --bigkeysscanBig Key 产生的原因 1.redis数据结构使用不恰当 2.未及时清理垃圾数据 3.对业务预…...

web 自动化之 selenium+webdriver 环境搭建及原理讲解
文章目录 一、web 自动化测试学习说明二、什么 web 自动化测试三、selenium 简介四、web自动化测试环境搭建五、web 自动化测试第一个脚本六、selenium 原理及源码讲解 一、web 自动化测试学习说明 进阶 web 自动化测试学习:掌握 python 编程基础 二、什么 web 自…...

2025ISCC练武校级赛部分题解WP
Web 战胜卞相壹 <!-- 路过的酒罐王柯洁九段说: --> <!-- 会叠棋子有什么用!你得在棋盘内战胜他!我教你个定式,要一直记得!一直! --> <!-- SGF B[ae];B[ce];B[df];B[cg];B[ag];B[ai];B[ci];…...

PyTorch 版本、torchvision 版本和 Python 版本的对应关系
PyTorch 版本、torchvision 版本和 Python 版本的对应关系 在深度学习领域,PyTorch 及其配套库 torchvision 的使用极为广泛。但不同版本的 PyTorch、torchvision 与 Python 之间存在严格的对应关系,若版本搭配不当,会导致代码运行出错…...
uniapp-商城-49-后台 分类数据的生成(方法加精)
前面47和48章节对代码进行了分析和解读。但是还是又很多地方需要加精。如方法中的注释,执行中的提示,特别是添加和修改中,相关值的初始化,另外还有页面的刷新,并且在页面刷新时的异步操作 同步化实现。 但这里唯一不好…...
nginx 配置后端健康检查模块
nginx自带的针对后端节点健康检查的功能比较简单,通过默认自带的ngx_http_proxy_module 模块和ngx_http_upstream_module模块中的参数来完成,当后端节点出现故障时,自动切换到健康节点来提供访问。但是nginx不能事先知道后端节点状态是否健康,后端即使有不健康节点,负载均…...

RS485和RS232 通信配置
RS232 目前硬件上支持RS232的有以下板卡: LubanCat-5IO底板(含有RS232x2) 7.1. 引脚定义 具体的引脚定义可以参考背面的丝印 LubanCat-5IO底板 引脚定义图 7.2. 跳帽配置 LubanCat-5IO底板 鲁班买5IO底板上的RS485和RS232是共用同一组…...

zst-2001 历年真题 设计模式
设计模式 - 第1题 a 设计模式 - 第2题 一个产品可以产生多个就是抽象,一个就是工厂 比如这样 第二题a是意图 bc: d 设计模式 - 第3题 b 设计模式 - 第4题 类图里全是builder,疯狂暗示 设计模式 - 第5题 aa 设计模式 - 第6题 只有工厂方法是创…...
微软系统 红帽系统 网络故障排查:ping、traceroute、netstat
在微软(Windows)和红帽(Red Hat Enterprise Linux,RHEL)等系统中,网络故障排查是确保系统正常运行的重要环节。 ping、traceroute(在Windows中为tracert)和netstat是三个常用的网络…...
11.多用组合和少继承
11.多用组合和少继承 目录介绍 01.前言思考的介绍 1.1 组合优于继承思考1.2 实际中的案例1.3 思考继承的争议 02.绘图应用程序案例 2.1 案例的背景2.2 用继承实现多形状2.3 用组合实现多形状 03.不同鸟类程序案例 3.1 案例的背景3.2 用继承实现多鸟类3.3 继承的问题暴露3.4 用…...
【AWS+Wordpress】将本地 WordPress 网站部署到AWS
前言 自学笔记,解决问题为主,亲测有效,欢迎补充。 本地开发机:macOS(Sequoia 15.0.1) 服务器:AWS EC2(Amazon Linux 2023) 目标:从本地迁移 WordPress 到云…...

鸿蒙NEXT开发动画案例4
1.创建空白项目 2.Page文件夹下面新建Spin.ets文件,代码如下: /*** TODO SpinKit动画组件 - 双粒子旋转缩放动画* author: CSDN-鸿蒙布道师* since: 2025/05/08*/ ComponentV2 export struct SpinFour {// 参数定义Require Param spinSize: number 36…...
Java(day136):Arrays.asList() 方法:如何在 Java 中高效地将数组转化为列表!
前言 在 Java 编程中,数组和集合是两种常用的数据结构。数组是固定大小的容器,而集合则是动态扩展的容器。随着 Java 集合框架的引入,开发者通常更倾向于使用集合类来存储和操作数据,因为集合类提供了更多的功能和灵活性。 然而&a…...

XML语言
XML语言 在开始介绍Mybatis之前,先介绍一下XML语言,XML语言发明最初是用于数据的存储和传输,它是由一个一个的标签嵌套而成 <?xml version"1.0" encoding"UTF-8" ?> <outer> <name>阿伟</name&…...