### UML中文教材-第五章:动态建模
#### 5.1 对象之间的交互:消息
在面向对象编程中,对象之间的交互主要是通过发送消息实现的。消息可以看作是一种对象之间的通信手段,用于调用其他对象的操作或方法。
**消息类型**:
- **简单消息**:表示普通的控制流,仅用来表明控制权从一个对象转移到另一个对象,并不包含具体的通信细节。
- **同步消息**:代表了一个嵌套的控制流,通常是某个操作的调用。处理同步消息的操作会在调用者恢复执行之前完成。
- **异步消息**:代表了一种异步控制流,在这种情况下,发送者发送消息后无需等待接收者处理完成即可继续执行。这对于需要支持并发或实时系统的场景非常有用。
- **同步且立即返回的消息**:结合了简单消息与同步消息的特点,表示操作调用完成后立即返回控制给调用者。
#### 5.2 状态图
状态图用于描述对象在其生命周期中的状态变化,以及不同状态之间的转换过程。
**状态图的基本元素**:
- **状态**:表示对象在某一时间点上的情况。
- **事件**:触发状态转变的因素,通常是外部输入或内部事件。
- **动作**:当状态发生变化时执行的操作。
- **转换**:定义了状态间的迁移路径,包括触发转换的条件、源状态、目标状态等。
**示例**:以发票为例,其可能的状态包括“未付款”(Unpaid)和“已付款”(Paid)。当收到付款时,会触发从“未付款”到“已付款”的状态转换。
#### 5.3 状态图之间发送消息
在复杂的系统中,多个状态图可能会互相交互,通过发送消息来协调彼此的状态变化。例如,一个订单状态图可能需要根据库存状态图的状态变化来调整自身状态。
#### 5.4 序列图
序列图用来展示对象之间的交互顺序,特别是在时间维度上。它强调的是消息传递的时间顺序,有助于理解对象之间的依赖关系和交互逻辑。
**序列图的关键组成部分**:
- **对象**:参与交互的对象。
- **生命线**:表示对象存在的时间段。
- **激活期**:表示对象正在执行某项任务的时间段。
- **消息**:表示对象间通信的箭头,可以是简单消息、同步消息或异步消息。
**示例**:假设有一个在线购物系统,客户对象向购物车对象发送“添加商品”消息,然后购物车对象向库存对象发送“检查库存”消息。
#### 5.5 协作图
协作图(现在更多称为通信图)同样用来描述对象之间的交互,但它更侧重于空间维度上的协作关系。与序列图相比,协作图更加关注对象间的链接和关联,适用于描述对象之间的复杂关系。
**协作图的特点**:
- **对象及其关联**:清晰地展示了对象之间的连接方式。
- **消息**:类似于序列图,消息用于表示对象间的通信。
**示例**:在一个团队协作项目管理工具中,项目经理对象可以向团队成员对象发送任务分配消息,同时团队成员之间也可以相互发送协同工作消息。
#### 5.6 活动图
活动图用于描述工作流程中的步骤和活动,特别适用于描述一系列动作的执行顺序和控制流。它可以用来展示业务流程、算法流程等。
**活动图的主要元素**:
- **节点**:表示流程中的一个步骤,如动作节点、判断节点等。
- **边**:连接节点,表示控制流的方向。
- **分支**:根据条件决定流程的不同走向。
- **循环**:表示重复执行的动作。
**示例**:在银行账户管理系统中,转账操作可以被表示为一系列的动作节点,包括验证用户身份、查询余额、执行转账、更新账户余额等。
#### 5.7 小结
本章介绍了UML中的动态建模概念,重点探讨了对象之间的交互方式,以及用于描述这些交互的图示工具,包括状态图、序列图、协作图和活动图。这些工具帮助开发者从不同角度理解系统的动态行为,从而更好地设计和实现软件系统。通过这些图示,不仅可以清楚地表达系统的行为逻辑,还能有效地沟通和协调开发团队的工作。