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

可视化建模以及UML期末复习篇----UML图

这是一篇相对较长的文章,如你们所见,比较详细,全长两万字。我不建议你们一次性看完,直接跳目录找你需要的知识点即可。

--------欢迎各位来到我UML国!

一、UML图

总共有如下几种:

  1. 用例图(Use Case Diagram):描述系统功能和用户交互。
  2. 类图(Class Diagram):描述系统中的类、接口、它们的属性、方法和关系。
  3. 序列图(Sequence Diagram):描述对象间的消息交换顺序。
  4. 状态图(State Diagram):描述对象状态的变化。
  5. 活动图(Activity Diagram):描述业务流程或操作的步骤。
  6. 组件图(Component Diagram):描述系统的物理结构,展示组件和它们的依赖关系。
  7. 部署图(Deployment Diagram):描述系统的物理部署,展示硬件和软件组件的分布。
  8. 通信图(Communication Diagram):序列图的变体,强调对象间的关系。
  9. 定时图(Timing Diagram):描述对象间交互的时间约束。
  10. 交互概览图(Interaction Overview Diagram):组合不同类型的交互图。
  11. 对象图(Object Diagram):类图的实例,显示对象间的具体交互。
  12. 包图(Package Diagram):描述系统的逻辑视图,展示包和类的关系。


 接下来,小的给小主详细介绍一下宫里几位主子:

 <1>皇帝:用例图【Use Case】

1. 定义

  - 用例图是表示一个系统中用例与参与者关系之间的图,描述系统中相关用户和系统对不同用户提供的功能和服务。 

  - 用例就是参与者提出来的要求实现的功能。

2.构成元素

  【1】参与者(Actor)**:位于用例的外部,和软件系统有交互的人或者事物。图如下:

  【2】系统边界(System Scope)**:表示软件系统的边界,边界内部就是软件必须实现的,边界外部就不需要写代码来实现。图如下:


  【3】用例(Use Case)**:描述系统对外提供的功能,用椭圆表示。

​​​​​​​

 【4】关联(Association)**:表示参与者和用例之间的关系,用直线表示。

如何识别参与者?为系统提供输入的人或事物

举例:       

为系统提供输入的人                         网上商店:卖家  买家

为系统提供输入的物                         教务管理系统 学生宿舍管理系统

接收系统输出的人或事物                 校长接收全校成绩/挂科人数

需要接入的第三方系统或设备          电商系统  支付宝、微信、网络银行系统

时间是否会触发某些事件                 还书超过时间要付赔偿金

负责支持或维护系统中信息的人      图书管理员

 3.画出参与者、用例之间的关系

3.1   Generalization :泛化关系、继承关系

图形:带空心三角形的实线,指向父类

例如狗和动物,自行车和交通工具

参与者与参与者之间:

用例与用例之间:

  3.2   Include:包含关系

      两个用例之间的关系,表示一个用例的实现需要另一个用例的参与。

      图形:带箭头的虚线,指向被包含

      例如去餐厅吃饭需要付钱,网上购物需要填写收货地址

      网络商店:用户登录(A)   账号密码登录 (B)  微信登录 (B)

       A用例称之为基用例,两个B用例称之为包含用例;     

       没有B用例,A用例是不完整的;B用例是必不可少的

    

 3.3   Extend:扩展关系

   表示一个用例是另一个用例的可选部分,基本用例是一个完整的用例,即使没有扩展用例       也能完成功能。

   图形:带箭头的虚线,指向基用例

   打个比方,你去购买商品的时候需要申请折扣,在线预定酒店需要请求特殊需求,需要一      个母婴房或者是无烟房。就是不是每次都会发生的。

  购买商品又叫做基用例,申请折扣是拓展用例;

  在线预订酒店是基用例,请求特殊需求就是拓展用例

   图书馆管理系统:归还图书(A)     缴纳罚金(B)

   A用例是基用例,B用例称之为扩展用例

   A用例是B用例执行的前提;

   B用例是A用例执行过程中满足某些条件才执行的

3.4    Association:关联关系

表示两个类之间存在某种联系,是一种拥有的关系,它使一个类知道另一个类的属性和方法。

图形:
- **双向关联**:通常用一条不带箭头的实线表示,表示两个类之间相互关联。
- **单向关联**:用一条带箭头的实线表示,箭头指向被拥有的类。


一个“学生”(Student)类和一个“课程”(Course)类,一个学生可以注册多个课程,一个课程可以有多个学生注册。这种情况下,学生和课程之间的关联关系是双向的。


 

如果关联关系是单向的,比如一个“老师”(Teacher)类和一个“课程”(Course)类,一个老师可以教授多个课程,但一个课程通常只有一个主要负责人。这种情况下,老师和课程之间的关联关系是单向的,从“老师”指向“课程”。

Teacher --> Course

 4.用例规约

表达行业性功能的业务流程的方式:活动图、用例规约

用例图无法表达行业性功能的业务流程,只能用上面两种方式

用例名称

用户登录

参与者

读者、学生、老师

用例简述

图书馆的各种读者通过用户登录获取其在系统中的合法身份

前置条件

已经注册了读者身份

基本事件流

用户操作

  1. 用户要求进行用户登录

3、用户在登录界面上输入账号、密码数据,

并提交

系统反应

2、系统显示登录界面

4、系统验证账号是否存在,密码是否正确,系统记录

登录成功的用户的数据;系统显示主界面

分支事件流(n)

在基本事件流第4步发现账号不存在或者密码错误,进入分支事件流

回到基本事件流第3步

系统再一次显示登录界面,界面上显示上一次的错误原因

后置条件

系统记录用户信息,修改用户的状态

  • 用例规约中的文字禁止使用软件专业术语
  • 基本事件流只写正确执行的主要事件流,不正确的流程写在分支事件流
  • 事件流只写用户与系统之间的交互,系统内部不用描述的,将软件系统看成一个黑匣子

 5. 用例图的用途

-用例图通过参与者、用例以及它们之间的关系来描述系统的功能,便于开发人员开发。

用于描述系统功能和用户交互

复习题:

    

   <1>上图中的参与者有:

  1. 读者   2、借阅图书   3、用户登录  4、微信登录

   <2>上图中那两个构件事物之间存在包含关系:

  1. 学生和读者   2、归还图书和缴纳罚金  3、用户登录和账号密码登录

   <3>考点:包含关系和扩展关系有什么相同点和不同点?

复习题答案

<1>找火柴人:选1

<2>找include:选3

<3>

相同点:包含关系和扩展关系都是从现有的用例中抽取出公共的部分信息,作为一个单独的用例,然后通过不同的方法来重用这个公共的用例,以减少模型维护的工作量。

不同点:
1. **执行时机**:
   - **包含关系**:在基用例的基本流执行时,包含用例一定会执行。这意味着包含用例是基用例执行的必要部分。
   - **扩展关系**:扩展用例是对基用例的扩展,即使没有扩展用例的参与,基用例也可以完成一个完整的功能。扩展用例只有在基用例满足某种条件的时候才会执行,这使得扩展用例成为基用例的可选部分。

2. **图形表示**:
   - **包含关系**:在用例图中,包含关系使用带箭头的虚线表示,箭头从基用例指向包含用例,并在线上标注“<<include>>”。
   - **扩展关系**:在用例图中,扩展关系也使用带箭头的虚线表示,但箭头从扩展用例指向基用例,并在线上标注“<<extend>>”。


<2>皇后:类图【Class Diagram】

1. 定义

- 类图用于描述系统中的类、接口、属性、方法以及它们之间的关系。它是面向对象设计的核心,用于展示系统的静态结构。

2.构成元素

【1】类(Class)**:表示具有相同属性和操作的一组对象的蓝图。

类通常用矩形表示,分为三个部分:顶部是类名,中间是属性,底部是操作。

【2】接口(Interface)**:定义了一组操作规范,但不实现这些操作。

 【3】 属性(Attributes)**:类中定义的变量,用于存储数据。

 【4】 操作(Operations)**:类中定义的函数或方法,用于执行动作。

 【5】关系(Relationship)**:
