软件工程 - 第8章 面向对象建模 - 3 - 动态建模

状态图

  • 状态是指在对象生命周期中满足某些条件、执行某些活动或等待某些事件的一个条件和状况 。

案例一:描述烧水器在工作时的详细行为细节

在这里插入图片描述
“人就是一个类,而你”、我”、张三”等都是“人这个类的一个实例,站着”、“躺着等都是对象的一个状态。

  • 状态机图描述从一种状态迁移到另一种状态的控制流程,常用来对系统的动态特征进行建模。在大多数情况下,它用来对反应型对象(外部事件触发对象,对象接收到事件后产生响应)的行为建模
  • 一个状态图包含的元素有初始状态、终止状态、状态、迁移

状态机图的基本符号

在这里插入图片描述

  • 一个状态是由状态名、状态变量和活动3部分组成。活动部分列出了处于该状态时要执行的事件和动作。可以用3个标准事件:entry(进入动作) exit(退出动作) do(处于该状态中执行的动作)。

转换(迁移)的五要素

在这里插入图片描述
源状态:即受转换影响的状态
目标状态:当转换完成后对象的状态
事件:用来为转换定义一个事件,包括调用、改变、信号、时间四类事件
监护条件:布尔表达式,决定是否激活转换、
动作:转换激活时的操作

读图小结

在这里插入图片描述

  • 与状态off相关的转换有两个,其触发事件都是turnOn,只不过其监护条件不同。如果对象收到事件turnOn,那么将判断壶中是否有水;如果[没水],则仍然处于off状态;如果[有水]则转为on状态,并执行“烧水”动作
  • 而与状态on相关的转换也有两个,如果“水开了”就执行turnOff,关掉开关;如果烧坏了,就进入了终态了

案例二:带有复杂转换的状态图

在这里插入图片描述

复杂转换

在这里插入图片描述

  • 外部迁移是一种改变对象状态的迁移。外部迁移用从源状态到目标状态的箭头表示。如图10-15所示即描述了火车上卫生间的简单状态迁移该卫生间存在3个状态,包含5个外部迁移
    在这里插入图片描述
  • 内部迁移是指状态不变的情况下,事件引发的动作。
    内部迁移自始至终都不离开源状态,所以不会产生入口动作和出口动作。因此,当对象处于某个状态进行一些动作时,可以把这些动作看成是内部迁移。
    在图10-16中,当处在登录口令状态(Enter Password)时,以下的两个动作都不会改变当前的状态。
    (1)用户设置密码时,当前状态不会发生改变,可以把这一动作建模为内部迁移:set/reset password。
    (2)显示帮助时,当前状态也不会改变,可以把这一动作建模为内部迁移:help/show help。
    在这里插入图片描述
  • 各种转换的区别
    进入和退出转换:当进入一个状态时,执行某个动作;或当退出某个状态时,执行什么动作。这时就可以使用进入和退出转换来表示
    内部转换:用来处理一些不离开该状态的事件
    在这里插入图片描述

活动与事件

活动:当对象处于一个状态时,它一般是空闲的,在等待一个事件的发生。但是某些时间,你可能希望描述个正在进行的活动。在处于一个状态的同时,对象做着某些工作,并一直继续到被某个事件中断。语法表示:do/动作名
延迟事件:延迟事件是一种特殊的事件,它是指该事件不会触发状态的转换,当对象处于该状态时事件不会丢失,但会被延迟执行。例如,当E-mail程序中正在发送第一封邮件时,用户下达发送第二封邮件执令就会被延迟,但第一封邮件发送完成后,这封邮件就会被发送。这种事件就属于延迟事件。语法表示:事件/defer
变化事件:用关键字when,后面跟上布尔表达式。例如when(temperature)>120)/alerm( )
时间事件:用after或when

复合(组合)状态

状态分为简单状态和复合(组合)状态。包含子状态的状态称为复合状态。复合状态包括顺序状态、并发状态和历史状态
如果一个组成状态的子状态对应的对象在其生命周期内的任何时刻都只能处于一个子状态,也就是说状态机图中多个子状态是互斥的,不能同时存在,这种子状态被称为顺序状态或互斥状态或不相交状态在顺序状态中最多只能有一个初态和一个终态

