【课程全解】-UML软件建模设计

软件建模

目的:uml9种图描述出你要实现的软件系统功能、架构、关联关系

UML9种图

  1. 用例图(静态图 - 角色拥有的功能)
  2. 类图(静态图 - 面向对象类功能设计(JAVA-继承、封装、多态))
  3. 时序图(动态图 - 时间推移消息发送)
  4. 对象图(静态图 - 对象与对象之间的关系(对象是类的实例个体))
  5. 组件图(静态图 - 软件模块或者物理结构之间的联系)
  6. 部署图(静态图 - 物理硬件部署关系(网络拓扑))
  7. 活动图(动态图 - 事件发生过程)
  8. 状态图(动态图 - 对象状态切换过程)
  9. 协作图(动态图 - 时间推移消息发送)

4.状态图(State Diagram)- 动态图

作用:描述对象所有的可能状态,和他们之间状态切换的联系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BMazEgJU-1678712787632)(../笔记图片/image-20230313190916677.png)]

5. 活动图 (Actitivity Diagram) - 动态图

作用:按照用例图的方式描述用例之间的关系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Wm1JhyP-1678712787633)(../笔记图片/image-20230313191252867.png)]

6. 时序图(Sequence Diagram) - 动态图

作用:参与者(角色)与系统对象之间有序交互的过程描述,强调消息如何在对象之间发送和接受过程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I9oWa2BV-1678712787633)(../笔记图片/image-20230313191544344.png)]

7. 协作图(Communication Diagram) - 动态图

作用: 与时序图相似,用于描述对象间动态协作关系,类图和时序图的集合,重点描述对象和对象之间的通信过程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vV9ydLWU-1678712787633)(../笔记图片/image-20230313191813233.png)]

8. 组件图(Component Diagram) - 静态模型

构件图

作用: 描述代码结构的图,描述各个代码构件之间的联系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RA9XO1KN-1678712787634)(../笔记图片/image-20230313192154655.png)]

9.部署图(Deployment Diagram) - 静态模型

作用:描述系统的物理部署过程,比如计算机设备以及他们是如何进行连接的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qa5SJ0Nm-1678712787634)(../笔记图片/image-20230313192410953.png)]

软件开发流程

软件工程导论概述-软件开发流程

1. 软件过程

为了获取高质量软件所需要完成的一系列任务框架,它规定的是如何更好的完成各项工作的步骤

1. 瀑布模型(线性模型)- 主流

特点:

​ 阶段间具有顺序性和依赖性

优点:

​ 可以强迫开发人员使用规范化的方法进行实现;严格规定每个阶段需要产出的文档

需求分析—》概要设计—》详细设计—》编码阶段—》测试阶段

1.需求分析:(产出结果:需求分析说明书)

​ 理解客户需求,能够拆除具体要实现的功能和内容有些什么

2.概要设计:(产出结果:技术设计方案、概要设计实现方案—用什么技术完成什么功能)

​ 结合已有的技术去分析业务的需求应该怎么实现

  1. 详细设计:(产出结果:用户操作界面设计图(UI)、UML工程文档、数据库设计sql代码)

    ​ 原型设计图(用户操作界面)、用户操作的流程(UML设计-时序图)、面向对象设计(UML-类图、对象图、协作图)、数据库设计(PowerDesigner)

  2. 编码阶段:(代码、打包的软件)

    分工、分模块、定计划

  3. 测试(入网安全证明、测试用例输出文档)

    黑盒测试、白盒测试 (压力、网络安全…)

2. 快速原型模型

以原型界面驱动软件开发

适用一些功能简单、开发量小的软件系统就可以适用

3. 增量模型 - 企业开发主流

每个项目都是一个增量,不需要从新设计推翻之前的流程

4. 螺旋设计、喷泉模型(XXXXX)

UML设计使用的工具

MS visio

在这里插入图片描述

在线工具(免费)

​ https://boardmix.cn/

https://app.diagrams.net

1.用例图

作用:

​ 表示一个系统中用例与参与者关系之间的图

​ 它描述了系统中相关的用户和系统对不同用户提供的功能和服务

