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

顺序图【6】--☆☆

先来模拟一下三国演义的赤壁之战的时序图,先知道它到底长什么样子,再深入介绍:

 小伙伴惊呆了,这样画战略图,一目了然,原来著名的战役是这么回事。这样看三国演义再也不会睡着了......

再看看各个大人物的主要操作:

代码模拟各任务操作:

复制代码
 1 public class 关羽
 2 {
 3     Public void  防守荊州();
 4 }
 5 public class 张飞
 6 {
 7    public void  防守荆州前线();
 8 }
 9 public class 孙权
10 {
11    public void  领兵相助();
12 }
13 publc class 刘备
14 {
15    public void 应战();
16 }
17 publc class  孔明
18 {
19   public void   拟定策略();
20   public void  联合孙权();
21   private void 借东风火攻();
22 }
复制代码

     (以上为伪代码,只为说明问题,缩短文章长度)。

分析一:用例图、活动图、时序图之间的关系

分析二:类图与时序图之间的关系

 

类图描述系统的静态结构,时序图描述系统的动态行为。

若出现了一个新的消息(不是类中的操作),则需要为类添加一个新的操作。

为类c添加k操作。如果这里不容易理解,可以参考上面的赤壁大战的时序图,你就知道该新加的操作到底是类B的还是C的。

时序图的作用

用对象间的交互来描述用例。(注意是对象间的)

寻找类的操作。

时序图的概念

时序图描述了对象之间传递消息的时间顺序,它用来表示用例的行为顺序。

 时序图的组成

 对象

对象是类的实例,对象是通过类来创建的,我们可以把类看作是创建对象的模版。

对象的符号

 时序图中的每个大峡谷显示单独的列里。

 对象的左右排列位置

对象的左右顺序并不重要,但是为了画图画的清晰整洁起见,通常应遵循一下两个原则:

(1)把交互频繁的对象尽可能地靠拢。

(2)把初始化整个交互活动的对象(有时是一个参与者)放置在最左边。

生命线lifeline

表示对象的生存时间。生命线从对象创建开始到对象销毁时终止。

对象在生命线上的两种状态:休眠状态、激活状态。

 消息

消息的概念:

对象之间的交互是通过相互发消息来实现的。一个对象可以请求(要求)另一个对象做某件事件。

消息从源对象指向目标对象。消息一旦发送便将控制从源对象转移到目标对象。

 时序图中,消息的阅读顺序是严格自上而下的。

 消息的类型与符号

 


实例:同步异步

你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。

你叫我去吃饭,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。

所以,要我请你吃饭就用同步的方法,要请我吃饭就用异步的方法,这样你可以省钱。^_^!

(1)简单消息

简单消息是没有区分同步和异步的消息。

简单消息用从一对下岗的生命线指向另一个对象的生命线的直线箭头来表示,箭头上面标出消息名。

(2)同步消息

消息的发送者把进程控制传递给消息的接收者,然后暂停活动,等待消息接收者的回应消息。

你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。

(3)异步消息

消息的发送者将消息发送给消息的接受者后,不用等待回应的消息,即可开始另一个活动。

你叫我去吃饭,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。

激活

激活的概念

当一个对象没有被激活期时,该对象处于休眠状态,什么事都不做,但它仍然存在,等待新的消息来激活它。

当一条消息被传递给对象的时候,它会触发该对象的某个行为,这就是说该对象被激活了。

当一个对象处于激活期时,表明该对象正处于执行某个动作。

激活的符号

激活用一个细长的矩阵框(在生命线上)表示。

矩形框的高度表示对象执行一个操作所经历的时间段,矩形的顶部表示动作的开始,底部表示动作的结束。

对象接收消息后可以由自己的某个操作来完成,也可以通过其他对象的操作来完成。

时序图的Rose建模

一、新建一个时序图

方法1:

方法2:右击某个用例,如下图所示

这种便于将用例图与时序图衔接起来

二、重命名并双击该时序图

三、添加对象

方法1:利用已经存在(创建)的类

a.从浏览器中将类(事先已创建)拖到时序图中