案例三:顺序状态

在这里插入图片描述
ADSL拨号过程的状态机,它将拨号过程封装成一个组合状态“连接ISP”。最初的状态是“未连接”,当用户发出指令时,将进入“连接ISP”状态,如果在此过程中用户取消拨号或发现无拨号音,无应答音时将回到“未连接’状态,如果收到应答音,则进入“已连接”状态。
建立大致印象后再分析组合状态“连接ISP”,会发现组合状态中也包含一个初态和终态,这是复杂组合状态所包含的状态机的初态和终态

案例四:并发复合状态图

有时组成状态有两个或多个并发的子状态,此时称组成状态的子状态为并发子状态。
如果并发子状态中有一个子状态机比其它并发子状态先到达终态,先到的将等待,直到所有子状态到达终态。
在这里插入图片描述

历史状态
  • 历史状态用于在复杂的组合中标记转移过后需要返回的状态。
  • UML状态机图中历史状态分为浅历史状态(历史状态)和深历史状态(详细历史状态)两种。
  • 当一个历史状态记忆了各个嵌套层次的子状态时这个历史状态就是深的(deep)。如果它只记忆了最高层次嵌入的子状态,那么就说这个历史状态是浅的(shallow)。
    在这里插入图片描述
  • 案例五:历史状态案例
    “一个圆圈中加上字母H”,用来表示历史状态的。它的含义是:当从状态“结账”和“显示购物车”返回子状态“显示索引信息”时,将进入的是离开时的历史状态。也就是说,转到购物车或结账区之后,再回到“浏览目录”的页面时,其中的内容是不变的,仍然保留原来的信息。

练习

课堂练习一

图书管理系统中的图书主要有四种状态:新书进入流通状态、待借出状态、已借出状态、退出流通状态。对于购买的图书,图书管理员编制条码,完成入库操作后,图书进入流通状态。图书管理员将已编制条码的图书存放到规定的藏书地点,即图书上架此时图书进入待借出状态。当读者将图书借出后,图书便进入已借出状态。当读者归还所借图书后,图书又返回待借出状态。如果图书丢失或损坏不能继续借阅,则退出流通,此时图书进入退出流通状态。
在这里插入图片描述

练习二:

根据下面的描述,绘制一副状态图:电话初始时处于“空闲”状态,当听筒被拿起后处于“激活”状态。听筒被拿起后,电话等待拨号,若在30秒之内拨号,电话将进入“拨号”状态,如果拨号正确则电话进入“正在接通中”状态,如果拨号不正确则会一直听到提示错误拨号。若拿起听筒30秒之内不拨号,则电话处于“超时”状态。在“正在接通中”状态下,若对方占线则电话进入“忙”状态,若对方不占线则进入“接通”状态,对方拿起听筒后,电话处于“通话”状态,若在通话中对方挂断则进入“挂起”状态。
在这里插入图片描述

活动图

UML分结构型图和行为型图,结构是静态的,有类图、对象图、构件图、部署图、包图。行为是动态的,有活动图、状态图、顺序图、通信图、用例图、时序图。每种图是从需求或设计的不同层面来描述模型,以便于所有参与者通过图形化的方式从各个角度了解产品。
活动图描述的是从一个活动到另一个活动的控制流,描述活动的顺序,活动表示处理事物的动作和状态。

案例1:

活动描述:小张每天醒来后先看表是否到起床时间,如果没到继续睡觉;如果到了,抓紧时间起床,洗漱完毕后吃早餐,饭后出门。
活动图如下:
在这里插入图片描述
上图绘制的就是小张早晨日常生活的活动图,通过这种图形化模型可以把动作的流程性表达的更加清楚,动作的内容、流程、判断、交互、并发都能很好的表达。