1.元素

1.角色(参与者)

​ 是与系统主题交互的外部实体单元,描述一个或一组与系统产生外部交互的用户或事物

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kJRShNlH-1678712787635)(../笔记图片/image-20230313202307558.png)]

2.用例:(功能、模块)

​ 描述的被角色或者事物能够访问的功能内容(一些列操作的集合)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UalZ58zR-1678712787636)(../笔记图片/image-20230313202423054.png)]

2. 联系方法

1.角色与角色之间的泛化关系:

​ 泛化代表的是抽象的概念,指向的方法:具象的事物指向—>泛化抽象的事物,更具系统的设计进行泛化

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q1cyDTCA-1678712787636)(../笔记图片/image-20230313202707766.png)]

依赖关系—包含

​ 是用例间设计时应该含有的功能使用incloude描述,指向方法A功能包含— << incloude >> --> B功能

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-75oE97Me-1678712787636)(../笔记图片/image-20230313203529632.png)]

依赖关系—拓展

​ 是对用例的扩张对功能行为的增强,除必要功能之外添加的功能就要使用扩张

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZTN2I2H1-1678712787637)(../笔记图片/image-20230313204201636.png)]

用例泛化

​ 和角色相似,将具象化的用例和抽象的用例连接,有继承的概念实现,具象化的用例是在父类用例的基础上做修改

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vNQ2ZlUs-1678712787637)(../笔记图片/image-20230313204427540.png)]

3.案例

描述一个企业管理系统功能,

​ 所有的员工都有打卡、查看计划功能,

​ 但是经理拥有管理员工信息、定制计划功能;

​ 老板拥有所有员工和经理的功能

提升题目:

​ 基于上一个题目,员工对于计划功能只有查看计划的权限,

​ 但是经理有计划新增、修改、删除功能;

​ 老板提出要求说计划可以从别的系统导入

按照该需求设计
在这里插入图片描述

4.用例图描述

当我们绘制完成一个用例图后,需要进行用例描述,让阅读用例的开发者更清楚事件过程描述

用例图需要描述的内容:
1.用例名称:描述用例图的寓意或者实现的目标,一般为动词或宾语短语
2.用例编号:实现多个用例图的快速索引查找
3.参与者:参与的角色有哪些
4.用例描述:简单一句话概括什么人在什么系统能做什么事情
5.触发器:触发用例的时机节点描述
6.前置条件:用例执行前的系统状态过程描述
7.基本事件流:将常规的用例活动以时间过程的方式描述清楚
8.扩展事件流:一般描述基本事件流中错误或业务异常的流程
9.结论:在什么时候用例结束
10.数据需求:用例过程中会有些什么数据交互
11.业务约束:描述业务中的约束条件

在案例中的用例描述

关键词描述值
用例名称企业员工操作管理系统
用例编号CXK001
参与者员工、经理、老板
用例描述描述三个参与者对于系统功能权限的描述
触发器参与者登录后使用管理系统
前置条件参与者需要登陆系统
基本事件流1.员工登录系统可以进行打卡,同时可以查看现在指定的计划内容
2.经理登录系统对员工的信息、计划可以进行管理分发
3.老板可以查看员工的所有信息且进行管理,能够对所有人的计划进行定制或查看
扩展事件流1.员工登录系统,权限不足无法对对应的业务功能进行操作,返回到登录页面
结论员工登录系统后对计划或者打卡功能操作以及管理员工信息操作结束,用例完结
数据需求1.员工信息 2.打卡记录 3.计划信息
业务约束不同的角色所操作的功能内容不同

2.时序图(序列图)

1.什么是时序图

时序图(Sequence Diagram)又名序列图
它描述的是对象与对象之间发送信息的时间顺序显示多个对象之间的动态协作关系

2.元素

5种元素内容:

  1. 角色(参与者-Actor)
  2. 对象(Object)
  3. 生命线(LifeLine)
  4. 控制焦点(Activation)
  5. 消息(Message)
1.角色

角色:用小人图标表示,可以描述人或系统等事务,一般作为时序图触发的起点

在这里插入图片描述

2.对象