- **关联(Association)**:表示两个类之间的结构性关系。
- **依赖(Dependency)**:表示一个类的变化可能影响另一个类。
- **泛化(Generalization)**:表示继承关系,子类继承父类的属性和操作。
- **实现(Realization)**:表示一个类实现了一个接口。
- **聚合(Aggregation)**:表示整体与部分的关系,部分可以独立于整体存在。
- **组合(Composition)**:表示整体与部分的关系,部分不能独立于整体存在。

 【6】可见性(Visibility)
- **+** public:公共的,可以被任何其他类访问。
- **-** private:私有的,只能在定义它的类内部访问。
- **#** protected:受保护的,可以被定义它的类及其子类访问。
- **~** package:包访问权限,只能在定义它的包内部访问。

  • 两个类之间相互关联时,关联自身也具有属性和操作。
  • 类图主要展示系统的静态结构,但也可以表示动态方面,如对象间的关系和交互。

3.作用

- 提供系统的静态视图,帮助理解系统的结构和组成。
- 作为代码实现的蓝图。
- 促进团队成员之间的沟通和理解。

复习题:

 某商场会员管理系统包含一个会员类(Member), 会员的基本信息包括会员编号、 会员姓名、 联系电话、 电子邮箱、 地址等, 会员可分为金卡会员(GoldMember)和银卡会员(SilverMember)两种, 不同类型的会员在购物时可以享受不同的折扣; 每个会员可以拥有一个或多个订单(Order), 每一个订单又可以包含至少一条商品销售信息(ProductItem), 商品销售信息包括订单编号、 商品编号、 商品数量、 商品单价和折扣等; 每一条商品销售信息对应一类商品(Product), 商品信息包括商品编号、 商品名称、 商品单价、 商品库存量、 商品产地等。

<1>根据以上描述画出类图。

<2>UML类图中,关联和依赖的区别是什么?

A. 关联是有向的,依赖是无向的

B. 关联是无向的,依赖是有向的

C. 关联表示对象之间的关系,依赖表示类之间的继承关系

D. 关联表示类之间的继承关系,依赖表示对象之间的关系

<3>在UML类图中,多重性“1”表示什么含义?

A. 一个类的对象可以与另一个类的对象有多个关联。

B. 一个类的对象必须与另一个类的对象有一个关联。

C. 一个类的对象可以与另一个类的对象有零个或多个关联。

D. 一个类的对象可以与另一个类的对象没有关联。

<4>如果在UML类图中,一个类与另一个类之间的关联多重性标记为“0..*”,则表示:

A. 每个对象至多有一个关联对象。

B. 每个对象至少有一个关联对象。

C. 每个对象可以有零个或多个关联对象。

D. 每个对象必须有多个关联对象。

复习题答案

 <1>

<2>C. 关联表示对象之间的关系,依赖表示类之间的继承关系

<3>B. 一个类的对象必须与另一个类的对象有一个关联。

<4>C. 每个对象可以有零个或多个关联对象。


<3>贵妃:序列图【Sequence Diagram

1.定义

   - 序列图通过描述对象之间发送消息的时间顺序来显示多个对象之间的动态协作。它在详细设计阶段用于设计对象的交互和行为。
   - 它是一个二维图,横轴表示对象,纵轴表示时间,消息在各对象之间横向传递,依照时间顺序纵向排列。

2.构成元素

【1】角色(Actor)**:系统角色,可以是人或其他系统,子系统。以一个小人图标表示。

【2】对象(Object)**:对象位于序列图的顶部,以一个矩形表示。对象的命名方式一般有三种:对象名和类名、只显示类名(匿名类)、只显示对象名。


【3】生命线(LifeLine)**:每个对象底部中心的垂直虚线,表示对象在一段时间内的存在。


【4】激活(Activation)**:表示对象将执行相应操作的时间段的符号。在C语义中可以解释为一对括号{};用一个小矩形表示,即绿色圈中部分。

【5】消息(Message)**:对象之间传递的信息,用于表示对象之间的交互。消息分为同步消息、异步消息和返回消息。

3. 消息类型

  <1>同步消息(Synchronous Message)**:发送者发送消息后,必须等待接收者处理完毕后才能继续执行。
   <2>异步消息(Asynchronous Message)**:发送者发送消息后,不需要等待接收者的响应,可以继续执行后续操作。
   <3>返回消息(Return Message)**:表示一个对象收到消息后执行了相应的操作,并将结果返回给发送消息的对象。

4. 自关联消息

   自关联消息是指对象在序列图中发送消息给自己的情况。这种消息表示对象内部的自身行为或交互。

5. 创建和销毁消息

    参与者不一定在序列图交互的整个持续时间内都存在。可以根据传递的消息创建和销毁参与者。

复习题:

<1>上图绘制的是客户在自动售货机购买商品的顺序图,参与的用户界面类是:

A、出货器   B、前端   C、顾客    D、识别器

<2>正确按照时间顺序排列的消息是:

A.交付货币  交付商品信息   识别    出货

B.识别  交付货币  交付商品信息   出货

C.交付货币  识别  交付商品信息   出货

<3>交付货币消息将被实现为      类的方法

出货器   B、前端   C、顾客   D、识别器

 复习题答案

<1>B 找和用户有交互接触的类

<2>C 顺序图的时间顺序一般是从左到右,再从上到下

<3>D 消息成为消息指向的类中的方法,就是说  消息指向谁就实现谁的方法


<4>贵妃:状态图【State Diagram】

1. 定义

 - 状态图用于描述对象在系统中的所有可能状态及其相互之间的转变关系。它主要用于分析和设计基于事件驱动的系统,例如嵌入式系统、交互式软件或业务流程。

2.构成元素

【1】状态(State)**:表示对象在其生命周期中的各种条件或情况。用圆角矩形表示,包含状态名称,可选内部描述包括进入、退出和持续活动。


【2】初始状态(Initial State)**:系统或对象的起始点,用一个实心圆表示。

【3】最终状态(Final State)**:系统或对象生命周期的终止状态,用一个双圈的实心圆表示。

【4】选择状态(Choice State) **:一般用菱形表示

【5】状态转移(Transition)**:表示状态之间的变更,用带箭头的直线连接两个状态,箭头上标注触发事件、条件和动作。

【6】触发事件(Triggers)**:Triggers是指引起状态转换的事件或信号。它们是状态机响应的外部或内部刺激,可以是消息的接收、时间事件、条件满足或其他任何可以被状态机识别的事件。


【7】条件(Guard Condition)**:状态转移的约束,通常用方括号表示,条件为真时,转移才会发生。

这里有关Triggers和Guard我想补充一下,有些同学会比较困惑不太能理解。

比如现在咱就是过马路,因为现在是状态图对吧。路灯有红灯,绿灯,黄灯三种状态,咱都知道,一般过了一段固定的时间路灯就会变颜色,这个固定的时间就是Triggers,也就是我们说的触发器。这个Guard呢,比如说黄灯转绿灯就要没有车辆靠近,这个没有车辆靠近就是Guard。Triggers是Transition的必要条件,但是Guard不是。


【8】活动(Activity)**:表示在状态中执行的操作,可以细分为入口(entry)、持续(do)和出口(exit)动作。

3.画图

   第一步:右击Model根节点

   第二步:Add a Model using Wizard 添加新模型 

   第三步:State Machine选择一个模型 ---> Create pattern

   第四步:先画Initial开始状态和Final结束状态

   第五步:绘制其他状态State

   第六步:画状态之间的转移

   注意:一般initial、final和一般状态之间的转移不需要写转移条件

复习题: 

<1>状态图中,以下哪一项是描述状态之间转换的触发因素?

A. 状态         B. 转换         C. 事件         D. 动作

<2>在状态图中,当对象从一个状态转移到另一个状态,这个过程称为什么?

A. 事件         B. 转换         C. 动作         D. 状态

<3>下列哪一项不是状态图的核心元素?

A. 对象         B. 状态         C. 转换         D. 事件

<4>对于在线购物系统中的订单对象,以下哪一状态不可能出现在其状态图中?

A. 待付款         B. 已发货         C. 购物车         D. 已完成

<5>根据以下的描述,绘制“复印机”的状态图。

未接到工作命令时,复印机处理闲置状态,接到复印命令后,转入复印状态,完成复印后又回到闲置状态,等待命令。若复印时发现没纸,则进入缺纸状态,发出警告等待装纸,装纸完成后又进入闲置状态;若复印时发现卡纸,则进入卡纸(故障)状态,发出警告等待排除故障,故障排除后又进入闲置状态。

<6>绘制选课系统中课程(Course)对象的状态图。

   经过需求分析,Course课程对象有以下状态:创建(Created),添加到数据库中(In Database),课程(在数据库中)被删除(Deleted),课程被修改(Modified),课程被开设(纳入学期计划)(In Schedule),不允许选修(选修人数满)(Locked)。

 复习题答案

<1>C. 事件

<2>B. 转换

<3>A. 对象

<4>C. 购物车  

<5>

<6>


<5>嫔:活动图Activity Diagram

1. 定义

-活动图用于描述系统中业务流程、工作流或系统操作的动态行为。它展示了业务流程中的步骤以及这些步骤之间的控制流。

2. 构成元素 

【1】活动(Activity)**:表示一个操作或一个动作的执行,是活动图中的基本单元。


【2】动作状态(Action )**:表示一个动作的执行,是活动图中的一个节点。不可细分!

Activity和action是有区别的,一个Activity可以包括多个action。比如说你要去上早八,首先你要起床----去买个包子----走路到教室----认真听讲【混日子的就是打王者刷抖音偶尔抬头看一眼老师等吃饭】----下课,其中上早八就是Activity。起床/买包子/走路到教室/听讲/下课分别是5个Action。

【3】决策节点(Decision Node)**:具有一个进入控制流和至少两个导出控制流。判断是否满足条件。满足继续,不满足走另一条路。


【4】并发区域(Concurrent Region)**:表示多个活动可以并行执行。


【5】同步条(Synchronization Bar)**:表示多个并行活动的开始或结束。

【6】. 动作流(Action Flow)**:连接活动,表示活动之间的顺序执行。

【7】 分叉(Fork)和汇合(Join)**:

- 用来对并发的控制流建模

- 分叉用于将活动流分为两个或多个并发运行的分支,汇合用于将并行分支的活动流重新合并。

- 所有的子流程都要执行;所有子流程的执行具有并行执行的特点

【8】泳道(Swimlane)**:将活动图划分为不同的区域,每个泳道代表一个责任区域,指明活动是由谁负责的或发起的。

【9】对象流(Object Flows)**:表示动作状态或活动状态与对象之间的依赖关系,表示动作使用对象或动作对对象的影响。

【10】开始节点(Initial Node)**:表示流程的开始,通常用一个实心黑色圆点表示。

【11】终止节点(Final Node)**:表示流程的结束,通常用一个半实心球表示。

复习题:

<1>活动图中用于判断节点的多个控制流合并的元素是(   ).

   A  判断节点    B  泳道   C  合并   D  分叉

<2>下面不是活动图中的基本元素是(  ).

   A   分叉、合并    B  泳道、对象流    C   用况  状态   D  活动  分支

<3>活动图中用于活动分组的元素是(   ).

   A   泳道   B 控制流   C  判断节点   D  包

<4>下列建模适合使用活动图的有(   ),

  A  对业务流程建模    B  对程序流程建模   C 对体系结构建模  D  对数据库建模

<5>请根据以下流程,画一张学生请假的活动图。

学生填写请假单 ===> 班主任审批 ===> (请假时间>1天)学工处审批===>

学工处记录 ===> 班主任通知学生请假结果

<6>请根据以下流程,画一张活动图。

     卖家接收到买家的订单后处理订单的业务流程:

        财务部收款   开具发票

        仓储部备货   发物流

复习题答案

<1>C

<2>C

<3>A

<4>AB

<5>无脑画initial和final开始和结束-----依赖画Action动作-----使用ControlFlow连接所有动作


<6>嫔:组件图Component Diagram

1.定义

 - 组件图提供了系统的物理视图,展示了软件组件如何分解以及它们之间的依赖关系。

2.构成元素

【1】组件(Component)**
   - 组件是软件的可替换模块,它封装了实现细节,并提供了一个清晰的接口。
   - 在组件图中,组件通常用矩形表示,名称通常显示在矩形内部。

【2】接口(Interface)**
   - 组件提供的接口用小圆圈表示,位于组件的边界上。
   - 接口可以是用于组件间通信的点,也可以是组件提供的服务。

【3】组件之间的关系**
   - **依赖关系(Dependency)**:表示一个组件的使用或功能依赖于另一个组件的实现。
   - **实现关系(Realization)**:表示一个组件实现或特化了一个接口。
   - **聚合关系(Aggregation)**:表示组件间的整体与部分的关系,部分可以独立于整体存在。
   - **组合关系(Composition)**:表示组件间的强整体与部分的关系,部分不能独立于整体存在。

【4】可见性(Visibility)
   - 接口的可见性可以是公共的(+)或私有的(-),表示接口的访问权限。

【5】部署视图**
   - 组件图与部署图(Deployment Diagram)结合使用,可以展示组件在硬件上的部署情况。

复习题:

<1>组件图专注于系统的哪种实现图?

A. 动态         B. 静态         C. 基础         D. 实体

<2>在UML中,哪个元素是被节点执行的事物?

A. 包         B. 组件         C. 接口         D. 节点

<3>组件图通常在软件开发的哪个阶段使用?

A. 实现         B. 需求分析         C. 架构设计         D. 维护

<4>组件图中,哪个元素定义了组件提供或使用的功能?

A. 组件         B. 接口         C. 依赖关系         D. 关联关系

在这个组件图中:

  • 用户界面(UI)负责显示书籍信息和处理用户订单。
  • 订单处理(OP)管理订单逻辑和库存更新。
  • 库存管理(IM)跟踪书籍库存。
  • 支付网关(PG)处理支付事务。
  • 书籍数据库(BD)存储书籍信息和库存数据。

<5>在在线书店系统中,“支付网关(PG)”组件的主要功能是什么?

<6>如果在线书店系统需要添加一个新的功能,允许用户撰写和阅读书籍评论,请设计相应的组件

复习题答案

<1> B. 静态

<2> B. 组件

<3>A. 实现

<4>B. 接口

<5>

  • 接收支付请求:当用户完成购物并选择支付方式后,支付网关接收来自用户界面的支付请求。
  • 验证支付信息:支付网关验证用户提供的支付信息,如信用卡详情、支付金额等。
  • 与银行或支付服务提供商交互:支付网关与外部银行系统或支付服务(如PayPal、Stripe等)进行通信,以完成支付处理。
  • 确认支付结果:支付网关将支付结果(成功或失败)返回给订单处理组件,以便更新订单状态。
  • 安全性保障:确保所有支付信息的安全传输和处理,遵守相关的支付卡行业(PCI)标准。
  • 提供支付日志和报告:记录所有支付活动的细节,为审计和报告目的提供数据。

<6>新组件名称:评论管理(Review Management)

  • 主要功能:
    • 评论提交:允许用户提交书籍评论,并将其存储在系统中。
    • 评论检索:提供接口供用户检索和阅读书籍评论。
    • 评论存储:将评论数据存储在数据库中,与书籍信息和用户信息相关联。
    • 评论审核:对用户提交的评论进行审核,确保评论内容符合规定标准。
    • 用户反馈:允许用户对评论进行点赞或报告不当内容。
  • 与其他组件的关系:
    • 用户界面(UI):评论管理组件将与用户界面组件交互,提供评论提交和显示的界面。
    • 书籍数据库(BD):评论管理组件将与书籍数据库组件交互,存储和检索与书籍相关的评论。
    • 订单处理(OP):如果评论与特定订单相关,评论管理组件可能需要与订单处理组件交互,以获取订单详情。


<7>贵人:部署图Deployment Diagram

1.定义

   - 部署图(Deployment Diagram)描述了系统的物理架构,包括硬件节点和在这些节点上运行的软件组件。它展示了系统的硬件配置、硬件部署以及软件如何部署到网络结构中。

2.构成元素

【1】节点(Node)**:代表运行时的物理对象,如服务器、数据库服务器等。节点通常用立方体表示,处理器节点带阴影,设备节点不带阴影。


【2】节点实例(Node Instance)**:表示特定节点的一个实例,名称会有下划线,并且节点类型前会有冒号。

 【3】构件(Artifact)**:软件开发过程中的产物,如源代码、可执行程序、文档等。构件通常用带有关键字«artifact»和文档图标的矩形表示。