活动图分析:

  • 开始与结束:活动图只能有一个起点,但可以有多个终点的。
    在这里插入图片描述
  • 分支判断:菱形代表分支判断,这个与流程图的分支判断是一样的。上面的分支判断意思是:睡醒后看时间是否到上班时间,如果没到,继续睡觉;如果到了,起床洗漱。
  • 分叉与汇合:分叉与汇合必须组合使用,表示并发动作。分叉表示一个活动完成后产生后续的多个并行的活动;汇合表示多个活动全部完成后再进行下一个活动。分叉是一个指入多个指出,汇合是多个指入汇集后,一个指出。分叉与汇合间的活动是并行执行的,最后都执行完后统一汇合进入下一活动。
    在这里插入图片描述
  • 活动:活动用圆角矩形表示,活动间的控制流用实体箭头表示。活动表示流程中的动作,活动可大可小,活动可以继续拆分成更细小的活动。
    在这里插入图片描述

案例2:

活动描述:产品经理的工作流程,产品在立项前,先要分析市场,进行产品定位和可行性分析;项目成立后,要进行需求分析,通过需求分析编写出商业需求文档、市场需求文档和产品需求文档,之后,根据需求绘制原型产品设计、流程分析。这些工作完成后进入开发阶段:架构设计、概要设计、详细设计、代码开发、软件测试。
以上活动整理成活动图如下:
在这里插入图片描述
解读“产品生命周期”活动图:
上图是产品生产的整个生命周期(生产不包括产品的维护及运营),做产品前先要为产品进行定位,指明产品方向,之后可行性研究(技术可行性、经济可行性和社会可行性),这三种可行性是并行执行的。
项目立项后,对产品进行需求分析,需求阶段会出三个文档性成果物:商业需求文档(BRD)、市场需求文档(MRD)、产品需求文档(PRD)。在上图中把这三个文档用长方形框表示,长方形框表示对象,意思是经过需求分析后生成了的三个文档对象。对象可以做为下一个活动的输入,也可以是活动的输出,输入与输出的对象可以是一个或多个。之后,再经过原型设计、技术设计、开发、测试,最后产品上线。

对象

对象用长方形框表示,对象的名称是名词。活动可以有多个输入和输出,对象可以成为活动的输入
在这里插入图片描述

案例3:

  • 活动描述:客户在购物网站上购物并下单,支付后生成送货单,供应商送货,送货后本次订单结束。
  • 像这种情况涉及到客户、系统与供应商间的交互,客户的活动有下单、选择支付;系统生成送货单并收款:供应商活动有送货及修改订单动作。如使用之前的活动图形式就很难表达出客户、供应商与系统间的活动,如想要更好的表达角色与活动间的关系,就需要把角色加进来,在这里叫做泳道
    在这里插入图片描述
    泳道:上图中的客户、系统、供应商所属的大的长方形框就为各个对象的泳道,泳道内的活动表示此对象所属的动作,通过跨泳道的信息交互可以更好的表达出对象间与活动间的信息交互。泳道名应为对象名,既然是对象名,所以泳道名应为名词。

带对象流的活动图

1、当用户下订单时,将创建一个Order类的实例用来存放订单的信息,该类还包含这对应的Oderitem
2、当“生成送货单”时,将根据Order类的实例创建多个DeliverOrder(送货单)的实例
3、当“修改订单项状态”之后,DeliverOrder对象的状态将变成finished
在这里插入图片描述

案例4:

小张去必胜客饭店吃饭,发现要排队等待,他决定如果15分钟还轮不到就到隔壁肯德基吃饭,请绘制小张吃饭的活动图。
在这里插入图片描述

  • 在“小张”这个泳道中,两个控制流中只有一个会控制流会执行。在时间信号发生之间,收到当必胜客饭店发出“有空位”信号,小张接收到“有空位”信号时,小张才会执行“进入必胜客”的活动:否则小张会执行“进入肯德基”
  • (1)时间信号:时间信号是用来表示随着时间的流逝而自动发出的信号,时间信号表示,当时间到达某个特定的时刻时,就会触发时间事件,例如每天10点时,闹钟开始响铃,10点钟发出响铃的信号就是时间信号。
  • (2)发送信号:也就是发出一个异步消息,对于发送者而言,就是发送信号;对于接收到这种消息的目标而言,就是“接收信号’。
  • (3)接收信号:就是接收者收到的一个外部信号。

其他活动图简介

标识参数的活动图

参数是一个对象节点,用一个小矩形框表示,有输入参数、输出参数和错误参数。
在这里插入图片描述
表示活动“计算利息”节点将接受三个输入参数:本金(principal)、利率(rate)、年限(year);如果传入的参数合法,那么将输出参数利息值(accrual);如果输入了错误的参数,则产生异常。

标识扩展区的活动图

在活动图中,有时需要表示一个活动需要多次执行的情况。例如在图中,有三个活动节点“供应商送货”,“修改订单项状态”以及分支“所有订单项已送货完毕”都需要多次执行。 由于一个订单对应多个“送货单”,因此通过“分支”来表示其循环控制流,这样表示活动,并不准确。我们采用了扩展区来表示活动节点的循环执行。
在这里插入图片描述

嵌套活动图

如果一个动图又包含了子活动图,则称这种图为嵌套活动图(也称为主活动图)。当一个活动图很复杂,我们可以把其中的一组相关活动看作一个子活动图,这时,在嵌套活动图中,用子活动图的简图代替子活动图。我们可以将子图单独放在一个图中详细说明它的活动,然后,在嵌套活动图引用子活动图。
在这里插入图片描述

练习

课堂练习1

销售合同签订后,要进行核对。如果发现错误,则终止履约;如果没有错误,则要核对货物清单确定是否有货,还要核对付款单确定对方是否已经付款,只有这两项都完成,才可以发货。如果无货或对方尚未付款,则终止履约。

在这里插入图片描述

课堂练习2

公司业务员打电话给客户,确定一个约定,如果约定的地点是在公司内部,那么行政部的同事需要为会面安排一间会议室,如果约定的地点是在公司外部,那么业务员需要用笔记本准备一份陈述报告。业务员与客户在约定的时间和地点见面,业务员准备好会议用纸,如果会议产生一个陈述,业务员需要记录下来备案。请绘制普通活动图和带泳道活动图
在这里插入图片描述
在这里插入图片描述

活动图小结

• 讲解了活动节点、初始节点和活动终点、转换、分支与监护条件、分岔与汇合等基本建模元素;逐步引出了泳道、对象流等控制流逻辑
• 介绍了其他复杂活动图

顺序图(时序图)

案例1 赤壁之战

  • 赤壁之战是用例,其用例图为:
    在这里插入图片描述
    • 曹操举兵南下,刘备请孔明拟定策略,派遣关羽和张飞防守荆州,同时,派遣孔明联络
    • 孙权共同对抗曹操。孔明联合孙权,借东风,火烧曹军于赤壁。
  • 各人物的主要操作:类图表示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

顺序图的相关概念

交互图表示类(对象)如何交互来实现系统行为。交互图具有如下两种形式。
1)顺序图(时序图)
它描述对象按时间顺序的消息交换过程,它体现出系统用例的行为。
2)通信图
它描述对象间的组织协作关系,它也可体现出系统用例的行为。

一、顺序图的概念

顺序图是两种类型的交互图之一。顺序图用来建模以时间顺序安排的对象交互,并且把用例行为分配给类(对象)。它是用来显示参与者如何采用若干顺序步骤与系统对象交互的模型

  • 顺序图样式
    在这里插入图片描述
    1、对象的符号
    时序图中的每个对象显示在单独的列里。
    在这里插入图片描述

2、对象的左右排列位置
对象的左右顺序并不重要,但是为了图面的清晰整洁起见,通常应遵循以下两个原则:
(1)把交互频繁的对象尽可能地靠拢
(2)把初始化整个交互活动的对象(有时是一个参与者)放置在最左边

二、生命线(lifeline)

表示对象的生存时间。生命线从对象创建开始到对象销毁时终止。
在这里插入图片描述

三、消息

  1. 消息的概念
    对象之间的交互是通过互发消息来实现的。一个对象可以请求(要求)另一个对象做某件事件。
    消息从源对象指向目标对象。消息一旦发送便将控制从源对象转移到目标对象。
    时序图中,消息的阅读顺序是严格自上而下的
  2. 消息的类型与符号
    在这里插入图片描述
    • (1)简单消息
      简单消息是没有区分同步和异步的消息。
      简单消息用从一对象的生命线指向另一个对象的生命线的直线箭头来表示,箭头上面标出消息名。
      在这里插入图片描述
      消息是顺序图活动对象之间通信的惟一方式。UML中的消息使用了一些简洁的标记符
      消息可以包含条件以便限制它们只在满足条件时才能发送。条件显示在消息名称上面的方括号中,如下图所示。
      在这里插入图片描述
    • (2)同步消息
      消息的发送者把进程控制传递给消息的接收者,然后暂停活动,等待消息接收者的回应消息
      在这里插入图片描述
      你叫我去吃饭,我听到了就和你去吃饭;如果没有听到你就不停的叫,直到我告诉你听到了,才一起去吃饭:
    • (3)异步消息
      消息的发送者将消息发送给消息的接收者后,不用等待回应的消息,即可开始另一个活动。
      在这里插入图片描述
      你叫我去吃饭,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。

四、激活

1、激活的概念
当一个对象没有被激活期时,该对象处于休眠状态,什么事都不做,但它仍然存在,等待新的消息来激活它。
当一条消息被传递给对象的时候,它会触发该对象的某个行为,这是就说该对象被激活了。
当一个对象处于激活时,表明该对象正在执行某个动作
2、激活的符号
激活用一个细长的矩形框(在生命线上)表示。
在这里插入图片描述
矩形框的高度表示对象执行一个操作所经历的时间段,矩形的顶部表示动作的开始,底部表示动作的结束。
对象接收消息后可以由自己的某个操作来完成,也可以通过其他对象的操作来完成。

实例:图书馆借书处理的顺序图

在这里插入图片描述

  • 用例:借书
  • 参与者:管理员,借阅者
  • 基本事件流:
    1.借阅者带着借书证和书来到柜台。
    2.管员输入借阅者的借书证编码。
    3.系统检查借阅者的合法性。
    4.系统显示借阅者的信息。
    5.系统检查借阅者的借阅信息。
    6.管员输入所借图书的条码。
    7.系统显示所借图书的信息,并登记图书。
    管员重复6~7步,直到结束。
    8.系统登记借阅者的本次借阅信息,并显示。
  • 扩展事件流:
    3a.借阅者身份非法,提示,本次拒借。
    5a.该借阅者所借图书中有超期的,则提示,本次拒借。
    5b.该借阅者所借图书数量超过了上限,则提示,本次拒借。
    ①识别交互过程。
    读者在借书时,先由管理员把借书证上的读者编号扫描给系统,系统检查这个读者的借书证合法信息,如果不合法,则系统给出提示,如果正确系统返回读者的身份
    信息,以及读者的借阅信息。
    如果读者借书数量没有超过借书的上限,则把要借书的图书编号输入系统,系统登记借书信息,并返回借书成功信息,借书过程完成。
    ②识别参与交互过程的对象;
    在这里插入图片描述
    ③ 为每一个对象设置生命线,并确定对象的存在期限;
    ④从引发交互的初始消息开始,在对象生命线上依次画出交互的消息
    ⑤绘制顺序图
    在这里插入图片描述

顺序图的其他技术

1.创建对象
创建对象的标记符如下图中的示例所示。有一个主要步骤用来把“create’‘消息发送给对象实例。对象创建之后就会具有生命线,就像顺序图中的任何其他对象一样。现在可以像顺序图中的其他对象那样来使用该对象发送和接收消息。在处理新创建的对象,或者处理顺序图中的任何其他对象时,都可以发送“destroys’”消息来删除对象。若要想说明某个对象被销毁,需要在被销毁对象的生命线上放一个X字符
在这里插入图片描述
2.分支和从属流
有两种方式来修改顺序图的控制流:使用分支和使用从属流。控制流的改变是由于不同的条件导致控制流走向不同的道路。

  • 分支是指从同一点发出的多个消息并指向不同的对象,根据条件是否互斥,可以有条件和并行两种结构
    在这里插入图片描述
    注意:消息的开始位置是相同的,分支消息的结束高度也是相同的。
  • 从属流指的是从同一点发出多个消息指向同一个对象的不同生命线
    在这里插入图片描述