对象图在时序图的上方顶部,以一个矩形框的方法描述

在这里插入图片描述
对象描述的内容在UML设计中有三种:

1.对象和类名

写法: 对象名:类名
能够通过描述具体对象间调用关系体现除类与类之间的关联,后续可以关联类图

在这里插入图片描述

2.类名

写法: 类名
只突出类与类之间调用过程关系,描述了一类事物之间包含的调用协调过程

在这里插入图片描述

3.对象名

写法: 对象名
突出具体对象之间的调用协调关系

在这里插入图片描述

3. 生命线

每个对象矩形框下方都会有一条虚线,虚线描述的就是该对象的时间生命线,线从上至下描述的是时间的从过去到未。

在这里插入图片描述

4.控制焦点

每个对象交互时在时间线上发生的事情或某段时间执行的操作,用长条矩形描述

在这里插入图片描述

5.消息

对象之间发送的信息

消息有三种类型:

1.同步消息

画法:实线+实心箭头
发送对象发送消息给接受者,接收者必须给发送者一个响应(回复),否则发送者将一直等待
注意:同步过程将会出现对象必须要等待另一个对象返回结果才能继续操作

在这里插入图片描述

2. 异步消息

画法:实现+大于符号箭头
消息的发送者将消息发送之后,然后继续执行自己的活动

在这里插入图片描述

3.返回消息

画法:虚线+小于符号箭头
返回消息表示从过程调用返回

在这里插入图片描述

4.自关联消息

画法:分同步异步的方式来画,消息发送和接受都是自己
当调用过程中出现消息是发送给自己对象的功能完成的话就可以使用自关联描述

在这里插入图片描述

3.组合片段

组合片段用来解决交互执行的条件和方式,允许在序列图中直接表示逻辑组件,用于通过指定条件或子进程的应用区域,为任何生命线的任何部分定义特殊条件和子进程。
组合片段有13种:

类型名称描述
(必学)Opt选项包含一个可能发生或不可能发生的序列
(必学)Alt抉择包含一个片段列表,这些列表包含备选信息序列,在任何场景下只能发生其中的一个序列 ,第一个片段Alt和else片段配合,临界点需要描述一个表达式,当表达式的结果发生变化时选择对应的序列进行操作
(必学)Loop循环片段重复一定次数,可以在临界点描述重复的条件,Loop片段要有Min和Max属性,如果不描述这两个属性就是无限循环
(必学)Par并行并行处理,多个事件片段可以交错执行

抉择
在这里插入图片描述
并行
在这里插入图片描述

3. 类图(面向对象设计)

作用:表示各个类之间的静态关系视图,类图是一种编程模型图

类的组成

类名、属性(字段)和行为(方法)

类图中的修饰符

四种访问修饰符

public (公共的) 所有人都可见: 类图中用“+”
private (私有的)只有自己可见: 在类图中用“-”
protected(受保护的)自己以及子类:在类图中用“#”
default(默认的)不使用访问修饰符:在类图中用“~”或者不写

属性字段类型

文字类型:
(1)String:字符串
(2)char:字符
数值类型:
(1)int:整数类型
(2)double:浮点类型(小数类型)
其他:
(1)日期:Date
(2)布尔值:boolean
(3)对象类型:Object
(4)数组集合:Array

在这里插入图片描述

方法描述

有参方法

如:吃东西的描述:给某个人食物就能吃这个行为可以使用
+eat(food)

无参方法

如:跑步是不需要外部条件就可以完成的行为
+run()

有返回值方法

如:计算两个数之和会得到一个结果,结果就是通过计算过程返回的数据

  • sum(num1:int,num2:int) : int
    修饰符 方法名(参数列表):返回值类型
无返回值方法

无返回值方法,描述的行为注重的过程并没有结果
如:描述走路这个行为
+run():void
修饰符 方法名(参数列表):void

类之间的关系

有6中关系:

  1. 关联:实线
  2. 聚合:菱形空心实线箭头
  3. 组合:菱形实心实线箭头
  4. 继承:三角空心实线箭头
  5. 实现:三角空心虚线箭头
  6. 依赖:虚线小箭头