构件vs节点

 - 构件表示软件部件,节点表示硬件部件。构件是参与系统执行的事物,而节点是执行构件的事物。


【4】连接(Association)**:表示节点之间的通信路径,可以是协议如TCP/IP、HTTP等。
【5】处理器(Processor)**:具有计算能力的节点,可以执行软件组件,如服务器。
【6】设备(Device)**:不具有计算能力的节点,通过接口提供服务,如打印机、扫描仪。

3.用途

  •    描述一个具体应用的主要部署结构。
  •    平衡系统运行时的计算机资源分布。
  •    描述组织的硬件网络结构或嵌入式系统的多种硬件和软件相关的系统运行模型。

 复习题

<1>在UML中,部署图主要用于展示以下哪项内容?

A. 系统的静态结构 B. 系统的动态行为 C. 系统的物理架构 D. 系统的功能需求

<2>UML部署图中,以下哪个选项不属于部署图中的事物?

A. 节点(Node) B. 构件(Artifact) C. 用例(Use Case) D. 组件(Component)

<3>在UML部署图中,以下哪个选项正确描述了构件实例与节点的关系?

A. 每个构件实例必须部署在多个节点上

B. 一个节点可以包含多个构件实例

C. 构件实例不能与节点分开

D. 节点是构件实例的抽象表示

复习题答案

<1>C. 系统的物理架构

<2>C. 用例(Use Case)

<3>B. 一个节点可以包含多个构件实例


 <8>常在:通信图/协作图【Communication Diagram】

1.定义

 - 通信图用于描述一组对象在协作过程中如何互相通信,强调对象在交互中承担的角色,侧重于展示对象之间的关系。通信图是序列图的变体,强调对象间的关系。它在详细设计阶段用于展示对象间的交互结构。

2.构成元素

【1】对象(Object)**:

- 对象的基本表示形式与顺序图中的对象相同,都是类的实例。
- 对象在通信图中的位置没有限制,且不表示对象的创建与销毁。

-图形为一个方框,加了“:”之后就变成实例化对象


【2】链(Link)**:表示对象之间的关系或连接,用于描述消息传递的路径。

 - 链是关联的实例,用于连接对象并传递消息,若两个对象需要发生交互,必须先建立链。

【3】消息(Message)**:

- 消息需要附加在对象之间的链上,通过链连接的两个对象之间才允许在交互执行过程中进行消息传递。
   - 短箭头上方的阿拉伯数字表执行顺序。

3.画message

<1>先画两个对象

<2>画association

<3>右击选择消息,点击黑框或者绿框,你自己根据情境选择

或者可以把类实例化变成对象之后再进行message的连接,加了“:”之后就变成实例化对象

4. 特征

    - 通信图可以表示多态性,展示不同类型的对象如何响应同一消息。
    - 通信图可以表示同步和异步消息,通过特定的箭头和符号来区分。

复习题

假设我们正在设计一个电梯系统,该系统需要处理用户的楼层请求,并根据请求调度电梯。系统包括队列(RequestQueue)、电梯(Elevator)、命令、楼层控制器(FloorController)、按钮(Button)等组件。用户通过按钮发出请求,楼层控制器接收请求并调度电梯,电梯根据命令执行上下行操作。

  • 用户调用按钮的nextJob()方法发出请求。
  • 按钮调用楼层控制器的create()方法创建一个新的请求。
  • 楼层控制器调用队列的push()方法将请求添加到队列中。
  • 楼层控制器根据队列中的请求调用电梯的getElevator()方法分配电梯。
  • 电梯根据楼层控制器的命令执行moveUp()moveDown()方法。

<1>请你根据描述画出协作图


阅读以下读者借阅图书用例的协作图,完成习题:

<2>图上用户界面类是:

A 借书窗口       

B 图书信息

C 图书借阅信息   

D 图书管理员

<3>检查借阅信息这几个消息的时间序列

选择书籍 / 添加借阅图书信息 / 显示借阅记录 / 提交借书证和书籍

<4>本图中有哪些消息需要循环发送?

复习题答案

<1>

<2>A  用户界面类负责IO,和参与者有交互的类  看消息标注上的前缀

<3>提交借书证和书籍 ----- 选择书籍 ----- 添加借阅图书信息 -----显示借阅记录

<4>*[所有想要借的图书]选择书籍()


<9>常在:定时图Timing Diagram

  1.定义

- 定时图用于展示对象状态随时间的变化,以及对象间的交互和事件的时序关系,特别适用于分析并发系统和实时系统。

--定时图描述对象间交互的时间约束。它在需要精确时间控制的系统中使用,如实时系统。

2.构成元素 

   【1】时间轴(Time Axis)**:展示时间的流逝,通常是水平方向。
   【2】生命线(Lifeline)**:代表系统中的一个元素,如一个对象或组件,在定时图中通常是垂直方向展示。

 - 生命线结束表示对象完成了其生命周期内的所有行为。


   【3】状态(State)**:展示生命线上对象在特定时间段的状态。
   【4】时间约束(Time Constraint)**:指定状态持续时间或事件发生的具体时间。

   【5】事件(Event)**:表示在特定时间点发生的事情,可以是发送或接收消息,也可以是状态的变更。

  【6】条件事件(Conditional Event)**:表示基于特定条件的事件,条件可以是布尔表达式,当条件为真时事件发生。

  【7】时间段(Time Interval)**: 表示一个时间段,在这段时间内对象保持特定的状态或执行特定的活动。

  【8】同步条(Synchronization Bar)**: 表示多个对象在特定时间点的同步操作,通常用一条粗线表示。

  【9】销毁(Destruction)**:表示对象在某个时间点被销毁,可以用一个“X”标记在生命线上。

  【10】创建(Creation)**:表示对象在某个时间点被创建,可以用一个空心圆圈标记在生命线上。

  【11】自事件(Self-Event)**: 表示对象内部发生的事件,通常用一个指向自身的箭头表示。

  【12】组合片段(Interaction Fragments)**:用于表示消息序列中的选择、迭代和并发等复杂行为。

3. 用途

   - 定时图特别适用于分析并发控制和时间依赖的行为设计。
   - 定时图与其他交互图(如顺序图和通信图)的主要区别在于它强调时间因素,而顺序图强调消息的时间顺序,通信图强调对象间的组织结构。

复习题

<1>UML定时图主要用于表示什么?

A. 类之间的关系        

B. 对象状态随时间的变化        

C. 系统的物理部署        

D. 用例的实现细节

<2>在UML定时图中,时间轴通常是如何表示的?

A. 垂直方向         B. 水平方向         C. 对角线方向         D. 无固定方向

<3>生命线在UML定时图中代表什么?

A. 事件         B. 操作         C. 对象或组件         D. 用例

<4>下列哪个不是UML定时图的基本组成部分?

A. 时间轴         B. 状态         C. 消息序列         D. 时间约束

<5>定时图中的生命线结束表示什么?

A. 对象被销毁         

B. 系统崩溃         

C. 对象状态不再改变

D. 对象完成了其生命周期内的所有行为

复习题答案

<1>B. 对象状态随时间的变化

<2>B. 水平方向

<3>C. 对象或组件

<4>C. 消息序列

<5>D. 对象完成了其生命周期内的所有行为


<10>答应:交互概览图Interaction Overview Diagram

1. 定义

   - 交互概览图=活动图+顺序图
   - 交互概览图是活动图的一种形式,其节点代表交互图。它可以理解为细化的活动图,其中的活动通过一些小型的顺序图来表示;也可以将其理解为利用标明控制流的活动图分解过的顺序图。

2.构成元素

【1】交互发生(Interaction Occurrence)**
   - 表示一个特定的交互实例,可以是顺序图中的一个片段或其他类型的交互图。

【2】交互使用(Interaction Use)**
   - 表示一个通用的交互模式,可以被多个不同的交互发生所重用。

【3】生命线(Lifeline)**
   - 表示参与交互的对象,每个对象都有一条垂直的生命线。

【4】消息(Message)**
   - 表示对象之间的通信,包括同步消息、异步消息和返回消息。


   - 自关联消息(Self-Message):表示对象发送消息给自己的情况。

【5】扩展区域(Extension Region)**
   - 表示扩展用例的片段,用于展示扩展用例如何扩展基础用例。