结构化控制结构

  • 对于复杂的控制流可以用组合片段来表示。例如:
    在这里插入图片描述
    上图展示了一个简化了的例子,其中有一些控制操作符。用户启动这个序列。第一个操作符是循环操作符,圆括号内的数字(1,3)表示循环执行的最少次数和最多次数。因为最少是一次,所以在检测条件之前主体至少执行一次。在循环内,用户输入密码,系统验证它。只要密码不正确,那么该循环就会继续。但是,如果超过了三次,那么无论如何循环都会结束。
    下一个操作符是可选操作符。如果密码是正确的,那么就执行这个操作符的主体;否则就跳过该顺序图后面的部分。这个可选操作符的主体内还包括了一个并行操作符。正如图中所表明的,操作符可以嵌套。
    并行操作符有两个分区:一个让用户输入帐号,另一个让用户输入数额。因为这两个分区是并行的,所以没有规定应该按照什么次序输入这两者,按照什么次序输入都可以。需要强调的是,并发并不总是意味着物理上的同时执行。并发其实是说两个动作没有协作关系,而且可按任意次序发生。如果它们确实是独立的动作,那么它们就可以交叠;而如果它们是顺序的动作,那么它们可以按任意的次序发生。
    一旦并行操作符的两个动作都被执行过,那么该并行操作符也就执行完毕。在可选操作符中的下一个动作是银行向给用户交付现金。至此,顺序图执行完毕。

  • 条件判断:标记为alt,用于描述if…else…这种结构
    在这里插入图片描述

  • 可选:只是一个if,没有else if或者else,标记为opt。
    在这里插入图片描述

  • 循环:
    循环的标记为:loop
    例如:下图中[m.n]是指至少执行m次,最多执行n次
    在这里插入图片描述

  • 并发:标记为par,描述多线程的情况
    在这里插入图片描述

在这里插入图片描述

建立顺序图的步骤

①从用例中识别交互过程;
②识别参与交互过程的对象:
③为每一个对象设置生命线,并确定对象的存在期限;
④从引发交互的初始消息开始,在对象生命线上依次画出交互的消息;
⑤如果需要,可以给消息增加时间约束,以及前置条件和后置条件

课堂练习

• 某中学的计算机分为三种:教师个人办公计算机、教室公用计算机和实验室计算机。现要为该学校开发一套设备报修系统,具体流程为:
1、故障计算机负责人登录网上的报修系统
2、填写报修信息:包括报修人、联系方式、地点、故障设备、故障描述、预约上门时间等。
3、电教主任在后台接到申请后,打印保修单,委派维修人员
4、维修人员维修后,报修人在报修单上签字确认
5、报修人员登录系统对此次维修做出评价
6、期间,报修人在提交报修申请,但电教主任未受理时,可以取消报修申请
7、报修结果分为以下几种:修好、维修好、报修人取消和故障不能重现等。
请绘制出该系统中“报修”用例的顺序图。
在这里插入图片描述

通信图(协作图)

案例1:赤壁之战思考:孔明向哪些对象发送了消息?又接收了哪些对象发送的消息?
在这里插入图片描述

通信图的构成

  • 对象
    通信图与顺序图中的对象的概念是一样只不过在通信图中,无法表示对象的创建和撤销,所以对于对象在图中的位置没有限制
    在这里插入图片描述

  • 通信图中链的符号和对象图中链所用的符号是一样的,即一条连接两个类角色的实线
    对于链接还可以加上“角色”与“约束;在链角色上附加的约束有global(全局),local(局部),parameter(参数),self(自身),broadcast(广播):
  • 消息
    在这里插入图片描述