b. 双击该对象以设置对象的名称

方法2:新建对象,然后给该对象指定一个类

a.通过工具栏的对象按纽在时序图中添加一个对象

b.双击对象,给该对象指定一个类或新建一个类

 

四、添加消息

1、添加简单消息

a.使用此按纽在两个对象之间拖动

 

b.双击消息,在弹出的窗口中设置消息的名称

2、添加同步消息
方法:双击简单消息,在弹出的对话框选择“detail”选项
卡,选中”procedure a call”

3、添加异步消息
方法:双击简单消息,在弹出的对话框选择“detail”选项
卡,选中”Asynchronous”

4、删除对象
方法1:在”edit”菜单中选择“Delete from Model”
方法2:ctrl+D

5、时序图中的常用设置
以嵌套的形式显示消息的序号
取消或隐藏消息的编号
显示或隐藏激活条

(1)以嵌套的形式显示消息的序号

选择菜单【 Tools->Options 】,弹出以下对话框,选择 Diagram选项卡,选中Hierarchical Message

(2)取消或隐藏消息的编号

选择菜单【 Tools->Options 】,弹出以下对话框,选择 Diagram选项卡,选中或取消Sequence numbering

(3)显示或隐藏激活条

选择菜单【 Tools->Options 】,弹出以下对话框,选择 Diagram选项卡,选中或取消Focus of control

总结

时序图到此结束,如果有需要补充的可以留言,lz定补上。

时序图还是听复杂的,遇到问题得好好分析......

矩形框的高度表示对象执行一个操作所经历的时间段,矩形的顶部表示动作的开始,底部表示动作的结束。

对象接收消息后可以由自己的某个操作来完成,也可以通过其他对象的操作来完成。

比如下面的三张图表达的意思就不同了:

如果能把这三个图的区别搞明白了,时序图也掌握的差不多......Thinking..

转载于:https://www.cnblogs.com/Ph-one/p/9952177.html

相关文章:

  • 用例图【图7】--☆
  • 四则运算表达式分解,前中后缀表达式(栈的应用)
  • 嵌入式 Linux 对内存的直接读写(devmem)
  • C语言三个结束符:EOF ‘\0’ '\n'
  • Ymodem协议(参考STM32)
  • android uboot中的mmc命令
  • stm32最简单的实现BootLoader
  • 变参标准函数的重新封装,如printf
  • 导数与梯度
  • linux /Android 平台下使用 i2c-tools
  • 在android下使用i2c tools
  • ubuntu查看文件和文件夹大小
  • matlab的三维绘图和四维绘图
  • Matlab绘制三维曲面(以二维高斯函数为例)
  • VSCode 预览 .md 文件
  • canvas绘制圆角头像
  • conda常用的命令
  • ECS应用管理最佳实践
  • java中具有继承关系的类及其对象初始化顺序
  • JS+CSS实现数字滚动
  • leetcode386. Lexicographical Numbers
  • PHP的类修饰符与访问修饰符
  • QQ浏览器x5内核的兼容性问题
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • spring security oauth2 password授权模式
  • Spring-boot 启动时碰到的错误
  • Sublime text 3 3103 注册码
  • Yii源码解读-服务定位器(Service Locator)
  • 聚类分析——Kmeans
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 类orAPI - 收藏集 - 掘金
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 前端存储 - localStorage
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 区块链将重新定义世界
  • 实习面试笔记
  • 双管齐下,VMware的容器新战略
  • 说说动画卡顿的解决方案
  • 通过npm或yarn自动生成vue组件
  • 小程序01:wepy框架整合iview webapp UI
  • 学习Vue.js的五个小例子
  • linux 淘宝开源监控工具tsar
  • #QT(串口助手-界面)
  • $.ajax()
  • (C++17) std算法之执行策略 execution
  • (JS基础)String 类型
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (转)LINQ之路
  • (转)视频码率,帧率和分辨率的联系与区别
  • *上位机的定义
  • .Net core 6.0 升8.0
  • .Net 路由处理厉害了