【6】包含区域(Include Region)**
   - 表示包含用例的片段,用于展示基础用例如何包含其他用例。

【7】交互(Interaction)**
   - 表示一系列消息交换,可以是顺序图、通信图或其他类型的交互图。

【8】时间约束(Time Constraints)**
    - 用于指定消息交换的时间限制。

【9】守卫条件(Guard Conditions)**
    - 用于指定分支的条件,只有当条件满足时,相应的分支才会执行。

【10】角色(Actor)**
    - 表示与系统交互的外部实体,可以是人或其他系统。

【11】信号(Signal)**
    - 表示在特定条件下触发的动作,通常用于表示异步事件。

【12】时间轴(Timeline)**
    - 用于展示时间的流逝,通常在交互概览图的顶部或底部。

【13】交互执行(Interaction Execution)**
    - 表示交互的执行路径,可以包含多个消息和分支。

好无聊啊 做个表情包玩下 

复习题

复习什么复习,这个使用频率相对较少,自己找找概念题做一下算了,画图估计不会考 


<11>答应:对象图Object Diagram

1. 定义 

   - 对象图展示了类的实例以及这些实例之间的关系,是一种快照,反映了系统的某个特定时刻的状态。

  - 对象图是类图的实例,显示对象间的具体交互。它在分析特定场景下的对象状态和关系时使用。

2.构成元素

【1】对象(Object)**:表示类的一个具体实例,用矩形表示,通常包含对象名和类名。

  •  - 对象的属性可以列出具体值,用“属性名:属性值”的形式表示。
  •  - 对象图可以展示对象的方法,但通常不展示方法的具体实现。
  •  - 表示关联中对象的数量,用在关联的两端,如“1..*”表示“一到多个”。
  •    - 属性和方法的可见性可以用“+”(public)、“-”(private)、“#”(protected)和“~”(package)表示。


   【2】关联(Association)**:表示对象之间的关系,用带标签的线表示。


   【3】聚合(Aggregation)**:表示整体与部分的关系,用带有菱形或实心点的线表示。


   【4】组合(Composition)**:表示更强烈的整体与部分关系,用带有实心菱形的线表示。
   【5】依赖(Dependency)**:表示一个对象的变化可能影响另一个对象,用虚线箭头表示。
   【6】继承(Inheritance)**:表示一个类是另一个类的子类,用带空心箭头的线表示。

3. **对象图与类图的区别**
    - 类图描述了类的静态结构和类之间的关系,而对象图展示了类的具体实例和实例之间的关系。

复习题

<1>在UML对象图中,以下哪个符号用来表示对象?

A. 矩形 B. 圆圈 C. 三角形 D. 椭圆形

<2>在UML对象图中,哪个符号表示对象之间的关联关系?

A. 实线 B. 虚线 C. 带箭头的线 D. 点划线

<3>在UML对象图中,多重性是如何表示的?

A. 使用数字表示 B. 使用文本描述 C. 使用图标表示 D. 不能表示

<4>在该UML对象图中,一个“Student”对象可以与多少个“Course”对象相关联?

复习题答案

<1>A

<2>A

<3>A

<4>一个“Student”对象可以与2个“Course”对象相关联。


<12>宫女:包图Package Diagram

1. 定义 

- 包图(Package Diagram)用于描述模型中的包及其关系,展示了系统的模块化结构和包之间的依赖关系。

2.构成元素 

 【1】包(Package)**
   - 包是包图的主要元素,用于组织和封装其他模型元素,如类、用例、组件、其他包等。
   - 在包图中,包通常用一个矩形表示,矩形内部可以包含包的名称。

  

     - 包中的元素可见性包括公有(public)、私有(private)和保护(protected),分别用        “+”、“-”和“#”表示。

    - 包可以嵌套使用,表达系统模型元素的静态结构关系。

    - 允许一个包中的元素访问另一个包中的元素,用虚线带箭头表示,箭头指向被导入的包。

   【2】节点(Node)**:

   - 在包图中,节点可以表示处理器或设备,类似于部署图中的节点。

   【3】元素(Elements)**
   - 包内可以包含各种UML模型元素,如类、用例、接口、组件、节点等。

   【4】依赖关系(Dependency)**
   - 表示两个包之间的依赖关系,即一个包的变化可能影响到另一个包。
   - 在包图中,依赖关系用一条带箭头的虚线表示,箭头指向依赖的方向。

  【5】导入关系(Import)**
   - 允许一个包导入另一个包中的元素,使得导入包可以访问被导入包的元素。

  【6】泛化关系(Generalization)**
   - 表示包之间的继承关系,子包继承父包中的元素。
   - 在包图中,泛化关系用一条带空心箭头的实线表示,箭头指向父包。

  【7】 子包(Subpackage)**
    - 包内可以包含子包,形成包的层次结构。

    - 包可以有自己的属性,如版本信息、作者等。

    - 包可以有自己的操作,这些操作可以应用于包内的所有元素。

复习题

<1>下列哪个是用于把元素组织成组的通用机制?

A. 类

B. 包

C. 接口

D. 组件

<2>在UML提供的图中,哪个用于描述系统与外部系统及用户之间的交互?

A. 用例图

B. 类图

C. 对象图

D. 部署图

<3>在UML中,包和包之间的关系是什么?

A. 泛化

B. 实现

C. 依赖

D. 关联

<4>包图中,包的表示方法是?

A. 用一个带有下划线的类名

B. 用一个带有双下划线的类名

C. 用一个圆圈表示

D. 用一个矩形表示

<5>在UML中,哪个图用于展示系统的静态实现视图?

A. 部署图

B. 组件图

C. 包图

D. 用例图

复习题答案

<1>B. 包

<2>A. 用例图

<3>C. 依赖

<4>D. 用一个矩形表示

<5>C. 包图

二、应用场景以及区别

1. 用例图(Use Case Diagram)

  •    描述系统的功能和用户(参与者)如何与这些功能交互。
  •    强调系统的功能需求和用户视角。

2. 类图(Class Diagram)

  •    描述系统的静态结构,包括类、接口、属性、方法以及它们之间的关系。
  •    强调系统的结构和类之间的关系。

3. 对象图(Object Diagram)

  •    展示特定时刻系统中对象的实例和它们之间的关系。
  •    是类图的实例化,强调系统的动态状态。

4. 状态图(State Diagram)

  •    描述对象在其生命周期内的状态变化以及触发状态变化的事件。
  •    强调对象的状态和行为。

5. 活动图(Activity Diagram)

  •    描述业务流程或操作的步骤和流程。
  •    强调系统的动态行为和流程。

6. 序列图(Sequence Diagram)

  •    描述对象之间交互的消息顺序。
  •    强调对象间通信的时间顺序。

7. 通信图(Communication Diagram)

  •    描述对象之间的交互和协作关系。
  •    类似于序列图,但更强调对象的结构。

8. 定时图(Timing Diagram)

  •    描述对象状态变化和事件的时间约束。
  •    强调时间因素和时序关系。

9. 组件图(Component Diagram)

  •    描述系统的物理结构,包括组件和它们的依赖关系。
  •    强调系统的物理实现和组件化。

10. 部署图(Deployment Diagram)

  •    描述系统的物理部署,包括硬件和软件的分布。
  •    强调系统的物理配置。

11. 包图(Package Diagram)

  •     描述系统的逻辑结构,包括包和类的组织。
  •     强调系统的模块化和组织结构。

12. 交互概览图(Interaction Overview Diagram)

  •     结合不同类型的交互图,提供对复杂交互过程的整体视图。
  •     强调交互的组织和概览。


 

三、各个类之间的关系

1.关联(Association)

举例:

学生和课程:        一个学生可以注册多个课程,一个课程可以有多个学生注册。

汽车与制造商:    一辆汽车由一个制造商制造,但一个制造商可以制造多种型号的汽车。

书籍与作者:       一本书可以有一个或多个作者,一个作者可以写多本书。

医生与病人:    一个医生可以治疗多个病人,一个病人可以由多个医生治疗。

图形最简单的 就一条实线

多重性:它可以是一对一(One-to-One)、一对多(One-to-Many)、多对多(Many-to-Many)的关系。

2.聚合(Aggregation)

举例:

汽车与轮胎:一辆汽车由多个轮胎组成,但轮胎脱离汽车后仍可独立存在。

