快捷搜索:  汽车  科技

uml序列图详解:大话UML-构建序列图

uml序列图详解:大话UML-构建序列图突变事件影响的类必须被识别。这是基于状态图(见行为视图)发生的。问题是:识别涉及的类 - 突变事件受到什么影响?传播事件 - 突变事件如何转发?指定事件参数 - 对象必须知道什么?验证序列图 - 一切正确吗?

uml序列图详解:大话UML-构建序列图(1)

以下清单显示了从用例构建每个突变事件的序列图的必要步骤。随后,我们将进一步解释个别步骤:

清单在交互视图中构建序列图

  • 识别涉及的课程 - 什么是突变事件?

  • 确定初始对象 - 突变事件首先在哪里?

  • 传播事件 - 突变事件如何转发?

  • 指定事件参数 - 对象必须知道什么?

  • 验证序列图 - 一切正确吗?

识别涉及的类 - 突变事件受到什么影响?

突变事件影响的类必须被识别。这是基于状态图(见行为视图)发生的。问题是:

  • 某些突变事件已经受到哪些类别的影响?要回答这个问题,你必须查找哪些状态图包含突变事件。如果突变事件存在于类的状态图中,则该类受到突变事件的影响,这意味着突变事件必须发送到此类。

  • 哪些其他类受突变图影响?可能是有一些类受到突变事件的影响,但在状态图中尚未出现。

第一个问题可以很容易地回答。大多数CASE工具可以生成例如已经受影响的类的列表。为了找到进一步受影响的类,请查看类图,并考虑当突变事件发生时是否与每个类的对象发生任何事情。至少应该再看一下那些靠近类图上已经受到影响的类的类。当然,如果找到其他类,则必须通过插入突变事件来更新其状态图。在我们的案例研究中,突变事件«M»记录行李影响班级券和行李,如图1 所示:

图1 序列图中受影响的类

确定初始对象 - 突变事件首先在哪里?

突变从初始对象开始。初始对象可以是一个类(其作为一个集合的函数)或一个类的特定对象。如果某个对象直接被寻址,例如某个航空对象或某个票据对象,则在发送变异事件之前必须知道该对象。如果一个类被寻址,参数可以附加到突变事件作为选择参数,使得可以选择特定的对象。必须通过连接从初始对象访问所有进一步需要的类。具体问题是:

  • 哪个是事件应该去的第一个对象?

  • 我已经知道了哪个对象?

  • 我在哪里开始收集信息?

在我们的案例研究中,在突变事件«M»记录的行李中,优惠券对象已经是已知的,因为整个签到发生在特定优惠券上。要记录的新的行李物品尚不存在。因此,初始对象是优惠券对象。

传播活动 - 突变事件如何转发?

从初始对象开始,确定一个序列,其中受影响的对象接收到突变事件。问题是:

  • 我在哪个顺序可以覆盖类图中的所有受影响的对象?

突变事件沿着类图中的关系转发到受突变事件影响的所有类。在案例研究的类图中,从优惠券到一件行李存在关联,沿着该协议可以发送一个突变事件,如图2 所示:

uml序列图详解:大话UML-构建序列图(2)

图2 序列图中的事件

指定事件参数 - 对象必须知道什么?

处理突变事件所需的信息作为事件的参数转发。问题是:

  • 为了处理突变,对象需要哪些信息?

为了在我们的案例研究中产生一个新的行李物品,我们需要它的重量。因此,权重将作为事件参数转发,如图3 所示:

uml序列图详解:大话UML-构建序列图(3)

图3 序列图中的事件参数

验证序列图 - 一切正确吗?

完成的顺序图可以通过以下清单进行验证:

清单在交互视图中验证序列图

  • 受序列图中列出的突变事件影响的所有类别?

  • 突变事件是否沿着类图中的关联转发?

如果这两个问题的答案是肯定的,那么最大的错误来源就被消除了。

猜您喜欢: