上一次写过一篇 UML | 类图 相关的文章,平时规范开发会用的上,或者是写什么文档,就还是需要画图,就像毕业设计就是如此。希望能够帮助到大家。
注:本文中所用画图软件为 Microsoft Visio .
时序图更多只是一种叫法,平常我们所说的顺序图、序列图也是在称呼它。
时序图是基于交互的对象行为建模,是 UML 用于描述对象之间信息的交互过程的方法,是描述对象间协作关系的模型。
时序图用于捕获系统运行中对象之间有时间顺序的交互,是由生命线和消息组成。
时序图将交互关系表示为一个二维图。纵向是时间轴,时间沿竖线向下延伸。横向轴代表了在协作中各独立对象的类元角色。类元角色用生命线表示。当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时,生命线是一个双道线。消息用从一个对象的生命线到另一个对象生命线的箭头表示。箭头以时间顺序在图中从上到下排列。
这个角色可以是用户、外部系统、机器等等。
在 visio 软件中用下图表示:
关于对象的命名:
生命线:在时序图中表示为从对象图标向下延伸的一条虚线,表示对象存在的时间。
在生命线的虚线上可以用活动条来表示某种行为的开始和结束,一般用小矩形来表示。
在 visio 软件上称之为激活。
注:但是在这里我需要强调的是在生命线上并非一定要用活动条来表示执行的发生,活动条的加入是的执行发生更形象化,但是在繁多复杂的时序图中,活动条也会使图示变得更加复杂难以绘制,这种情况下,倾向于不使用活动条。
什么是消息?
在面向对象的分析和设计中,对象的行为也被称为消息,因为对象之间的行为的交互擢用也可以看成是对象之间发送消息实现的。通常,当一个对象调用另一个对象中的行为时,即完成了一次消息传递。
时序图中关注生命线之间的通信,这些通信就是对象发送的消息。UML用生命线间带有实心箭头的实现表示消息,每条消息从发送对象指向接收对象。
例如:
另外消息中还细分为了简单消息、同步消息和异步消息。
简单消息:就表示控制如何从一个对象发送给另一个对象,并不包含控制的细节。
同步消息:意味着阻塞和等待。如:A向B 发送一个消息后,对象A 必须一直等到B执行完成后返回才能继续往下执行。这就是同步消息。
异步消息:就意味着是非阻塞。如:A向B发送消息后,直接可以执行下面代码,无需等待B的执行。
同步消息用实心箭头表示,异步消息用开放式箭头表示。
自我调用消息:
消息的返回值:
UML在2.0时在时序图中加入了交互框。交互框用来解决交互执行的条件和方式,它允许在序列图中直接表示逻辑组件,用于通过指定条件或子进程的应用区域,为任何生命线的任何部分定义特殊条件和子进程。组合片段共有13种,名称及含义如下:
但是我们只抽取几个常用的出来说一下,但本质上的用法是一样的。
简单说就是 将 if/else 在图示中表示出来了。
包含一个可能发生或不发生的序列;
只要当我成绩score小于60时,老妈打我这件事情肯定会发生。
大于就不会发生。
片段重复一定次数,可以在临界中指示片段重复的条件。
理论就说到这里哈,我们来接着说个例子。
下图简述了SpringMVC的执行流程,这次我们的任务就是将它转换为时序图来表示。
画成时序图如下:
个人认为画图真的很有作用,尤其是关乎我们自己设计什么东西时,画出相关图之后,思路会清晰很多。
今天的文章就到这里了。
你好,我是博主
宁在春.如若在文章中遇到疑惑,请留言或私信,或者加主页联系方式,都会尽快回复。
如若发现文章中存在问题,望你能够指正,不胜感谢。
如果觉得对你有所帮助的话,来个一键三连?啦,?xdm
参考:
UML序列图总结:http://www.trufun.net/UML/UMLwendang/2016/0115/138.html
统一建模语言UML(第二版)清华大学出版社
我遵循了教程http://gettingstartedwithchef.com/,第1章。我的运行list是"run_list":["recipe[apt]","recipe[phpap]"]我的phpapRecipe默认Recipeinclude_recipe"apache2"include_recipe"build-essential"include_recipe"openssl"include_recipe"mysql::client"include_recipe"mysql::server"include_recipe"php"include_recipe"php::modul
给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最
RSpec似乎按顺序匹配方法接收的消息。我不确定如何使以下代码工作:allow(a).toreceive(:f)expect(a).toreceive(:f).with(2)a.f(1)a.f(2)a.f(3)我问的原因是a.f的一些调用是由我的代码的上层控制的,所以我不能对这些方法调用添加期望。 最佳答案 RSpecspy是测试这种情况的一种方式。要监视一个方法,用allowstub,除了方法名称之外没有任何约束,调用该方法,然后expect确切的方法调用。例如:allow(a).toreceive(:f)a.f(2)a.f(1)
假设我必须(小型到中型)阵列:tokens=["aaa","ccc","xxx","bbb","ccc","yyy","zzz"]template=["aaa","bbb","ccc"]如何确定tokens是否以相同的顺序包含template的所有条目?(请注意,在上面的示例中,应忽略第一个“ccc”,从而由于最后一个“ccc”而导致匹配。) 最佳答案 这适用于您的示例数据。tokens=["aaa","ccc","xxx","bbb","ccc","yyy","zzz"]template=["aaa","bbb","ccc"]po
我正在构建一个小部件来显示奥运会的奖牌数。我有一个“国家”对象的集合,其中每个对象都有一个“名称”属性,以及奖牌计数的“金”、“银”、“铜”。列表应该排序:1.首先是奖牌总数2.如果奖牌相同,按类型分割(金>银>铜,即2金>1金+1银)3.如果奖牌和类型相同,则按字母顺序子排序我正在用ruby做这件事,但我想语言并不重要。我确实找到了一个解决方案,但如果感觉必须有更优雅的方法来实现它。这是我做的:使用加权奖牌总数创建一个虚拟属性。因此,如果他们有2个金牌和1个银牌,加权总数将为“3.020100”。1金1银1铜为“3.010101”由于我们希望将奖牌数排序为最高的,因此列表按降序排
首先,我使用的是rails3.1.3和来自master的carrierwavegithub仓库的分支。我使用after_init钩子(Hook)来确定基于属性的字段页面模型实例并为这些字段定义属性访问器将值存储在序列化哈希中(希望它清楚我是什么谈论)。这是我正在做的事情的精简版:classPage省略mount_uploader命令让我可以访问我想要的属性。但是当我安装uploader时出现错误消息说“nil类的未定义新方法”我在源代码中读到有方法read_uploader和扩展模块中的write_uploader。我如何必须覆盖这些来制作mount_uploader命令使用我的“虚拟
我试图在每次运行时以随机顺序将一个名称数组拆分为多个数组。我知道如何拆分它们:name_array=["bob","john","rob","nate","nelly","michael"]array=name_array.each_slice(2).to_a=>[["bob","john"],["rob","nate"],["nelly","michael"]]但是,如果我希望它每次都以随机顺序吐出它们怎么办? 最佳答案 在做同样的事情之前,打乱数组。(Array#shuffle)name_array.shuffle.each_s
我有两个数组。第一个数组包含排序顺序。第二个数组包含任意数量的元素。我的属性是保证第二个数组中的所有元素(按值)都在第一个数组中,而且我只处理数字。A=[1,3,4,4,4,5,2,1,1,1,3,3]Order=[3,1,2,4,5]当我对A进行排序时,我希望元素按照Order指定的顺序出现:[3,3,3,1,1,1,1,2,4,4,4,5]请注意,重复是公平的游戏。A中的元素不应更改,只能重新排序。我该怎么做? 最佳答案 >>source=[1,3,4,4,4,5,2,1,1,1,3,3]=>[1,3,4,4,4,5,2,1,1
我有一个散列:sample={bar:200,foo:100,baz:100}如何使用sort_order中的键顺序对sample进行排序:sort_order=[:foo,:bar,:baz,:qux,:quux]预期结果:sample#=>{foo:100,bar:200,baz:100}我能想到的就是new_hash={}sort_order.each{|k|new_hash[k]=sample[k]unlesssample[k].nil?}sample=new_hash必须有更好的方法。提示?不应该出现没有值的键,即键的数量保持不变,SortHashKeysbasedonord
文章目录1、自相关函数ACF2、偏自相关函数PACF3、ARIMA(p,d,q)的阶数判断4、代码实现1、引入所需依赖2、数据读取与处理3、一阶差分与绘图4、ACF5、PACF1、自相关函数ACF自相关函数反映了同一序列在不同时序的取值之间的相关性。公式:ACF(k)=ρk=Cov(yt,yt−k)Var(yt)ACF(k)=\rho_{k}=\frac{Cov(y_{t},y_{t-k})}{Var(y_{t})}ACF(k)=ρk=Var(yt)Cov(yt,yt−k)其中分子用于求协方差矩阵,分母用于计算样本方差。求出的ACF值为[-1,1]。但对于一个平稳的AR模型,求出其滞