公司与部门:一个公司包含多个部门,但部门在公司解散后仍可作为一个独立的实体存在。

学生与学校:一个学校由多个学生组成,学生可以上过多个学校,小学初中高中大学,学校倒闭,学生不会丢掉性命,嘻嘻。

乐队与音乐家::一个乐队由多个音乐家组成,但音乐家离开乐队后仍可独立作为艺术家存在。

图形是一条带有菱形的实线,菱形指向整体(指大的)

部分独立于整体存在,整体销毁不会影响部分,部分可以单独存在。

3.组合(Composition)

举例:

人类和心脏类:心死的时候没有一个人类是无辜的。

电脑与CPU:死电脑,看我干烧你。电脑包含一个中央处理器,CPU是电脑的核心部件,不能独立于电脑存在。

机器与零件:没有零件就没有机器。机器由多个零件组成,零件是机器的组成部分,不能独立于机器存在。

汽车与引擎:汽车包含一个引擎,引擎是汽车不可或缺的部分,不能独立于汽车存在。

图形:一条带有实心菱形的实线,菱形指向整体(指大的)

整体类包含多个部分类,A类和B类首先是聚合关系,A类对象和B类对象的生命周期是一致的。整体被销毁时,部分也被销毁。 部分无法单独存在。

4.泛化(Generalization)

举例:

动物和鸟类:鸟类是动物的一种,因此鸟类继承了动物的属性和行为,如呼吸和进食,同时鸟类还有自己特有的属性,如飞行。

交通工具和汽车:汽车是一种交通工具,因此汽车继承了交通工具的属性和行为,如移动和停止,同时汽车还有自己特有的属性,如品牌和型号。

书籍和小说:小说是一种书籍,因此小说继承了书籍的属性和行为,如作者和标题,同时小说还有自己特有的属性,如情节和角色。

图形:一条带有空心箭头的实线,箭头指向父类

A类是B类中的一种,A类继承B类

5.实现(Realization)

举例:

门锁和可锁定接口:门锁类实现了可锁定接口,意味着门锁具有可锁定接口定义的所有行为,如锁定和解锁。

打印机和打印接口:激光打印机类实现了打印接口,表示激光打印机能够执行打印操作。

音频播放器和播放控制接口:MP3播放器类实现了播放控制接口,意味着MP3播放器具有播放、暂停和停止等控制功能。

图形:一条带有空心箭头的虚线,箭头指向接口

实现关系表明一个类具体化了一个接口的规范,确保类提供了接口所要求的所有行为。

6.依赖(Dependency)

举例:

咖啡制作与咖啡机:咖啡制作过程依赖于咖啡机的功能,如果咖啡机发生变化(如升级或维修),可能会影响咖啡的制作方式。

用户界面与数据模型:用户界面显示数据模型中的数据,如果数据模型发生变化,用户界面可能需要更新以反映这些变化。

餐厅订单与厨房:餐厅订单的准备依赖于厨房的工作,厨房的效率直接影响订单的完成时间。

图形:一条带有箭头的虚线,箭头指向依赖的方向

A类对象需要调用B类对象的方法

7.友元(Friend)

举例:

银行账户和账单打印:银行账户类管理账户的余额和交易记录,而账单打印类需要访问这些私有信息来生成账户的月度账单。在C++中,可以将账单打印声明为银行账户的友元类,使其能够访问银行账户的私有成员。

图形和绘图工具:图形类包含绘制自身的逻辑,而绘图工具类需要访问图形的内部数据来执行绘制操作。在C++中,可以将绘图工具声明为图形的友元类,使其能够直接访问图形的私有数据。

图形:在UML中没有标准表示,但有时用带有“友元”标签的虚线表示。

友元(Friend)关系是一种特殊的类间关系,它允许一个类访问另一个类的私有(private)和保护(protected)成员。

其次我想说明的是,UML图一般注重的是系统整体的规划,不是具体的实现。

8.包含关系(Include)

举例:

保存文档和备份文档:当用户执行保存操作时,除了将文档保存到指定位置外,系统还会自动进行备份。

取款和检查余额: 在银行账户管理系统中,用户进行取款操作时,系统首先需要检查账户余额是否充足,再根据用户需求取钱。

图形:一条带有“<<include>>”标签的虚线

一个用例的执行必然涉及到另一个用例的执行。

9.扩展关系(Extend)

举例:

查看商品和添加商品到购物车:不是每次查看都会添加

取款和打印取款凭证:不是每一次都会打印

提交试卷和评分:不是每次都评分,看老师,也看老师心情

图形:一条带有“<<extend>>”标签的虚线

扩展用例是基础用例的可选扩展,它为基本用例添加了新的行为,但不是基础用例执行的必要部分。不是每次都需要执行。

补充:

  降低因为依赖关系导致的耦合度:接口分离原则

  A类依赖B类,  B类实现C接口,A类依赖C接口

   接口和接口之间的关系:泛化关系

   类和接口之间的关系:实现关系

四、考试秘籍

“三长一短选最短,三短一长选最长,长短不一就选C,参差不齐就选B,如果一样就选D。”

知道吗?朋友。我只能帮你到这里了。再见。

祝你考试顺利,考的全会,蒙的全对!

相关文章:

可视化建模以及UML期末复习篇----UML图

这是一篇相对较长的文章&#xff0c;如你们所见&#xff0c;比较详细&#xff0c;全长两万字。我不建议你们一次性看完&#xff0c;直接跳目录找你需要的知识点即可。 --------欢迎各位来到我UML国&#xff01; 一、UML图 总共有如下几种&#xff1a; 用例图&#xff08;Use Ca…...

音视频入门基础:MPEG2-TS专题(13)——FFmpeg源码中,解析Section Header的实现

一、引言 在《音视频入门基础&#xff1a;MPEG2-TS专题&#xff08;11&#xff09;—— TS中的Section》中讲述了Section Header的基本概念&#xff0c;本文讲述FFmpeg源码中是怎样解析Section Header的。 二、parse_section_header函数的定义 FFmpeg源码中通过parse_section…...

SQL UCASE() 函数:转换字符串为大写

SQL UCASE() 函数&#xff1a;转换字符串为大写 概述 在SQL中&#xff0c;UCASE() 函数用于将字符串中的所有字符转换为大写。这是一个非常实用的函数&#xff0c;尤其在处理大量文本数据时&#xff0c;确保数据的一致性和准确性。本文将详细介绍UCASE() 函数的用法、示例以及…...

机器学习周报(12.2-12.8)

文章目录 摘要Abstract Vision Transformer1 原理2 代码 摘要 本周学习了Vision Transformer (ViT) 的基本原理及其实现&#xff0c;并完成了基于PyTorch的模型训练、验证和预测任务。深入理解了ViT如何将图像分割成patch作为输入序列&#xff0c;并结合Transformer Encoder处…...

【机器人】系统辨识之激励轨迹设计(傅里叶级数)

在机器人参数辨识中使用傅里叶级数&#xff0c;主要是为了生成一种激励轨迹&#xff0c;具有良好的数学特性&#xff0c;同时符合物理要求。傅里叶级数的特性使其在机器人动力学辨识的激励轨迹设计中非常常用。 1. 为什么需要激励轨迹&#xff1f; 激励轨迹的作用是通过驱动机…...

JVM八股文精简

目录 简述JVM类加载过程简述JVM中的类加载器简述双亲委派机制双亲委派机制的优点简述JVM内存模型简述程序计数器简述虚拟机栈简述本地方法栈简述JVM中的堆简述方法区简述运行时常量池简述Java创建对象的过程简述JVM给对象分配内存的策略Java对象内存分配是如何保证线程安全的如…...

PyTorch基本使用——张量的索引操作

在操作张量时&#xff0c;经常要去获取某些元素进行处理或者修改操作&#xff0c;在这里需要了解torch中的索引操作。 准备数据&#xff1a; data torch.randint(0,10,[4,5]) print(data--->,data)输出结果&#xff1a; data---> tensor([[3, 9, 4, 0, 5],[7, 5, 9, …...

mysql集群MHA方式部署

