软件工程 - 第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)简单消息
简单消息是没有区分同步和异步的消息。
简单消息用从一对象的生命线指向另一个对象的生命线的直线箭头来表示,箭头上面标出消息名。
消息是顺序图活动对象之间通信的惟一方式。UML中的消息使用了一些简洁的标记符
消息可以包含条件以便限制它们只在满足条件时才能发送。条件显示在消息名称上面的方括号中,如下图所示。
- (2)同步消息
消息的发送者把进程控制传递给消息的接收者,然后暂停活动,等待消息接收者的回应消息
你叫我去吃饭,我听到了就和你去吃饭;如果没有听到你就不停的叫,直到我告诉你听到了,才一起去吃饭: - (3)异步消息
消息的发送者将消息发送给消息的接收者后,不用等待回应的消息,即可开始另一个活动。
你叫我去吃饭,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。
- (1)简单消息
四、激活
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顺序图和协作图在语义上是等价的,两者可以相互转换。
课堂练习
请将图书馆还书处理的顺序图转换成通信图
相关文章:
软件工程 - 第8章 面向对象建模 - 3 - 动态建模
状态图 状态是指在对象生命周期中满足某些条件、执行某些活动或等待某些事件的一个条件和状况 。 案例一:描述烧水器在工作时的详细行为细节 “人就是一个类,而你”、我”、张三”等都是“人这个类的一个实例,站着”、“躺着等都是对象的一…...
Stable Diffusion AI绘画系列【16】:霸气侧漏的二次元武侠风
《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…...
第二证券:苹果市值重返3万亿美元,关键因素并非人工智能
当地时间12月5日,到美股收盘,苹果公司股价收涨2.1%,报193.42美元,收盘市值重返3万亿美元上方。 上一年12月,苹果公司市值曾在盘中时间短触及3万亿门槛,但收盘并未站稳,本年6月收盘时正式打破3万…...
西南科技大学C++程序设计实验六( 继承与派生一)
一、实验目的 1. 理解不同继承属性对派生类访问基类成员的区别 2. 掌握单继承程序编写 二、实验任务 1、调试下列程序,并在对程序进行修改后再调试,指出调试中的出错原因(该题中A为基类,B为派生类,B以public方式继承A) 重点:理解不同继承方式数据的访问权限,派生类…...
MySQL 性能优化
未完待续... 1. 分库、分表结构优化 1.1 数据库设计 不规范的数据库设计存在数据冗余以及插入、更新、删除异常问题。 规范化(Normalization)是数据库设计的一系列原理和技术,主要用于减少表中数据的冗余,增加完整性和一致性&…...
求职招聘小程序源码系统 全开源源代码:找工作+招人才 平台级别运营版 附带完整的搭建教程
在当前的求职招聘市场中,尽管存在大量的求职者和招聘者,但依然存在着信息不对称、沟通不畅等问题。小编来给大家分享一款求职招聘小程序源码系统,旨在提供一个高效、便捷、安全的求职招聘平台。 以下是部分代码示例: 系统特色功能…...
26、卷积 - 实际上是一个特征提取器
矩阵乘法的本质是特征的融合,卷积算法的本质是特征的提取。 回想一下之前所有介绍卷积的时候,描述了一种卷积运算的场景,那就是一个窗口在图片上滑动,窗口中的数值是卷积核的参数,也就是权值。 卷积的计算本质是乘累…...
web前端之vue3
MENU vue3响应式数据的判断、isRef、isReactive、isReadonly、isProxy、ref、reactive、readonlyvue3的生命周期vue3手写isRef、isReactive、isReadonly、isProxyvue3手写ref、深的refvue3手写shallowRef、浅的refvue3customRefvue3readonly与shallowReadonlyvue3toRaw与markRa…...
原来在C++的类中声明函数时可以不写参数名只写参数类型
2023年12月6日,周三上午 今天才发现原来可以这样写 在C的类中声明函数时可以不写参数名只写参数类型, 但是,在实现时必须写出参数名。 #include<iostream>class People { public:void move(int);void say(std::string);void doSomet…...
独孤思维:这里有蓝海项目,你要吗?
很多人,一看到蓝海项目,就趋之若鹜。 觉得红海项目太卷了,根本赚不到钱。 凡是认为蓝海项目不卷,可以做起来,做的轻松的,都是弱智和无能的表现。 你所能接触到的蓝海,根本就不是蓝海。 能够…...
外卖平台推荐算法的优化与实践
目录 引言 一、推荐算法的原理 二、推荐算法的挑战 三、实际案例分析 四、优化推荐算法的策略 五、结论 引言 在当今数字化社会,外卖平台成为了人们生活中不可或缺的一部分。为了提供更加个性化、高效的服务,外卖平台使用推荐算法成为了一项关键技…...
CONTROLLING VISION-LANGUAGE MODELS FOR MULTI-TASK IMAGE RESTORATION
CONTROLLING VISION-LANGUAGE MODELS FOR MULTI-TASK IMAGE RESTORATION (Paper reading) Ziwei Luo, Uppsala University, ICLR under review(6663), Cited:None, Stars: 350, Code, Paper. 1. 前言 像CLIP这样的视觉语言模型已经显示出对零样本或无标签预测的各种下游任务…...
HarmonyOS应用开发——页面
我们将对于多页面以及更多有趣的功能展开叙述,这次我们对于 HarmonyOS 的很多有趣常用组件并引出一些其他概念以及解决方案、页面跳转传值、生命周期、启动模式(UiAbility),样式的书写、状态管理以及动画等方面进行探讨 页面之间…...
Java流Stream使用详解(练习)
练习 第一题 数据过滤 定义一个集合,并添加一些整数1,2,3,4,5,6,7,8,9,10过滤奇数,只留下偶数,并将结果保存起来 import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.stream.Collectors…...
请介绍一下MySQL的存储引擎及其特点
问题:请介绍一下MySQL的存储引擎及其特点。 回答: MySQL是一个开源的关系型数据库管理系统,它支持多种存储引擎,每个存储引擎都有其自身的特点和适用场景。下面是对MySQL常见存储引擎的简要介绍: InnoDB: …...
Python---魔术方法
1、什么是魔术方法 在Python中,__xxx__()的函数叫做魔法方法,指的是具有特殊功能的函数。 2、__init__()方法(初始化方法或构造方法) 思考:人的姓名、年龄等信息都是与生俱来的属性,可不可以在生产过程中就赋予这些属性呢&…...
手把手教你注册意大利商标
在当今全球商业环境中,拥有一个独特的商标可以为企业在市场竞争中提供重要优势。商标作为品牌形象的核心,有助于吸引潜在客户,提升品牌价值,增加客户忠诚度。在意大利,商标注册同样具有重要意义,它能为企业…...
pandas详细笔记
一:什么是Pandas from matplotlib import pyplot import numpy as np import pandas as pdarange np.arange(1, 10, 2) series pd.Series(arange,indexlist("ABCDE")) print(series)二:索引 三:切片 位置索引切片(左闭…...
win11安装(未完待续)
学习补丁 test.bat 运行后需要重启 slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX slmgr /skms kms.03k.org slmgr /ato 文件扩展名 主题 性能设置 开始按钮靠左 任务栏对齐方式-靠左 必备软件 f.lux redshift 360管家 驱动精灵 edge c*lash(v2*ray不支持w…...
python之记录程序运行时长工具
python之记录程序运行时长工具 废话不多话,上代码 from datetime import datetime, timedelta import timestart_time datetime.now()while True:current_time datetime.now()elapsed_time current_time - start_timeformatted_time str(elapsed_time).split(…...
.Net core 6.0 升8.0
1 Update Visual Studio 2 3 用Nutget 更新不同套件版本 更新后结果如下:...
MacDroid Pro for Mac – 安卓设备文件传输助手,实现无缝连接与传输!
想要在Mac电脑上轻松管理和传输您的安卓设备文件吗?MacDroid Pro for Mac 是您的最佳选择!这款强大的文件传输助手可以让您在Mac上与安卓设备之间实现快速、方便的文件传输。 MacDroid Pro for Mac 提供了简单易用的界面,让您能够直接在Mac上…...
【EtherCAT详解】基于Wireshark的EtherCAT帧结构解析
写在前面 EtherCAT的报文比较繁琐,且一些参考书籍错误较多,且晦涩难懂,对于初学者,很难快速的入门。本文适用于有一定基础的研究者,如对报文有一些研究、对canopen协议有一定了解、并且对TwinCAT有了解的研究者。当然,对于初学者来说,也是很好的引导,少走很多弯路。本…...
C语言之程序的组成和元素格式
目录 关键字 运算符 标识符 姓名和标识符 分隔符 常量和字符串常量 自由的书写格式 书写限制 连接相邻的字符串常量 缩进 本节我们来学习程序的各组成元素(关键字、运算符等)和格式相关的内容。 关键字 在C语言中,相if和else这样的标识…...
HalconDotNet.HTupleAccessException:Index out of range
原因可能是没有生成hv_Qx的值,我这里是没有生成该值的区域。...
Delphi-线程
碰到身份证阅读器项目,直接放进trimmer里面读卡,导致主页面卡顿,就打算放进子线程里试一下,就有了这个尝试。 1.创建线程文件 直接点击左上角file新建other,delphi有自带的模版 这个勾选了,就是他会给你…...
WeakMap
WeakMap简介 作为es6一种新的数据结构,他是一种键值对的集合。与Map最大的区别有两个 1. 是其中的键必须是对象或非全局注册的符号。 全局注册的符号 const s1 Symbol.for(mySymbol) 非全局注册的符号 const s1 Symbol(mySymbol)了解Symbol.for 2. 不会创建对它…...
获取网络ppt资源
背景: 某度上有很多优质的PPT资源和文档资源,但是大多数需要付费才能获取。对于一些经济有限的用户来说,这无疑是个遗憾,因为我们更倾向于以免费的方式获取所需资源。 解决方案: 然而,幸运的是&am…...
从0到1构建智能分布式大数据爬虫系统
文章目录 1. 写在前面2. 数据获取挑战3. 基础架构4. 爬取管理5. 数据采集6. 增量与去重设计 【作者主页】:吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作! 【作者推荐…...
C语言速通笔记(41-62)
40.十六进制转义字符:\x6d才是合法的,前面的0不能写,而且 x 是小写 41.字符型和整型是近亲:两个具有很大的相似之处,所有的字符都有一个它对应的整形数 据的 ASCLL 的数值。如 char a 65 % …...
浙江网站建设报价/成都seo技术
摘要:创建并设置一个WebViewClient子类,回调对应的方法改变网页内容的呈现方式,比如:网页加载错误回调onReceivedError(),提交表单错误回调onFormResubmission(),拦截URL加载回调shouldOverrideUrlLoading(…...
联谊会总结网站建设对外宣传/国内新闻热点事件
坚持、冷静、忍耐 转载于:https://www.cnblogs.com/whxleem/archive/2005/05/16/156489.html...
有没有什么专门做兼职的网站/广州各区最新动态
是的,Amazon Fine Foods 评论数据集可以用于社交网络分析。如果要根据这个数据集来构建网络,可以将数据集中的用户作为网络的节点。如果要更细粒度地构建网络,可以将每一条评论作为一个节点,并将用户之间的关系用边来表示。例如&a…...
网站做京东联盟/广告投放策略
本文转自:http://www.cnblogs.com/miku/archive/2012/09/27/2706276.html 1. 映射路由 大型MVC项目为了扩展性,可维护性不能像一般项目在Global中RegisterRoutes的方法里面映射路由。 这里学习一下Nop是如何做的。 Global.cs . 通过IOC容器取得IRoutePu…...
长沙网站建设qq交流群/seo合作代理
Python中利用函数装饰器实现备忘功能 这篇文章主要介绍了Python中利用函数装饰器实现备忘功能,同时还降到了利用装饰器来检查函数的递归、确保参数传递的正确,需要的朋友可以参考下“备忘”的定义 “memoization”(备忘)这个词是由Donald Mic…...
电子商务网站建设也管理/近几天发生的新闻大事
asp.net编写登录注册代码 win7 asp.netms sql 2005vs2010(开发平台)数据库名userinfousername varchar(50) userpassword varchar(50) 连接数据库,写在类db.cs里面,其代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Web; usi…...