在这里插入图片描述

1.关联关系(Association)

单向关联:如只有A关联B,B不关联A
双向关联:AB两者相互关联

双向关联案例:司机可以租车和车子等待被人租赁,两个类是双向关联的,实线上两侧写上1.
在这里插入图片描述
单向关联案例:企鹅会受到气候的影响改变生活的方式,但是气候不会因为有企鹅而发生改变,这就是单向关联

在这里插入图片描述

2.依赖(Dependency)

描述:如果一个类的改动会影响到另一个类,则两个类之间存在依赖关系,一般而言,依赖关系是单向的,如果依赖是双向的考虑使用关联关系描述

案例:车子依赖汽油,而汽油不依赖与车子出现
在这里插入图片描述

3.聚合(aggregate)

描述的是:多变群
描述是整体与部分的关系,当某个实体聚合为另一个实体时,该实体还可以是另一个实体的一部分。
空心菱形+实线箭头
在这里插入图片描述

4.组合(Combination)

描述的是:多组一
也是描述整体与部分的关系,组合要比聚合更加严格,当某个实体组合成另一个实体时,二者具有相同的生命周期

在这里插入图片描述

5.继承泛化(Generalization)

描述的是一个抽象的东西被不断具象化的描述过程,与继承是同一个概念
在这里插入图片描述

6.接口实现(Realization)

什么是接口:
只描述特有的行为,让类来实现
在这里插入图片描述
类会去实现公共的接口方法行为,在每个类中出现不同的行为效果
在这里插入图片描述

4.状态图

概述:
状态图(State diagram)
用来描述特定对象在其生命周期中国的各种状态以及状态之间切换的转换过程。
注意:在状态图描述时一定要清晰你描述的状态特指的对象是谁
在这里插入图片描述

作用:
1.清晰的描述状态之间切换的关系以及顺序
2.理解清楚业务调用过程逻辑,知道顺序与状态切换的因果关系
3.清楚理解状态切换时必要的行为内容

1. 常用元素

1.1 初始状态(圆形或空心圆)

在这里插入图片描述
是必须要拥有的,因为所有的业务都有触发点,且只有一个

1.2 终结状态(实心圆加一个空心外环)

在这里插入图片描述
是非必要拥有的,但是可一个状态图可能会有多个终结状态
比如:订单可能有销毁也可能完成支付
在这里插入图片描述

1.3 状态框

指在对象的生命周期中某个条件或者状况,状态是对象执行了一系列活动的结果
在这里插入图片描述

1.4 状态转移(实心三角箭头描述)

从一个状态到另一个状态之间的连线,转移上要表示出转移的事件表达式(行为过程描述)
在这里插入图片描述

2. 状态图有无终止符分类

1. 无终止状态

在这里插入图片描述

2.有终止状态

在这里插入图片描述
状态图案例:张三在ATM机取钱的过程(观察视角:ATM机)
在这里插入图片描述

5. 活动图

简介
活动图(Activity Diagram)对系统的动态行为建模的另一种图形,描述的是活动行为的顺序,展现从一个活动到另一个活动的控制流程,活动图本身就是一种流程图。

b

在这里插入图片描述

1.常用元素

1.1 动作状态

动作状态一般在活动图中是不可再拆分的原子操作,且是不可中断的动作行为,动作行为之后会转换为另一种行为
画法:
圆角矩形描述动作状态
在这里插入图片描述
特点:

  • 1.动作状态是原子性的
  • 2.动作状态所处的时间很短
  • 3.要有入状态和出状态
  • 4.不能有入动作和出动作,只要箭头指向就可以
1.2 初始节点

空心圆,标记业务的起点,有且只有一个初始状态。
在这里插入图片描述

1.3 终结节点

空心圆环,表达的业务流程的终止,可以有一个或多个
在这里插入图片描述

1.4 判断、合并

(1) 判断流程
根据判断进行决策,根据决策执行不同的流程。
在这里插入图片描述
(2)流程合并
两条或多条流程指向节点,节点又指向终结节点或其他行为节点。
在这里插入图片描述

1.5 分叉、结合

