UML与设计模式
1、关联关系
关联关系用于描述不同类的对象之间的结构关系,它在一段时间内将多个类的实例连接在一起。关联关系是一种静态关系,通常与运行状态无关,而是由“常识”、“规则”、“法律”等因素决定的,因此关联关系是一种强关联的关系。关联关系用来定义对象之间的静态、天然的结构。在最终的代码里面,关联对象通常是以实例变量(成员变量)的形式实现的。与下述的依赖关系相比,关联的两个对象通常不会直接使用,尽管它们相互指导对方的的存在,但一般都是由外部对象来访问的。
2、依赖关系
依赖关系是一条带箭头的虚线表示的,它描述一个对象在运行期间会使用到另一个对象的关系。与关联关系不同的是,依赖关系是一种临时性关系,通常都是在运行期产生,并且随着场景的不同,依赖关系也可能发生变化。依赖关系表达的是对象之间临时性的、动态的关系。一般而言,依赖关系在最终的代码里面体现为类构造方法、类方法等的传入参数。与关联关系相比,依赖关系除了临时知道对方外,还会使用对方的属性或者方法。从这个角度讲,被依赖的对象改变会导致依赖对象的修改。
3、实现关系
实现所代表的含义是,基本用例描述了一个业务目标,但是该业务目标有多种可能的实现途径,每一种实现途径可以用用例实现(或称用例实例)来表示,而用例实现与基本用例之间就构成了实现关系。换言之,每个实现途径都实现了基本用例的业务目标。
4、泛化关系
泛化关系是用一条带空心箭头的直线表示的。泛化关系可用于建模过程中的任意一个阶段,说明两个对象之间的继承关系。泛化关系表示一个类对另一个类的继承。继承而得的类称为后代。被继承的类称为祖先。继承意味着祖先的定义(包括任何特征,如属性、关系或对其对象执行的操作)对于后代的对象也是有效的。泛化关系是从后代类到其祖先类的关系。
5、聚合关系
聚合关系是用一条带空心菱形箭头的直线表示的,聚合关系用于类图,特别用于表示实体对象之间的关系,表达整体由部分构成的语义,与组合关系不同的是,整体和部分不是强依赖的,即使整体不存在了,部分仍然存在。
6、组合关系
组合关系是用一条带实心菱形箭头的直线表示的,组合关系用于类图,特别用于表示实体对象关系,表达整体拥有部分的语义,组合关系是一种强依赖的特殊聚合关系,如果整体不存在了,则部分也将消亡。
节点是带有至少一个处理器、内存以及可能还带有其他设备的处理元素。在实际工作中,一般说来服务器、工作站或客户机都可以称为一个节点。节点是应用程序的部署单元。节点元素特别用于部署视图,描述应用程序在物理结构上是如何部署在应用环境中的,是一种包括软、硬件环境在内的拓扑结构描述。
实际上,由于人脑对信息的处理能力是有限度的,如果信息量超过了人脑的处理能力,人就会失去对这个事物的理解能力。因此,越是具体的表达信息量越大,越接近人脑的处理极限,人们的理解能力越是下降(这也是面向过程方法为什么困难的原因之一)。对面向对象方法来说,这时就需要提高抽象层次,用一个新的概念来概括一部分相关的信息,一旦人们像接受了光年概念一样消化了这个新的概念,理解起来就变得容易了。同时,这个新的概念就屏蔽了(或者说封装了)更多具体的信息。抽象层次越高,被屏蔽的信息也就越多,信息量越少,也就越容易理解和处理。这就是面向对象比面向过程具有优势的原因。
抽象有两种方法,一种是自顶向下,另一种是自底向上。自顶向下的方法适用于让人们从头开始认识一个事物,自底向上的方法适用于在实践中改进和提高认识。在软件开发过程中,主体上应当采用自顶向下的方法,用少量的概念覆盖系统需
求,再逐步降低抽象层次,直到代码编写。同时应当辅以自底向上的方法,通过总结在较低抽象层次的实践经验来改进较高层次的概念以提升软件质量。
7、对象分析方法
7.1 一切皆是对象
在面向对象的眼里,一切有名字的东西都是对象,都应当使用对象的观点来看待它、分析它。哪怕这个东西的名字叫某某业务流程,它也仍然应当看作是一个对象,而不是一个过程。这意味着,无论什么时候都应当采用接下来讲述的一些观点和方法来看待和分析事物。
7.2对象都是独立的
独立性是面向对象的一大特点,承认对象的同时就接纳了这一观点。对象与对象 之间是天然独立的,只是在某个特定的场景下,它们的某一个特定的实例才相互联系 在一起。我们获取和分析对象的手段经常是通过分析某个场景,但是需要知道,对象是离散的,它不是因为该场景而存在的。场景中的对象只是对象“映射”到该场景中的一个侧面,我们称之为对象实例。换言之,通过一个场景,我们仅能得到对象的一个侧面的信息,如图2.4所示,如果以每一个场景为坐标(维度),那么对象实例就是对象在该坐标上的投影。

