一步一步学习UML(3)-时序图

本文详细介绍UML时序图的基本概念,包括时序图的组成元素如角色、对象、生命线、控制焦点和消息,以及如何使用时序图来分析业务流程的优缺点。通过实例说明时序图在系统设计中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、时序图简介
时序图(Sequence Diagram),又名序列图、循序图,是对象之间交互的UML交互图,这些对象是按时间顺序排列的。时序图中建模元素主要有:角色(Actor)、对象(Object)、生命线(Lifeline)、控制焦点(Focus of control)、消息(Message)等等。
2、时序图元素
角色(Actor)
系统角色,可以是人、其他的系统或子系统。
对象(Object)
对象代表时序图中的对象在交互中所扮演的角色,位于时序图顶部和对象代表类角色
对象一般包含以下三种命名方式:
第一种方式包含对象名和类名。
第二种方式只显示类名不显示对象名,即为一个匿名对象。
第三种方式只显示对象名不显示类名。
在这里插入图片描述
生命线(Lifeline)
生命线代表时序图中的对象在一段时期内的存在。时序图中每个对象和底部中心都有一条垂直的虚线,这就是对象的生命线,对象间 的消息存在于两条虚线间。
在这里插入图片描述
控制焦点(Focus of control)
控制焦点代表时序图中的对象执行一项操作的时期,在时序图中每条生命线上的窄的矩形代表活动期。它可以被理解成C语言语义中一对花括号“{}”中的内容。
消息(Message)
消息是定义交互和协作中交换信息的类,用于对实体间的通信内容建模,信息用于在实体间传递信息。允许实体请求其他的服务,类角色通过发送和接受信息进行通信。下图只列举了常用的几种消息,还有其他比如异步消息,删除消息等
在这里插入图片描述

3、 通过时序图分析业务流程的优缺点
优点:
角色之间的交互一目了然、层次清晰;
不用考虑或考虑“系统角色”,两种情况分别代表系统上线前后的流程变化,即上线前可以不用考虑“系统角色”,上线后必须把“系统角色”考虑流程变化;
将系统作为角色加入到流程中,帮助我们提炼出更合适的用例(UseCase)。
缺点:
不太适合表达复杂的分支结构,可以考虑活动图或者还是时序图,选择重要的分支,每个分支只画一个。
4、总结:
通过时序图进行详细设计,如果架构设计和数据库设计都能做好,其实已经解决了功能设计的大部分问题了,并需要全部用例进行详细设计,只需要挑选有价值、难度较大等部分进行详细设计就可以。
PS:以上图是通过starUML工具画的,Mac上个人觉得用起来还不错。

### 绘制 UML 时序图的方法 UML 时序图是一种用于描述对象之间交互行为的动态模型工具,它通过展示对象间消息传递的时间顺序来反映系统的运行机制[^1]。以下是关于如何绘制 UML 时序图的具体说明: #### 1. 明确参与者和对象 在绘制时序图之前,需先识别出系统中的 **参与者(Actor)** 和 **对象(Object)**。这些实体是交互的主要组成部分,它们将在时序图中表现为水平排列的生命线[^3]。 #### 2. 添加生命线 每一名参与者或每一个对象都需要一条垂直虚线作为其 **生命线(Life Line)**,这表示该实体在整个交互过程中存在的时段。生命线贯穿整个绘图区域的高度,反映了对象的存在周期[^4]。 #### 3. 定义控制焦点 当某个对象正在执行特定操作时,在它的生命线上会有一个矩形框标记出来,这个部分称为 **控制焦点(Activation)**。控制焦点表明当前时间段内此对象处于活跃状态并负责完成某些功能。 #### 4. 描述消息传递 消息(Message) 是连接各个对象的关键元素之一,分为同步消息、异步消息等多种形式。 - **同步消息**:箭头指向目标对象,并带有返回箭头以指示响应; - **异步消息**:仅单向发送而不立即等待回应; - **自关联消息**:同一线上的循环箭头代表同一对象内部调用自身方法的情况。 #### 5. 使用组合片段表达复杂逻辑 对于更复杂的场景,可以引入 **组合片段(Combined Fragment)** 来封装一组条件下的动作序列或者替代路径等高级特性。 #### 示例代码演示 以下是一个简单的 C++ 程序对应的 UML 时序图示例: ```cpp class Order { public: void placeOrder(); }; class PaymentGateway { public: bool processPayment(double amount); }; void Order::placeOrder() { double totalAmount = calculateTotal(); // 自身计算总价 PaymentGateway payment; if (payment.processPayment(totalAmount)) { // 调用支付网关接口 confirmOrder(); // 支付成功确认订单 } else { cancelOrder(); // 失败取消订单 } } ``` 对应于上述程序结构,我们可以构建如下时序图: 1. `Customer` 发送 “Place Order” 请求给 `Order`; 2. `Order` 执行内部业务逻辑 (`calculateTotal`); 3. 如果金额有效,则继续与 `Payment Gateway` 进行通信尝试付款; 4. 根据结果决定下一步行动——要么通知客户已接受订单(`confirmOrder`) ,要么告知交易失败需要重新提交或其他措施(`cancelOrder`); --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值