实例:图书馆借书处理的协作图

在这里插入图片描述

顺序图与通信图的异同

1顺序图和协作图都属于交互图,用来描述对象之间的动态关系。
2顺序图强调消息的时间顺序,协作图强调参与交互的对象的组织关系。
3顺序图和协作图在语义上是等价的,两者可以相互转换。

课堂练习

请将图书馆还书处理的顺序图转换成通信图
在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/211302.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Edge 旧版本回退

微软官网 下载策略文件 下载后,解压打开 cad 包,把里面的 Windows\ADMX\ 下 3 个 *.admx 文件解压到 C:\Windows\PolicyDefinitions Windows\ADMX\zh-CN 下 3 个 *.adlm 文件解压到 C:\Windows\PolicyDefinitions\zh-CN Windows 搜索 gpedit&#xff…

Swin Transformer实战图像分类(Windows下,无需用到Conda,亲测有效)

目录 前言 一、从官网拿到源码,然后配置自己缺少的环境。 针对可能遇到的错误: 二、数据集获取与处理 2.1 数据集下载 2.2 数据集处理 三、下载预训练权重 四、修改部分参数配置 4.1 修改config.py 4.2 修改build.py 4.3 修改units.py 4.4 修…

LeetCode的几道题

一、捡石头 292 思路就是: 谁面对4块石头的时候,谁就输(因为每次就是1-3块石头,如果剩下4块石头,你怎么拿,我都能把剩下的拿走,所以你就要想尽办法让对面面对4块石头的倍数, 比如有…

python常用函数

1.len函数求字符串长度 例如 2.input函数为输入 input里边可以是任意类型的数据 但是它返回的值是一个字符串(即现在只能做出打印那些操作) 想做出其他操作的话,要强制类型转换 例,用str转换为字符串(类似的还有float),字符串可以互相拼接 所以要记得用了input函数后要强制…

十六进制数列求和

高精度数组的集大成 做的时候在和高中同学叙叙旧&#xff0c;差点寄掉 代码如下&#xff1a; #include<stdio.h> void expand(int len); const char hexadecimal[17] "0123456789ABCDEF"; int result[20], mid[20], l_result[100];int main(void) {char tm…

深度学习常见回归分支算法逐步分析,各种回归之间的优缺点,适用场景,举例演示

文章目录 1、线性回归&#xff08;Linear Regression&#xff09;1.1 优点1.2 缺点1.3 适用场景1.4 图例说明 2、多项式回归&#xff08;Polynomial Regression&#xff09;2.1 优点2.2 缺点2.3 适用场景2.4 图例说明 3、决策树回归&#xff08;Decision Tree Regression&#…

疫苗接种(链表练习)

很明显&#xff0c;数组也可以做&#xff0c;但是我想练习链表 这道题我上交的时候&#xff0c;同一份代码&#xff0c;三个编译器&#xff0c;三个成绩&#xff0c;有点搞心态 代码如下&#xff1a; #include<stdio.h> #include<math.h> #include<stdlib.h&…

线上CPU飙高问题排查!

https://v.douyin.com/iRTqH5ug/ linux top命令 top 命令是 Linux 下一个强大的实用程序&#xff0c;提供了系统资源使用情况的动态、实时概览。它显示了当前正在运行的进程信息&#xff0c;以及有关系统性能和资源利用情况的信息。 以下是 top 命令提供的关键信息的简要概述…

面试数据库八股文十问十答第一期

面试数据库八股文十问十答第一期 作者&#xff1a;程序员小白条&#xff0c;个人博客 1.MySQL常见索引、 MySQL常见索引有: 主键索引、唯一索引、普通索引、全文索引、组合索引(最左前缀)主键索引特点&#xff1a;唯一性&#xff0c;非空&#xff0c;自增&#xff08;如果使用…

Linux中的UDEV机制与守护进程

Linux中的UDEV守护进程 udev简介守护进程守护进程概念守护进程程序设计守护进程的应用守护进程和后台进程的区别 UDEV的配置文件自动挂载U盘 udev简介 udev是一个设备管理工具&#xff0c;udev以守护进程的形式运行&#xff0c;通过侦听内核发出来的uevent来管理/dev目录下的设…

cnpm 安装后无法使用怎么办?

问题的原因 cnpm 安装成功&#xff0c;但是却无法使用&#xff0c;一般分为两种情况&#xff0c;一种是提示无法执行命令&#xff0c;另一种是可以执行但是执行时报错&#xff0c;下面分别说明遇到这两种情况的解决方案。 解决方案 问题一&#xff1a;无法执行相关命令 首先…

零基础打靶—CTF4靶场

一、打靶的主要五大步骤 1.确定目标&#xff1a;在所有的靶场中&#xff0c;确定目标就是使用nmap进行ip扫描&#xff0c;确定ip即为目标&#xff0c;其他实战中确定目标的方式包括nmap进行扫描&#xff0c;但不局限于这个nmap。 2.常见的信息收集&#xff1a;比如平常挖洞使用…

jionlp :一款超级强大的Python 神器!轻松提取地址中的省、市、县

在日常数据处理中&#xff0c;如果你需要从一个完整的地址中提取出省、市、县三级地名&#xff0c;或者乡镇、村、社区两级详细地名&#xff0c;你可以使用一个第三方库来实现快速解析。在使用之前&#xff0c;你需要先安装这个库。 pip install jionlp -i https://pypi.douba…

LeetCode - 965. 单值二叉树(C语言,二叉树,配图)

二叉树每个节点都具有相同的值&#xff0c;我们就可以比较每个树的根节点与左右两个孩子节点的值是否相同&#xff0c;如果不同返回false&#xff0c;否则&#xff0c;返回true。 如果是叶子节点&#xff0c;不存在还孩子节点&#xff0c;则这个叶子节点为根的树是单值二叉树。…

【算法通关村】链表基础经典问题解析

【算法通关村】链表基础&经典问题解析 一.什么是链表 链表是一种通过指针将多个节点串联在一起的线性结构&#xff0c;每一个节点&#xff08;结点&#xff09;都由两部分组成&#xff0c;一个是数据域&#xff08;用来存储数据&#xff09;&#xff0c;一个是指针域&…

每日一练:冒泡排序

1. 概述 冒泡排序&#xff08;Bubble Sort&#xff09;也是一种简单直观的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换&#xff0c;也就是说该数列已经排…

【集合篇】Java集合概述

Java 集合概述 集合与容器 容器&#xff08;Container&#xff09;是一个更广泛的术语&#xff0c;用于表示可以容纳、组织和管理其他对象的对象。它是一个更高层次的概念&#xff0c;包括集合&#xff08;Collection&#xff09;在内。集合&#xff08;Collection&#xff0…

CSS 选择器优先级,!important 也会被覆盖?

目录 1&#xff0c;重要性2&#xff0c;专用性3&#xff0c;源代码顺序 CSS 属性值的计算过程中。其中第2步层叠冲突只是简单说明了下&#xff0c;这篇文章来详细介绍。 层叠冲突更广泛的被称为 CSS选择器优先级计算。 为什么叫层叠冲突&#xff0c;可以理解为 CSS 是 Cascadi…

HarmonyOS开发工具安装

目录 下载与安装DevEco Studio DevEco Studio下载官网&#xff0c;点击下载 下载完成后&#xff0c;双击下载的“deveco-studio-xxxx.exe” 进入DevEco Studio安装向导 选择安装路径 如下安装选项界面勾选DevEco Studio后&#xff0c;单击“Next” 点击Install 安装完…

什么是Daily Scrum?

Daily Scrum&#xff08;每日站会&#xff09;&#xff0c;Scrum Master要确保这个会在每天都会开。这个会的目的就是检查正在做的东西和方式是否有利于完成Sprint目的&#xff0c;并及时做出必要的调整。 每日站会一般只开15分钟&#xff0c;为了让事情更简单些&#xff0c;这…