7.3、对象都具有原子性
无论在什么时候,在同一抽象层次上,在分析过程中都应当将对象视为一个不可分割的原子,哪怕这个对象的规模很大。例如在分析一个商业过程的时候,对象的规模(粒度)大到如银行、工厂、商场的程度,不论它有多么巨大,只要我们认为它是对象,它与其他对象交互时就是一个整体,不能分割。原子性是抽象层次有意义的重要保证,一旦破坏了原子性,则表示在同一抽象层次上的对象不具备同样的粒度,这使得分析工作陷入混乱。我们应当将分析过程中得到的所有对于对象的认识附加在对象边界上,在实现这个对象之前不理会其内部的细节。这称之为面向接口编程。
7.4、对象都是可抽象的
对象有着很多个不同的方面。一般来说,对象参与一个场景时会展现出某一个方面。总可以将对象的某一个方面抽象出来,让其作为对象的一个代表来参与场景交互。通常这种抽象会以接口来命名。在分析过程中,得到的任何一个对象都有特定的方面可作为抽象。因为对象总是从场景分析中得到的,它在场景中肯定展现了一个方面。对象所具有的方面,或者说对象所参与的场景越多,对象越有抽象价值,反之则越没有抽象价值。因此在分析过程中,应当关注于那些参与了很多场景的对象,它们往往是分析设计中的重点以及成败关键。
7.5、对象都有层次性
对象是有着抽象层次的。层次越高,其描述越粗略但适应能力越广;层次越低则描述越精确但适应能力越下降。在分析过程中,应当根据问题领域的复杂程度设定多个抽象层次,在每个层次上使用适合的抽象程度的对象描述。这将有助于显著地减少分析的难度和工作量。不论是在需求、分析还是设计过程中,都应当具备抽象层次的观点。从需求到设计的过程已经是几个不同的抽象层次。
以上内容摘自《大象 Thinking in UML》
相关文章:
UML与设计模式
1、关联关系 关联关系用于描述不同类的对象之间的结构关系,它在一段时间内将多个类的实例连接在一起。关联关系是一种静态关系,通常与运行状态无关,而是由“常识”、“规则”、“法律”等因素决定的,因此关联关系是一种强关联的关…...
如何在Spring Boot中实现图片上传至本地和阿里云OSS
在开发Web应用时,处理文件上传是常见的需求之一,尤其是在涉及到图片、视频等多媒体数据时。本文将详细介绍如何使用Spring Boot实现图片上传至本地服务器以及阿里云OSS存储服务,并提供完整的代码示例。 一、上传图片至本地 首先,…...
几个小创新模型,KAN组合网络(LSTM、GRU、Transformer)时间序列预测,python预测全家桶...
截止到本期,一共发了8篇关于机器学习预测全家桶Python代码的文章。参考往期文章如下: 1.终于来了!python机器学习预测全家桶 2.机器学习预测全家桶-Python,一次性搞定多/单特征输入,多/单步预测!最强模板&a…...
ubuntu18.04 配置 mid360并测试fast_lio
1.在买到Mid360之后,我们可以看到mid360延伸出来了三组线。 第一组线是电源线,包含了红色线正极,和黑色线负极。一般可以用来接9-27v的电源,推荐接12v的电源转换器,或者接14.4v的电源转换器。 第二组线是信号线&#x…...
基于Java的诊所医院管理系统,springboot+html,MySQL数据库,用户+医生+管理员三种身份,完美运行,有一万一千字论文
演示视频 基本介绍 基于Java的诊所医院管理系统,springboothtml,MySQL数据库,用户医生管理员三种身份,完美运行,有一万一千字论文。 用户:个人信息管理、预约医生、查看病例、查看公告、充值、支付费用...…...
gvm 在ubuntu下安装
GVM (Go Version Manager) 是一个用于管理多个Go语言版本的工具。以下是使用GVM安装和切换Go版本的基本步骤和示例代码: 一键安装(如果网络没问题情况) bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master…...
ChatTTS开源项目推荐
开源热门项目推荐:ChatTTS 标题:对话式人工智能的未来——ChatTTS 随着开源程序的发展,越来越多的程序员开始关注并加入开源大模型的行列。对于开源行业和开源项目不同人有不同的关注点,但无论你是新手还是资深开发者,…...
java课设
项目简介:射击生存类小游戏 项目采用技术: 游戏引擎: Unity编程语言: Java图形处理: NVIDIA PhysX (物理引擎), HDRP (High Definition Render Pipeline)音效与音乐: FMOD, Wwise版本控制: Git 功能需求分析: 角色控制:玩家能够使用键盘和鼠标控制角色移动、瞄准…...
【持久层】PostgreSQL使用教程
详细教程点击PostgreSQL 12.2 手册,观看官网中文手册。 PostgreSQL 是一个功能强大且开源的对象关系数据库系统,以其高扩展性和符合标准的优势广受欢迎。随着大数据时代的到来,PostgreSQL 也在大数据处理方面展示了其强大能力。本文将介绍 P…...
OpenCV 4.10 发布
OpenCV 4.10 JPEG 解码速度提升 77%,实验性支持 Wayland、Win ARM64 根据 “OpenCV 中国团队” 介绍,从 4.10 开始 OpenCV 对 JPEG 图像的读取和解码有了 77% 的速度提升,超过了 scikit-image、imageio、pillow。 4.10 版本的一些亮点&…...
5、斐波那契数列、跳台阶
题目: 斐波那契数列 描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<39 <?phpfunction Fibonacci($n) {if($n<0){$f1 0;}else if($n1||$n2){$f1 1;}else{$f1 1; $f2 1;whi…...
WPS相同字体但是部分文字样式不一样解决办法
如下图,在使用wps编辑文档的时候发现有些电脑的文字字体很奇怪,但是把鼠标移到这个文字的位置,发现它和其他正常文字的字体是一样的,都是仿宋_GB2312 正常电脑的文字如下图所示 打开C:\Windows找到Fonts这个文件夹 把仿宋_GB2312这…...
Scala运算符及流程控制
Scala运算符及流程控制 文章目录 Scala运算符及流程控制写在前面运算符算数运算符关系运算符赋值运算符逻辑运算符位运算符运算符本质 流程控制分支控制单分支双分支多分支 循环控制for循环while循环循环中断嵌套循环 写在前面 操作系统:Windows10JDK版本ÿ…...
Github 2024-06-10开源项目周报 Top15
根据Github Trendings的统计,本周(2024-06-10统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目8Jupyter Notebook项目2Go项目2C++项目1Shell项目1Lua项目1JavaScript项目1MDX项目1C项目1HTML项目1Python - 100天从新手到大师 创建…...
9. 文本三剑客之awk
文章目录 9.1 什么是awk9.2 awk命令格式9.3 awk执行流程9.4 行与列9.4.1 取行9.4.2 取列 9.1 什么是awk 虽然sed编辑器是非常方便自动修改文本文件的工具,但其也有自身的限制。通常你需要一个用来处理文件中的数据的更高级工具,它能提供一个类编程环境来…...
在vscode中调试,命令行出现错误信息ModuleNotFoundError: No module named ‘imp‘
在vscode中调试,命令行出现错误信息ModuleNotFoundError: No module named ‘imp’ 报错原因 VSCode的python扩展会使用debugpy库实现调试功能。在涉及qt组件加载时,debugpy的qt_loaders.py会尝试加载imp库。而在python3.12及以后的版本中,…...
SAP实施方法论的变化
SAP 的实施方法论 ASAP,在SAP进入 S/4 HANA时,不知不觉改了意思。 原来叫Accelerate SAP,现在叫Activate SAP ,毕竟存量SAP太多,大部分用户并非象十多年前一样新实施SAP,而是在老的Sap R/3 ,MyS…...
phpstudy的安装dvwa
phpstudy安装dvwa 1. 下载phpstudy Windows版phpstudy下载 - 小皮面板(phpstudy) (xp.cn) 2. 搭建dvwa靶场 下载地址:https://github.com/ethicalhack3r/DVWA/archive/master.zip 将其放入www文件夹中 3. 修改配置文件 将\DVWA-master\config中config.inc.php…...
费曼的博士学位论文及下载
原始链接 PDF影印版下载 以前看《费曼物理学讲义》觉得最小作用原理部分讲得非常多、而且比较炫。现在知道原因了。 The principle of least action in quantum mechanics Richard Phillips Feynman(Princeton U. )May, 1942 74 pages Supervisor: John Archibald Wheeler…...
k8s学习--kubernetes服务自动伸缩之垂直伸缩(资源伸缩)VPA详细解释与安装
文章目录 前言VPA简介简单理解详细解释VPA的优缺点优点1.自动化资源管理2.资源优化3.性能和稳定性提升5.成本节约6.集成性和灵活性 缺点1.Pod 重启影响可用性2.与 HPA 冲突3.资源监控和推荐滞后:4.实现复杂度: 核心概念Resource Requests 和 Limits自动调…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
