面向对象的需求分析与UML构造块详解
目录
- 前言
- 1 面向对象的需求分析概述
- 2 UML构造块概述
- 3 UML事物详解
- 3.1 结构事物(Structural Things)
- 3.2 行为事物(Behavioral Things)
- 3.3 分组事物(Grouping Things)
- 3.4 解释事物(Annotational Things)
- 4 UML关系详解
- 4.1 依赖关系(Dependency)
- 4.2 关联关系(Association)
- 4.3 泛化关系(Generalization)
- 4.4 实现关系(Realization)
- 5 UML图详解
- 5.1 用例图(Use Case Diagram)
- 5.2 类图(Class Diagram)
- 5.3 顺序图(Sequence Diagram)
- 5.4 活动图(Activity Diagram)
- 5.5 状态图(State Diagram)
- 6 公共机制与建模规则
- 结语
前言
在软件开发过程中,需求分析是决定系统是否成功的关键阶段。面向对象的需求分析(Object-Oriented Requirement Analysis)是现代软件工程中广泛采用的一种方法,它将现实世界中的事物建模为对象,强调系统的结构与行为。统一建模语言(UML, Unified Modeling Language)是实现面向对象分析与设计的重要工具,通过一套图形化的表示方式,将复杂的系统结构、行为关系直观展示出来。
本文将围绕面向对象的需求分析展开,重点介绍UML构造块的组成,包括事物、关系和图,并详细解析每个构造块的具体内容,帮助读者更好地理解和运用UML进行面向对象建模。
1 面向对象的需求分析概述
面向对象的需求分析是一种以对象为中心的方法,它强调从用户角度理解问题域,并将其转化为系统模型。与传统的结构化方法相比,面向对象方法具有更高的抽象能力和更好的可维护性。
在这一过程中,分析人员会识别出系统中的关键对象及其属性、行为和交互关系。这种方式不仅贴近现实世界,还便于后续的系统设计和代码实现。
UML是支持面向对象方法的标准建模语言,它提供了一整套符号和图形工具,用于表达系统中的各种构造块、关系和交互逻辑。使用UML可以有效提升需求分析的表达力和沟通效率。
2 UML构造块概述
UML的核心是构造块(Building Blocks),它们构成了UML建模语言的基本元素。构造块包括三大类:事物(Things)、关系(Relationships) 和 图(Diagrams)。
这三者之间相互配合,共同构建起完整的系统模型。其中,事物是UML的静态或动态元素,关系描述了事物之间的连接与依赖,图则是事物和关系的可视化展现。
接下来的章节将详细介绍这三类构造块的内容及其在需求分析中的应用。
3 UML事物详解
UML中的“事物”是建模中最基本的构件,它们代表了模型中的元素实体。根据其功能和语义,事物可以分为四类:结构事物、行为事物、分组事物和解释事物。
3.1 结构事物(Structural Things)
结构事物主要用于描述系统的静态部分,包括类、接口、协作、用例等。它们是系统模型中的骨架。
- 类(Class):类是面向对象建模中的核心,表示具有共同属性和行为的对象集合。在需求分析阶段,类用来描述现实世界中的对象,如“客户”、“订单”、“产品”等。
- 接口(Interface):接口定义了一组操作,但不具体实现,用于描述系统中的角色行为规范。
- 用例(Use Case):用例描述系统与外部参与者之间的交互,突出系统的功能需求。
- 组件(Component):组件代表系统中的可部署模块,在高层次需求分析中用于描述子系统或服务。
- 节点(Node):节点用于表示运行环境中的物理设备或执行环境,如服务器或数据库节点。
结构事物的建模有助于梳理系统中“有什么”,即识别出需求所涉及的静态实体。
3.2 行为事物(Behavioral Things)
行为事物描述系统的动态特征和运行时行为,包括交互和状态机。
- 交互(Interaction):交互指系统中多个对象之间的信息交换,通常通过消息或方法调用实现。在需求分析中,这有助于描述业务流程的执行逻辑。
- 状态机(State Machine):状态机建模用于表示对象生命周期中状态的变化,特别适合用于描述具有明显状态变化的业务对象,如“订单状态”从“已下单”到“已发货”再到“已完成”。
行为事物聚焦“做什么”,它们展示了系统如何响应外部事件,以及对象如何协同完成任务。
3.3 分组事物(Grouping Things)
分组事物用于将模型元素组织在一起,常见的分组事物是包(Package)。
- 包(Package):包是一种逻辑分组机制,用于将相关的类、接口、用例等元素组织在一起,提高模型的层次性和可管理性。在大型系统中,合理的包划分可以有效降低模型的复杂度。
虽然分组事物的数量不多,但在需求分析阶段,它对于模型的组织结构有着重要意义。
3.4 解释事物(Annotational Things)
解释事物是对模型中的其他元素进行注释和解释的工具,用于提供辅助性的信息。
- 注释(Note):注释可附加在模型的任何元素上,用于补充说明、假设、业务规则等。例如,可以在用例图中添加注释来解释某个用例的前置条件或特殊流程。
解释事物虽不参与系统的运行逻辑,但在需求文档中起到举足轻重的辅助说明作用。
4 UML关系详解
关系用于表示事物之间的连接与依赖,主要包括依赖、关联、泛化和实现四种关系类型。
4.1 依赖关系(Dependency)
依赖表示一个事物依赖另一个事物的定义或行为。通常情况下,变化的事物会影响到依赖它的事物。例如,用例图中的参与者依赖于系统的用例来完成某个功能。
4.2 关联关系(Association)
关联是对象之间的结构性连接,通常具有多重性、导航性和角色名等属性。例如,“学生”和“课程”之间可以建立“选修”的关联,表示一个学生可以选修多门课程。
4.3 泛化关系(Generalization)
泛化用于表示继承关系,一个子类继承父类的属性和操作。它强调“是一个”的关系,比如“经理”是“员工”的一种。
4.4 实现关系(Realization)
实现是一种类与接口之间的关系,表示类实现了接口所定义的操作。在需求分析中,这种关系通常体现为系统服务对业务规则的具体实现。
通过这些关系,可以准确表达系统各个元素之间的连接方式和依赖结构。
5 UML图详解
UML图是构造块的可视化载体,它们展示了系统在不同维度下的结构和行为。UML提供了13种标准图,常用于需求分析阶段的主要有用例图、类图、顺序图、活动图和状态图。
5.1 用例图(Use Case Diagram)
用例图用于捕捉系统的功能需求和用户交互,它展示了参与者与系统之间的关系,是需求分析中最常见的图形工具之一。
用例图可以帮助理解系统提供的服务、用户的操作流程以及各个功能之间的逻辑关联。
5.2 类图(Class Diagram)
类图是展示类之间关系的结构图,在需求分析阶段用于识别业务实体及其相互关系,为后续设计提供结构蓝图。
类图中的类通常包括名称、属性和方法,通过关联、继承等关系串联成整体模型。
5.3 顺序图(Sequence Diagram)
顺序图用于描述对象之间在某个场景下的消息交换顺序,展现了系统行为随时间的演进过程,特别适用于分析业务流程和方法调用。
5.4 活动图(Activity Diagram)
活动图是类似流程图的结构,用于建模业务流程或操作逻辑。它清晰地展示了从一个状态到另一个状态的控制流,适合描述复杂的业务逻辑。
5.5 状态图(State Diagram)
状态图专注于描述对象生命周期中的状态转移,对于有明显状态变化的系统组件如订单、设备等非常有用。
这些图形工具协同工作,共同描绘出完整的系统需求模型。
6 公共机制与建模规则
除了构造块本身,UML还定义了一些通用机制和建模规则,用于增强模型的一致性和可理解性。
公共机制包括:
- 规范(Specifications):定义模型元素的精确定义。
- 约束(Constraints):限定模型中元素的取值或行为范围,如用OCL(对象约束语言)定义类的属性范围。
- 注释(Comments):为模型元素添加说明,增强模型的可读性。
此外,建模过程中应遵循一定的规则和最佳实践,例如:
- 保持图表简洁,每张图聚焦于一个核心目标;
- 使用一致的命名规范和图形符号;
- 合理分包和分层,提升系统的可维护性;
- 在建模前充分沟通业务需求,确保模型准确反映现实场景。
这些机制和规则虽然属于辅助内容,但它们直接影响模型的质量和表达效果。
结语
面向对象的需求分析借助UML提供的构造块、关系和图形工具,将用户需求形象、系统地表达出来,是软件建模中不可或缺的一环。从结构事物到行为事物,再到丰富的图形表达方式,UML为分析人员和开发者搭建了一座沟通的桥梁。掌握UML构造块的使用,不仅有助于提升建模能力,更能在项目开发中有效降低沟通成本,提高系统的可维护性和扩展性。
相关文章:
面向对象的需求分析与UML构造块详解
目录 前言1 面向对象的需求分析概述2 UML构造块概述3 UML事物详解3.1 结构事物(Structural Things)3.2 行为事物(Behavioral Things)3.3 分组事物(Grouping Things)3.4 解释事物(Annotational T…...
LeetCode 2843.统计对称整数的数目:字符串数字转换
【LetMeFly】2843.统计对称整数的数目:字符串数字转换 力扣题目链接:https://leetcode.cn/problems/count-symmetric-integers/ 给你两个正整数 low 和 high 。 对于一个由 2 * n 位数字组成的整数 x ,如果其前 n 位数字之和与后 n 位数字…...
RocketMQ深度百科全书式解析
一、核心架构与设计哲学 1. 设计目标 海量消息堆积:单机支持百万级消息堆积,适合大数据场景(如日志采集)。严格顺序性:通过队列分区(Queue)和消费锁机制保证局部顺序。事务…...
A2A与MCP Server:AI智能体协作与工具交互的核心协议对比
A2A与MCP Server:AI智能体协作与工具交互的核心协议对比 摘要 在AI智能体技术爆发式增长的今天,谷歌的A2A协议与Anthropic的MCP协议正在重塑AI系统架构。本文通过协议栈分层模型、企业级架构设计案例及开发者实践指南三大维度,揭示二者在AI生…...
如何将网页保存为pdf
要将网页保存为PDF,可以按照以下几种方法操作: 1. 使用浏览器的打印功能 大多数现代浏览器(如Chrome、Firefox、Edge等)都支持将网页保存为PDF文件。步骤如下: 在 Google Chrome 中: 打开你想保存为PDF…...
位运算与实战场景分析-Java代码版
一、为什么每个程序员都要掌握位运算? 在电商秒杀系统中,位运算可以快速判断库存状态;在权限管理系统里,位运算能用极小的空间存储复杂权限配置;在算法竞赛中,位运算更是高频出现的性能优化利器。这项看似…...
【“星睿O6”AI PC开发套件评测】+ Debian 系统安装及 sysbench 跑分对比
很荣幸这次可以得到机会评测 “星睿O6”AI PC开发套件。第一篇文章,我将分为两个部分: 官方 Debian 系统安装到 NVMEsysbench 跑分以及对比 RK3568 和 I712700KF 正文开始之前,忍不住还是想放几张开箱照片,板子实在是太精致了。…...
java——继承
继承是面向对象的三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。继承是指在原有类的基础上,进行功能扩展,创建新的类型。 概念与作用 代码复用:继承能够避免重…...
STM32嵌入式开发从入门到实战:全面指南与项目实践
STM32嵌入式开发从入门到实战:全面指南与项目实践 一、STM32开发基础概述 1.STM32微控制器核心特性 STM32微控制器基于ARM Cortex - M内核,具备显著的架构优势。其32位处理能力,能够高效处理复杂的计算任务,相较于传…...
企业数据孤岛如何破
企业数据孤岛如何破 背景信息传统方式Flink CDC如何用技术之力 背景信息 在数字化转型的浪潮中,企业数据的价值正从“事后分析”向“实时驱动”快速迁移。企业需要快速、高效地将分散在不同系统中的数据整合起来,以支持实时分析和业务决策。诚然&#x…...
源码编译安装Nginx
源码编译安装Nginx 源码编译安装Nginx创建nginx服务用户安装编译环境依赖包下载Nginx源码构建编译选项,创建makefile文件编译安装nginx为Nginx创建服务单元设置Nginx开机自启服务 yum安装Nginxyum安装openresty 源码编译安装Nginx 如果需要最新版本及定制化模块可以通过源码安…...
查看容器内的eth0网卡对应宿主机上的哪块网卡
查看容器内的eth0网卡对应宿主机上的哪块网卡 问题描述解决办法1. 进入容器,查看网卡的iflink(接口链路索引)值方法1:方法2: 2. 从宿主机过滤查询到的iflink(接口链路索引)值3. 确定veth接口连接的网桥方法2: brctl查看连接到网桥的接口--推荐 4. 查看网桥连接的物理网卡 问题描…...
虚拟偶像“C位出道”:数字浪潮下的崛起与财富密码(3/10)
摘要:虚拟偶像作为数字时代的新宠,凭借数字技术与文化创意的深度融合,在全球范围内迅速崛起。从早期的简单2D形象到如今高度逼真、智能交互的3D虚拟偶像,其发展得益于计算机图形学、动作捕捉、AI等技术的进步。虚拟偶像不仅在娱乐…...
swift菜鸟教程13(函数)
一个朴实无华的目录 今日学习内容:1.Swift 函数1.1函数定义:使用关键字 func。1.2函数参数:以逗号分隔。1.3不带参数函数1.4元组作为函数返回值1.5没有返回值函数1.6函数参数名称1.6.1局部参数名1.6.2外部参数名 1.7可变参数1.8常量ÿ…...
MacOS红队常用攻击命令
MacOS红队常用攻击命令 1.自动化武器2.系统信息3.服务 & 内核信息4.快捷命令5.网络相关6.brew相关 / 软件包相关7.高权限命令8.创建一个管理员权限的后门用户 1.自动化武器 1、linPEAS LinPEAS 是一个脚本,用于在 Linux/Unix/MacOS 主机上搜索提权路径 2、me…...
无人机的振动与噪声控制技术!
一、振动控制技术要点 1. 振动源分析 气动振动:旋翼桨叶涡脱落(如叶尖涡干涉)、动态失速(Dynamic Stall)引发的周期性气动激振力(频率与转速相关)。 机械振动:电机偏心、传动轴不…...
如何使用 Spring Boot 实现分页和排序?
全文目录: 开篇语1. 创建 Spring Boot 项目2. 配置数据库连接3. 创建实体类4. 创建 Repository 接口5. 创建分页和排序服务6. 创建控制器7. 测试分页和排序请求示例:返回结果: 8. 总结 文末 开篇语 哈喽,各位小伙伴们,…...
浅谈编译型语言的运用
如大家所熟悉的,程序在执行之前需要一个专门的编译过程,把程序编译成机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了,程序执行效率高,依赖编译器,如 C/C、Golang 等,…...
知识了解02——了解pnpm+vite+turbo+monorepo的完整构建步骤(react子项目)
(1)初始化monorepo 1)创建项目目录并进入当前目录 2)初始化 pnpm 工作区,生成一个package.json文件 3)在项目根目录下创建 pnpm-workspace.yaml 文件,并定义工作区目录 (2)安装 Turborepo 1)安…...
MySQL 半同步复制,给数据找靠谱 “分身”
目录 一背景 二、MySQL 复制基础概念 为何需要 MySQL 复制 传统异步复制 半同步复制的诞生 三、MySQL 半同步复制原理详解 主要组件及作用 工作流程 半同步复制流程图 四、MySQL 半同步复制配置与代码示例 环境准备 主服务器配置 从服务器配置 示例说明 五、MyS…...
uniapp离线打包提示未添加videoplayer模块
uniapp中使用到video标签,但是离线打包放到安卓工程中,运行到真机中时提示如下: 解决方案: 1、把media-release.aar、weex_videoplayer-release.aar放到工程的libs目录下; 文档:https://nativesupport.dcloud.net.cn/…...
机器人零位标定修正流程介绍
如果想看运动学标定可以看看 机器人运动学参数标定, 一次性把运动学参数和零位标定等一起标定求解. 1. 零位标定 零位标定是机器人运动学标定中的一个重要步骤,其目的是校正机器人关节的初始位置误差。以下是需要进行零位标定的主要原因: 制造误差 在机…...
应用层通信报文设计
/* --------------------------------------------------------------- | 魔数 2byte | 协议版本号 1byte | 序列化算法 1byte | 报文类型 1byte | --------------------------------------------------------------- | 状态 1byte | 保留字段 4byte | 数据长…...
一周学会Pandas2 Python数据处理与分析-Pandas2读取Excel
锋哥原创的Pandas2 Python数据处理与分析 视频教程: 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili Excel格式文件是办公使用和处理最多的文件格式之一,相比CSV文件,Excel是有样式的。Pandas2提…...
技术分享|iTOP-RK3588开发板Ubuntu20系统旋转屏幕方案
iTOP-3588开发板采用瑞芯微RK3588处理器,是全新一代AloT高端应用芯片,采用8nmLP制程,搭载八核64位CPU,四核Cortex-A76和四核Cortex-A55架构,主频高达2.4GHz。是一款可用于互联网设备和其它数字多媒体的高性能产品。 在…...
ubuntu 20.04 安装源码编译 ros humble过程
公司要兼容ros1还需要ros2 这个时候不得不使用ubuntu20.04 安装 humble 但实际上在20.04上安装humble是需要在源码编译的。 根据这个帖子 https://blog.csdn.net/m0_62353836/article/details/129730981 重写一份,以应对无法下载的问题 系统配置 #检查是否为UTF-8编码,是则跳…...
Ubuntu18.04.06安装window虚拟机,安装VirtualBox
VirtualBox官网没有支持Ubuntu18的版本,最低是ubuntu20; 但是现在用的系统是UBuntu18.04.06,又不能升级,查阅了很多办法,最终终于安装VirtualBox可用版本; 1,在Ubuntu18自带的软件应用市场,搜VirtualBox;…...
Matlab 四分之一车体被动悬架、pid、模糊控制和模糊pid控制
1、内容简介 Matlab 198-四分之一车体被动悬架、pid、模糊控制和模糊pid控制 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...
Linux-----驱动
一、内核驱动与启动流程 1. Linux内核驱动 Nor Flash: 可线性访问,有专门的数据及地址总线(与内存访问方式相同)。 Nand Flash: 不可线性访问,访问需要控制逻辑(软件)。 2. Linux启动流程 ARM架构: IRAM…...
用HTML和CSS绘制佩奇:我不是佩奇
在这篇博客中,我将解析一个完全使用HTML和CSS绘制的佩奇(Pig)形象。这个项目展示了CSS的强大能力,仅用样式就能创造出复杂的图形,而不需要任何图片或JavaScript。 项目概述 这个名为"我不是佩奇"的项目是一个纯CSS绘制的卡通猪形象…...
Qwen2.5-7B-Instruct FastApi 部署调用教程
1 环境准备 基础环境最低要求说明: 环境名称版本信息1Ubuntu22.04.4 LTSCudaV12.1.105Python3.12.4NVIDIA CorporationRTX 3090 首先 pip 换源加速下载并安装依赖包 # 升级pip python -m pip install --upgrade pip # 更换 pypi 源加速库的安装 pip config set g…...
潇洒浪: Dify 上传自定义文件去除内容校验 File validation failed for file: re.json
Dify上传文件 添加其他文件类型如 my.myselfsuffix 上传成功 执行报错 File validation failed for file: re.json 解决办法 Notepad 搜索dify源码 注释掉,重启容器 或者直接在容器中修改重启...
【力扣hot100题】(088)最长有效括号
这题目真是越做越难了。 但其实只是思路很难想到,一旦会了方法就很好做。 但问题就在方法太难想了…… 思路还是只要遍历一遍数组,维护动态规划数组记录截止至目前位置选取该元素的情况下有效括号的最大值。 光是知道这个还不够,看了答案…...
XML、JSON 和 Protocol Buffers (protobuf) 对比
目录 1. XML (eXtensible Markup Language) 1)xml的特点: 2)xml的适用场景: 2. JSON (JavaScript Object Notation) 1)JSOM的特点: 2)JSON的适用场景: 3. Protocol Buffers (…...
C++ 入门四:类与对象 —— 面向对象编程的核心基石
一、类的定义 1. 类的基本形式 class 类名 { public: // 公有成员(类内外均可访问)数据类型 数据成员; // 公有数据成员数据类型 成员函数(参数列表); // 公有成员函数声明 protected: // 保护成员(类内和派生类可访问&…...
DeepSeek:穿透行业知识壁垒的搜索引擎攻防战
DeepSeek:穿透行业知识壁垒的搜索引擎攻防战 文 / 产业智能观察组(人机协同创作) 一、搜索引擎的"认知折叠"危机 2024年Q1数据显示,百度搜索结果前10页中,61.7%的内容存在"伪专业化"现象——看似…...
SQL 查询中涉及的表及其作用说明
SQL 查询中涉及的表及其作用说明: 涉及的数据库表 表名别名/用途关联关系dbo.s_orderSO(主表)存储订单主信息(订单号、日期、客户等)dbo.s_orderdetailSoD(订单明细)通过 billid SO.billid 关…...
数组 array
1、数组定义 是一种用于存储多个相同类型数据的存储模型。 2、数组格式 (1)数据类型[ ] 变量名(比较常见这种格式) 例如: int [ ] arr0,定义了一个int类型的数组,数组名是arr0; &am…...
Git 查看提交历史
Git作为最流行的版本控制工具,其提交历史管理是开发者日常工作的核心部分。无论是回溯代码变更、定位问题根源,还是进行版本回退,掌握Git提交历史的操作技巧都至关重要。本文将全面解析Git提交历史相关命令,助你成为版本管理高手&…...
电脑提示“找不到mfc140u.dll“的完整解决方案:从原因分析到彻底修复
当你启动某个软件或游戏时,突然遭遇"无法启动程序,因为计算机中丢失mfc140u.dll"的错误提示,这确实令人沮丧。mfc140u.dll是Microsoft Foundation Classes(MFC)库的重要组成部分,属于Visual C Re…...
windows安卓子系统wsa隐藏应用列表的安装激活使用
Windows 11 安卓子系统应用部署全攻略 windows安卓子系统wsa隐藏应用列表的安装激活使用|过检测核心前端 在 Windows 11 系统中,安卓子系统为用户带来了在电脑上运行安卓应用的便利。经过一系列的操作,我们已经完成了 Windows 11 安卓子系统的底层和前端…...
深入探索 PyTorch:回归与分类模型的全方位解析
深入探索 PyTorch:回归与分类模型的全方位解析 在当今数据驱动的时代,机器学习与深度学习技术正广泛应用于各个领域,助力我们从海量数据中挖掘有价值的信息。而 PyTorch 作为一款备受青睐的深度学习框架,为开发者们提供了简洁且高…...
案例分析:东华新径,拉动式生产的智造之路
目录 文章目录 目录南京东华智能转向系统有限公司是一家什么公司?背景知识:新能源汽车生产制造流程简介东华遇见了什么问题?东华希望如何解决?解决思路:从 “推动式生产” 到 “拉动式生产”,从 “冗余式思…...
【android bluetooth 框架分析 01】【关键线程 5】【bt_main_thread介绍】
1. 概述 system/stack/btu/btu_task.cc bt_main_thread 是 Android Bluetooth 协议栈中的核心线程,负责处理蓝牙协议栈中的大部分关键任务和事件。它相当于蓝牙协议栈的"大脑",协调各种蓝牙功能的运行。 2. 重要性 bt_main_thread 的重要性…...
城市应急安防系统EasyCVR视频融合平台:如何实现多源视频资源高效汇聚与应急指挥协同
一、方案背景 1)项目背景 在当今数字化时代,随着信息技术的飞速发展,视频监控和应急指挥系统在公共安全、城市应急等领域的重要性日益凸显。尤其是在关键场所,高效的视频资源整合与传输能力对于应对突发公共事件、实现快速精准的…...
自动化测试常用函数
自动化测试常用函数 前言1. 元素的定位1.1 cssSelector1.2 xpath1.2.1 获取 HTML 页面所有的节点1.2.2 获取 HTML 页面指定的节点1.2.3 获取一个节点中的直接子节点1.2.4 获取一个节点的父节点1.2.5 实现节点属性的匹配1.2.6 使用指定索引的方式获取对应的节点内容 2. 操作测试…...
OpengGL教程(七)---摄像机
本章参考官方教程:摄像机 本系列历史文 OpengGL教程(一)—OpenGL环境的配置(GLFW3,GLAD) OpengGL教程(二)—渲染一个简单的窗体 OpengGL教程(三)—使用VAO和VBO方式绘制三角形 OpengGL教程(四)—使用EBO方式绘制矩形 OpengGL教程(五)—纹理的应用 OpengGL教程(六)—…...
springboot禁用静态资源
使用 application.properties 在 application.properties 中添加如下配置: spring.web.resources.add-mappingsfalse使用 application.yml 在 application.yml 中添加如下配置: spring:web:resources:add-mappings: false配置解释 spring.web.resou…...
猫咪如厕检测与分类识别系统系列【二】多图上传及猫咪分类特征提取更新
前情提要 家里养了三只猫咪,其中一只布偶猫经常出入厕所。但因为平时忙于学业,没法时刻关注牠的行为。我知道猫咪的如厕频率和时长与健康状况密切相关,频繁如厕可能是泌尿问题,停留过久也可能是便秘或不适。为了更科学地了解牠的…...
ViewModel和AndroidViewModel的主要区别
ViewModel和AndroidViewModel的主要区别在于它们的继承关系、构造函数以及使用场景。 继承关系与构造函数: ViewModel:ViewModel是一个抽象类,位于androidx.lifecycle包中。它是所有ViewModel类的基类,构造函数较为…...