(1)分叉
表示一个流程分成多个并行子支流完成事务
在这里插入图片描述
(2)结合
将多个执行流汇总到一个行为结果上,只有当所有的分支流程完成执行才能完成结合,从而继续往下执行
在这里插入图片描述

1.6 转换

当一个活动结束时,控制流会马上传递给下一个活动节点,用一条直线带箭头描述
在这里插入图片描述

1.7 泳道

用于隔离不同对象或角色间行为操作的内容,可以直观地看出每个角色在此活动中做了什么操作,注意,泳道不能重复描述

(1)垂直泳道

2泳道:用户、系统
用户登录系统填写成绩退出系统
在这里插入图片描述

(2)水平泳道

活动在操作过程中会出现角色变换,一般水平泳道配合垂直泳道实现。
也可以区分活动的阶段
在这里插入图片描述
在这里插入图片描述

6. 组件图

组件图(Component Diagram)又称为构件图,描述的是软件系统中遵从实现一组接口的物理的、可替换的软件模块。
构建图 = 构建(Component) + 接口 (interface) + 关系(Relationship)+ 连接器(Connector)

在这里插入图片描述

1. 常用元素

1. 构件(Component)

系统设计中的一部分模块,隐藏了模块实现的内容,对外提供了一组接口,组件具有可替换性,也就代表着组件之间是非耦合的

在这里插入图片描述

组件类型
  • 源代码组件:一个或多个源代码文件或包组成的组件
  • 二进制组件:一个目标码文件或者静态库文件
  • 可执行组件:在机器上可以运行的程序单元

构件画法区分

在这里插入图片描述
UML2.X,画法,现在大部分构件图中出现的构件元素画法,省去构件中提供给外部或者外部发送给给构件的接口块。

2. 接口(interface)

接口类型:

  • 提供接口:组件提供出去给其他组件方便调用的接口
  • 需求接口:需要使用外部组件的内容或数据

在这里插入图片描述

提供接口

在这里插入图片描述

需求接口

在这里插入图片描述

组件链接

在这里插入图片描述

3. 端口(port)

端口,表明组件对外部提供交互的节点,因为组件可以提供一种或多种服务,为了提供可见性描述,需要用端口的方式描述不同的功能。
在这里插入图片描述
画法:
对外暴露的端口使用正方形连接接口。

端口连接画法:

在这里插入图片描述
需要暴露端口的画法一般出现在组件对外提供多个服务接口时,或者组件需要通过外部组件获取多种服务时,才需要这么画。

一对多组件链接的画法

在这里插入图片描述

组件的依赖关系
(1)组件和组件之间的依赖关系

虚线箭头指向的方式,需求方指向服务提供方
在这里插入图片描述

(2)组件和接口之间的依赖关系

类似于描述,组件接口和需求接口的行为
在这里插入图片描述
如上图所示效果,可以使用依赖关系描述
在这里插入图片描述

在这里插入图片描述

组件包(组件块)

组件之间存在包含关系时,可以使用如下描述。
在这里插入图片描述

组件块暴露服务端口的方法

在这里插入图片描述

组件块中子组件之间可以正常链接

在这里插入图片描述

7. 部署图

在这里插入图片描述

1.概述

部署图描述了一个系统运行时硬件节点,节点中软件、硬件之间交互连接关系图。
部署图包括两种元素:

  • 1.节点:比如硬件物理主机、路由器等等
  • 2.连接:网络、请求、线路

2. 作用

部署图主要的目的是在物理的层次上做整体的系统规划

    1. 描述硬件拓扑关系
  • 2.描述部署的软件中硬件之间的关联
  • 3.描述硬件交互关系

3. 常见元素

1. 节点

节点类型有两种:处理节点(处理器)、服务节点(设备)
在这里插入图片描述
处理器

指本身具有计算能力并且能够执行各个软件的节点,比如服务器。处理器是具有数据、业务的处理能力。

设备

指本身没有处理功能的节点,比如:打印机

2. 关联关系

在这里插入图片描述

表示两个节点之间的硬件连接,一般描述的就是网络、线路、光缆等之间的连接
画法: 实现连接即可