1. 基本信息 部署机器角色部署路径192.168.242.71MySQL-Mater MHA-NodeMySQL: /alidata1/mysql-8.0.28192.168.242.72MySQL-Slave MHA-NodeMHA-Node: /alidata1/admin/tools/mha4mysql-node-0.58192.168.242.73MySQL-Slave MHA-Node192.168.242.74MHA-ManagerMHA-Manager: …...

Spring Boot中实现JPA多数据源配置指南

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;本文详细介绍了在Spring Boot项目中配置和使用JPA进行多数据源管理的步骤。从引入依赖开始&#xff0c;到配置数据源、创建DataSource bean、定义实体和Repository&#xff0c;最后到配置事务管理器和使用多数据…...

【计算机网络】实验12:网际控制报文协议ICMP的应用

实验12 网际控制报文协议ICMP的应用 一、实验目的 验证ping命令和tracert命令的工作原理。 二、实验环境 Cisco Packet Tracer模拟器 三、实验过程 1.构建网络拓扑并进行信息标注&#xff0c;将所需要配置的IP地址写在对应的主机或者路由器旁边&#xff0c;如图1所示。 图…...

MVC基础——市场管理系统(二)

文章目录 项目地址三、Produtcts的CRUD3.1 Products列表的展示页面(Read)3.1.1 给Product的Model里添加Category的属性3.1.2 View视图里展示Product List3.2 增加Product数据(Add)3.2.1 创建ViewModel用来组合多个Model3.2.2 在_ViewImposts里引入ViewModels3.2.3 添加Add的…...

使用Redis的Bitmap实现签到功能