4.案例介绍

描述多门店的销售主机与服务器各个服务组件之间的连接关系
在这里插入图片描述
分布式微服务部署模式

分布式微服务:会将分布式运行中的各个模块以独立运行的服务模块、IP、端口规定,各个服务模块之间相互调用达到分布式场景下微服务间协同运行的效果。

SpringCloud

  1. SpringCloud 奈飞(收费)
  2. SpringCloud Alibaba(阿里巴巴团队)
  3. dobue
  4. SpringCloud serverMS

8. 协作图

协作图:合作图,是动态图。强调的发送和接收消息之间对象的组织结构,一个协作图显示了一系列的对象和在这些对象之间的联系

在这里插入图片描述
从上图分析可看出:
协作图和时序图的描述方法类似(对象+时间+消息)
消息用数字标记描述消息发送的顺序

8.1 特点

协作图没有生命线的概念,只是描述各个对象间消息的关系
协作图突出的组织结构
协作图描述的是对象之间的连接和消息发送关系
协作图描述的消息发送的关系

8.2 常用元素
(1)对象

为了完成特定功能出现的行为集合或者参与者,比如:电商平台、人、蔡徐坤
在这里插入图片描述

(2)链路

表示对象与对象之间的独立连接,表示一个或多个相连的线或弧
在这里插入图片描述
弧线代表自调用
在这里插入图片描述

(3)消息

描述系统的行为方法,是从一个对象向另一个对象发送消息,可能是一种方法也可能是操作的指令;消息由发送者、接受者、活动内容组成
在这里插入图片描述

案例讲解

描述管理员结账的过程
1.登录系统
2. 返回-登录成功后
3.查看结账的信息
4. 结账的信息需要从数据库核对
5. 数据库核对确定信息后
6.管理员结账
7.系统记录结账内容
8.结账完成

(1)时序图画法

在这里插入图片描述

(2)协作图画法

在这里插入图片描述

协作图画图步骤
  1. 确定交互过程中要参与的对象
  2. 确定对象和对象之间的链路关系
  3. 每个消息发送时候要根据链路关系绘制,且注意消息发送方向
  • 11
    点赞
  • 120
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
课程注册管理系统可以使用UML软件建模工具 Rational Rose 进行建模UML建模是一种可以帮助开发者理解和设计软件系统的工具。下面是课程注册管理系统的UML建模全过程。 1. 需求分析:在这一阶段,我们与用户一起讨论系统需求和期望功能。我们将会和用户进行交流,了解他们的需求,收集并整理需求信息。 2. 创建用例图:用例图是UML的一种建模工具,用于描述系统的功能和用户之间的交互。我们可以使用Rational Rose来创建用例图来描绘系统的功能点和用户角色。 3. 创建类图:类图用于描述系统中的类和类之间的关系。在这一阶段,我们可以使用Rational Rose来创建类图,并将各个类、属性和方法独立的表示出来。并建立类之间的关联关系。 4. 创建顺序图:顺序图描述了系统中对象之间的交互情况。我们可以通过Rational Rose来绘制顺序图,明确系统中各个对象的交互细节和顺序。 5. 创建状态图:状态图用于描述系统中对象的状态变化。在课程注册管理系统中,我们可以使用Rational Rose来创建状态图,显示注册和取消课程的状态变化。 6. 创建活动图:活动图用于描述系统中各个活动和操作的流程。我们可以使用Rational Rose来创建活动图,表示用户注册和取消课程的具体流程。 7. 创建部署图:部署图用于描述系统中的硬件和软件组件的部署情况。在课程注册管理系统中,我们可以使用Rational Rose来创建部署图,显示服务器、客户端以及数据库的部署位置和连接关系。 8. 创建包图:包图用于组织和管理系统中的各个类和对象。我们可以使用Rational Rose来创建包图,将各个类和对象进行分组和管理。 通过以上UML建模过程,我们可以清晰地了解课程注册管理系统的需求、功能和系统架构。同时,使用Rational Rose进行建模还可以方便系统的开发者进行代码的编写和维护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神秘的高先生

编写不易,感谢大佬的赏赐

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值