1.基础签到实现 1.1代码如下Service Slf4j public class SignInService {Autowiredprivate StringRedisTemplate redisTemplate;private static final String SIGN_KEY_PREFIX "sign:";/*** 用户签到* param userId 用户ID* param date 签到日期*/public boolean s…...

OpenCV 图像基本操作

OpenCV快速通关 第一章&#xff1a;OpenCV 简介与环境搭建 第二章&#xff1a;OpenCV 图像基本操作 OpenCV 图像基本操作 OpenCV快速通关第二章&#xff1a;OpenCV 图像基本操作一、相关结构体与函数介绍&#xff08;一&#xff09;cv::Mat 结构体&#xff08;二&#xff09;c…...

SpringBoot3+Micormeter监控应用指标

监控内容简介 SpringBoot3项目监控服务 &#xff0c;可以使用Micormeter度量指标库&#xff0c;帮助我们监控应用程序的度量指标&#xff0c;并将其发送到Prometheus中并用Grafana展示。监控指标有系统负载、内存使用情况、应用程序的响应时间、吞吐量、错误率等。 micromete…...

Leetcode打卡:变为棋盘

执行结果&#xff1a;通过 题目&#xff1a;782 变为棋盘 一个 n x n 的二维网络 board 仅由 0 和 1 组成 。每次移动&#xff0c;你能交换任意两列或是两行的位置。 返回 将这个矩阵变为 “棋盘” 所需的最小移动次数 。如果不存在可行的变换&#xff0c;输出 -1。 “棋盘…...

遣其欲,而心自静 -- 33DAI

显然&#xff0c;死做枚举只能的50分。 错了4次总算对了。 大体思路&#xff1a; 因题目说只有两个因数&#xff0c;那么有两种情况&#xff1a; 1&#xff1a;两个质数相乘&#xff0c;如&#xff1a;3*515 5*745 等&#xff08;不包括5*525 或5*315 重复计算\ 因为3*5算了…...

物品识别 树莓派 5 YOLO v5 v8 v10 11 计算机视觉

0. 要实现的效果 让树莓派可以识别身边的一些物品&#xff0c;比如电脑&#xff0c;鼠标&#xff0c;键盘&#xff0c;杯子&#xff0c;行李箱&#xff0c;双肩包&#xff0c;床&#xff0c;椅子等 1. 硬件设备 树莓派 5 raspberrypi.com/products/raspberry-pi-5/树莓派官方摄…...

鸿蒙NEXT元服务:静态卡片

【引言】 最近上线的鸿蒙NEXT元服务受到了一些用户的反馈&#xff0c;指出其缺乏一个直观的入口。为了解决这个问题并提供类似传统应用程序的桌面快捷方式体验&#xff0c;决定通过添加静态卡片功能来让用户能够直接从桌面访问元服务。本文将详细介绍如何实现这一功能。 【参考…...

vue3父子组件通信

一般常用有6种方式: 使用 props 传递数据:父组件通过 props 传递数据给子组件,子组件通过 defineProps 获取父组件定义的数据。使用 v-model 语法糖:父组件通过 v-model="abc" 传递数据,并监听子组件的更新事件,子组件:通过 defineEmits 获取父传入的属性的更…...

2024年认证杯SPSSPRO杯数学建模D题(第一阶段)AI绘画带来的挑战解题全过程文档及程序

2024年认证杯SPSSPRO杯数学建模 D题 AI绘画带来的挑战 原题再现&#xff1a; 2023 年开年&#xff0c;ChatGPT 作为一款聊天型AI工具&#xff0c;成为了超越疫情的热门词条&#xff1b;而在AI的另一个分支——绘图领域&#xff0c;一款名为Midjourney&#xff08;MJ&#xff…...

虚幻引擎---材质篇

一、基础知识 虚幻引擎中的材质&#xff08;Materials&#xff09; 定义了场景中对象的表面属性&#xff0c;包括颜色、金属度、粗糙度、透明度等等&#xff1b;可以在材质编辑器中可视化地创建和编辑材质&#xff1b;虚幻引擎的渲染管线的着色器是用高级着色语言&#xff08;…...

【Linux基础】yum 与 vim 的操作

目录 Linux 应用商店——yum yum和yum源是什么 关于镜像的简单理解 yum 的基本操作 yum的安装 yum install 命令 yum查看软件包 yum list 命令 yum的卸载 yum remove 命令 关于 rzsz 软件 安装 rzsz 软件&#xff1a; rz 命令 sz 命令 yum 源拓展 Linux 编辑器…...

一句话木马

作用&#xff1a; 一句话木马的作用主要是利用计算机系统或网络协议的安全漏洞&#xff0c;以实现未经授权访问、数据窃取或其他恶意目的。 木马举例&#xff1a; 1.PHP <?php eval($_POST[attack]);?> 解释 • <?php ... ?> 是 PHP 代码的开始和结束标记…...

给建筑物“穿毛衣”:AI绘图新玩法

随着气温的骤降&#xff0c;我们不仅感受到了自然界的寒冷&#xff0c;甚至连城市的建筑物似乎也在寒风中“颤抖”。在这样的背景下&#xff0c;一种新颖的AI绘图玩法——给建筑“穿毛衣”在网络上迅速走红。本文将详细介绍这一创意玩法&#xff0c;并提供手把手的教学指导。 A…...

【Qt】Qt Creator项目文件(.pro 文件)构建指令学习

文章目录 1. DESTDIR作用&#xff1a;实例&#xff1a; 2. INCLUDEPATH作用&#xff1a;实例&#xff1a; 3. LIBS作用&#xff1a;用法&#xff1a;实例&#xff1a; 4. TEMPLATE作用&#xff1a;实例&#xff1a; 5. OTHER_FILES作用&#xff1a;实例&#xff1a;其它说明 6.…...

突破!自然语言强化学习(NLRL):一个可处理语言反馈的强化学习框架

本论文由伦敦大学学院、上海交通大学、布朗大学、布里斯托大学、新加坡国立大学以及萨里大学的研究者合作完成。 冯熙栋是论文第一作者&#xff0c;即将毕业于伦敦大学学院。目前是Google DeepMind的Research Scientist&#xff0c;主要研究方向包括强化学习与生成模型。刘博是…...

core Webapi jwt 认证

core cookie 验证 Web API Jwt 》》》》用户信息 namespace WebAPI001.Coms {public class Account{public string UserName { get; set; }public string UserPassword { get; set; }public string UserRole { get; set; }} }》》》获取jwt类 using Microsoft.AspNetCore.Mvc…...

【Springboot知识】springboot基础-事件

文章目录 简介一、事件类型二、事件处理机制三、自定义事件和监听器四、异步事件处理五、条件事件监听 如何使用1. 自定义事件2. 发布事件3. 监听事件4. 测试事件机制 ApplicationEventPublisher接口使用的设计模式 简介 在Spring Boot中&#xff0c;事件机制是一种基于观察者…...

经典视觉神经网络1 CNN

一、概述 输入的图像都很大&#xff0c;使用全连接网络的话&#xff0c;计算的代价较高&#xff0c;图像也很难保留原本特征。 卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;是一种专门用于处理具有网格状结构数据的深度学习模型。主要应用…...

解决跨域问题方案

跨域问题在前后端分离架构下尤为常见&#xff0c;是每个 Web 开发者都会遇到的核心问题。本文将通过原理解析、场景剖析、解决方案详解以及最佳实践等多个维度&#xff0c;帮助开发者全面理解并有效应对跨域问题。 目录 **一、跨域的本质****1. 同源策略****2. 同源策略的限制范…...

【python自动化五】接口自动化基础--requests的使用

python的接口请求可以用requests库&#xff0c;这个介绍就不多说了&#xff0c;网上说得很详细。 接下来直接记录下如何使用&#xff08;当然也不限于自动化的使用&#xff09; 1.安装requests requests也需要安装一下 pip install requests2.requests请求 1.常用的请求方法…...

文本三剑客——grep命令

介绍 作用 Linux grep (global regular expression) 命令用于查找文件里符合条件的字符串或正则表达式。 常用选项 -i&#xff1a;忽略大小写进行匹配。-v&#xff1a;反向查找&#xff0c;只打印不匹配的行。-n&#xff1a;显示匹配行的行号。-r&#xff1a;递归查找子目录…...

ASP 实例:深入解析与实战应用

ASP 实例&#xff1a;深入解析与实战应用 引言 ASP&#xff08;Active Server Pages&#xff09;是一种由微软开发的服务器端脚本环境&#xff0c;用于动态网页设计和开发。它允许开发者创建和运行动态交互性网页&#xff0c;如访问数据库、发送电子邮件等。本文将深入探讨AS…...

文件的操作

什么是文件 如何是数据持久化——保存在硬盘上(文件&#xff0c;数据库)磁盘上的文件是文件在程序设计中&#xff0c;我们一般谈的文件有两种&#xff1a;程序文件、数据文件程序文件&#xff0c;比如源文件&#xff08;.c文件&#xff09;读a文件写到b文件里&#xff0c;此时a…...

【简单谈谈UCIE PHY LSM链路训练】

UCIE PHY LSM链路训练 1 UCIE PHY LSM1.1 RESET1.2 SBINT1.3 MBINT1.3.1 MBINT.PARAM1.3.2 MBINIT.CAL1.3.3 MBINIT.REPAIRCLK1.3.4 MBINIT.REPAIRVAL1.3.5 MBINIT.REVERSALMB1.3.6 MBINIT.REPAIRMB 1.4 MBTRAIN1.5 LINKINIT1.6 ACTIVE1.7 L1/L21.8 PHY.RETRAIN1.9 TRAIN.ERROR…...

数学二常用公式(高等数学+线性代数)

目录 高等数学第一章 函数、极限和连续第二章 一元函数微分学第三章 一元函数积分学第四章 多元函数微分学第五章 多元函数积分学第六章 常微分方程 线性代数线性代数篇章涉及的知识内容及常用公式第一章 行列式第二章 矩阵第三章 向量第四章 线性方程组第五章 矩阵的相似化简第…...

【Java计算机毕业设计】Springboot+vue动物保护协会管理系统【源代码+数据库+LW文档+开题报告+答辩稿+部署教程+代码讲解】

源代码数据库LW文档&#xff08;1万字以上&#xff09;开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统&#xff1a;Window操作系统 2、开发工具&#xff1a;IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…...

鸿蒙面试---1208

HarmonyOS 三大技术理念 分布式架构&#xff1a;HarmonyOS 的分布式架构使得设备之间能够无缝协同工作。例如&#xff0c;它允许用户在不同的智能设备&#xff08;如手机、平板、智能手表等&#xff09;之间共享数据和功能。比如&#xff0c;用户可以在手机上开始编辑文档&…...

【论文阅读】一名系统研究者的攀登之路

作者&#xff1a;陈海波 陈海波是操作系统、系统结构、并行与分布式系统方向大牛&#xff0c;上海交通大学大牛团队 学习体会&#xff1a; 计算机系统论文准备周期较长&#xff0c;十有八九都是在解决新问题的路上~ 因此学习大佬的学习经验&#xff0c;少踩坑&#xff0c;把主…...

MySQL 索引(B+树)详解

MySQL 索引&#xff08;B树&#xff09;详解 MySQL逻辑架构对比InnoDB与MyISAM存储结构存储空间可移植性、备份及恢复事务支持AUTO_INCREMENT表锁差异全文索引表主键表的具体行数CRUD操作外键 sql优化简介什么情况下进行sql优化sql语句执行过程sql优化就是优化索引 索引索引的优…...

【不稳定的BUG】__scrt_is_managed_app()中断

【不稳定的BUG】__scrt_is_managed_app函数中断 参考问题详细的情况临时解决方案 参考 发现出现同样问题的文章: 代码运行完所有功能&#xff0c;仍然会中断 问题详细的情况 if (!__scrt_is_managed_app())exit(main_result);这里触发了一个断点很奇怪,这中断就发生了一次,代…...

护网蓝队日志分析

Windows日志分析 一、事件查看器 在「事件查看器」中&#xff0c;可以查看系统中记录的所有事件日志。操作步骤如下&#xff1a; 1、打开 Windows 事件查看器 1、使用Windows R快捷键打开「运行」对话框&#xff0c;输入eventvwr.msc&#xff0c;然后按回车键打开事件查看…...

滤波器设计(八)-McClellan-Parks design algorithm

步骤 Initialization: Choose an extremal set of frequences {ωi(0)}.Finite Set Approximation: Calculate the best Chebyshev approximation on the present extremal set, giving a value δ(m) for the min-max error on the present extremal set.Interpolation: Calc…...

ElasticSearch常见的索引_集群的备份与恢复方案

方案一&#xff1a;使用Elasticsearch的快照和恢复功能进行备份和恢复。该方案适用于集群整体备份与迁移&#xff0c;包括全量、增量备份和恢复。 方案二&#xff1a;通过reindex操作在集群内或跨集群同步数据。该方案适用于相同集群但不同索引层面的迁移&#xff0c;或者跨集…...

C#对Excel表csv文件的读写操作

C#对Excel表csv文件的读写 一、变量定义二、加载主窗口三、创建表头四、向表中添加数据五、从表中读取数据六、单击按钮向表中添加数据七、测试验证 一、变量定义 #region 变量定义 private string CurAppExeDir System.AppDomain.CurrentDomain.BaseDirectory; private strin…...

【MySQL】mysql服务器架构

目录 1、背景2、mysql服务器架构解释3、总结 1、背景 简单理解一下mysql的服务器架构。 2、mysql服务器架构解释 mysql的架构图如下&#xff1a; 主要分为三部分&#xff1a;客户端、服务端、存储引擎。接下来我们来解释一下各个部分&#xff1a; 客户端 用来连接mysql服务…...

Vue Web开发(三)

1. 添加el-menu样式 将Home.vue文件重新命名为Main.vue文件&#xff0c;本节涉及新的home目录和User目录下的index.js文件&#xff0c;因为侧边导航栏Aside和顶部Header是在每一个页面都存在的&#xff0c;所以重新命名为Main&#xff0c;而home文件夹下的index.js则对应系统首…...

Java项目实战II基于微信小程序的小区租拼车管理信息系统 (开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着城市化进程的加速&#xff0c;小区居民对于出行方…...

云安全:云计算安全

目录 云安全的定义和重要性 云安全的关键组成部分 云安全技术实现 云安全最佳实践 云安全的定义和重要性 云安全是指在云计算环境中保护数据、应用程序和相关服务不受威胁的一系列策略、技术和控制措施。随着云计算的快速发展&#xff0c;云安全已成为企业和个人用户最关心…...

git clone加速(亲测好用)

用公司网git clone特别卡&#xff0c;本以为宿舍网会好一点&#xff0c;回来下的时候也只有几十kb. 然后找到了一种方法&#xff0c;就是在原始下载命令前加一个gitclone 比如 git clone https://github.com/infiniflow/ragflow.git替换成 git clone https://gitclone.com/gi…...