uml序列图详解:大话UML-构建序列图
uml序列图详解:大话UML-构建序列图突变事件影响的类必须被识别。这是基于状态图(见行为视图)发生的。问题是:识别涉及的类 - 突变事件受到什么影响?传播事件 - 突变事件如何转发?指定事件参数 - 对象必须知道什么?验证序列图 - 一切正确吗?
以下清单显示了从用例构建每个突变事件的序列图的必要步骤。随后,我们将进一步解释个别步骤:
清单在交互视图中构建序列图
-
识别涉及的课程 - 什么是突变事件?
-
确定初始对象 - 突变事件首先在哪里?
-
传播事件 - 突变事件如何转发?
-
指定事件参数 - 对象必须知道什么?
-
验证序列图 - 一切正确吗?
识别涉及的类 - 突变事件受到什么影响?
突变事件影响的类必须被识别。这是基于状态图(见行为视图)发生的。问题是:
-
某些突变事件已经受到哪些类别的影响?要回答这个问题,你必须查找哪些状态图包含突变事件。如果突变事件存在于类的状态图中,则该类受到突变事件的影响,这意味着突变事件必须发送到此类。
-
哪些其他类受突变图影响?可能是有一些类受到突变事件的影响,但在状态图中尚未出现。
第一个问题可以很容易地回答。大多数CASE工具可以生成例如已经受影响的类的列表。为了找到进一步受影响的类,请查看类图,并考虑当突变事件发生时是否与每个类的对象发生任何事情。至少应该再看一下那些靠近类图上已经受到影响的类的类。当然,如果找到其他类,则必须通过插入突变事件来更新其状态图。在我们的案例研究中,突变事件«M»记录行李影响班级券和行李,如图1 所示:
图1 序列图中受影响的类
确定初始对象 - 突变事件首先在哪里?突变从初始对象开始。初始对象可以是一个类(其作为一个集合的函数)或一个类的特定对象。如果某个对象直接被寻址,例如某个航空对象或某个票据对象,则在发送变异事件之前必须知道该对象。如果一个类被寻址,参数可以附加到突变事件作为选择参数,使得可以选择特定的对象。必须通过连接从初始对象访问所有进一步需要的类。具体问题是:
-
哪个是事件应该去的第一个对象?
-
我已经知道了哪个对象?
-
我在哪里开始收集信息?
在我们的案例研究中,在突变事件«M»记录的行李中,优惠券对象已经是已知的,因为整个签到发生在特定优惠券上。要记录的新的行李物品尚不存在。因此,初始对象是优惠券对象。
传播活动 - 突变事件如何转发?从初始对象开始,确定一个序列,其中受影响的对象接收到突变事件。问题是:
-
我在哪个顺序可以覆盖类图中的所有受影响的对象?
突变事件沿着类图中的关系转发到受突变事件影响的所有类。在案例研究的类图中,从优惠券到一件行李存在关联,沿着该协议可以发送一个突变事件,如图2 所示:
图2 序列图中的事件
指定事件参数 - 对象必须知道什么?处理突变事件所需的信息作为事件的参数转发。问题是:
-
为了处理突变,对象需要哪些信息?
为了在我们的案例研究中产生一个新的行李物品,我们需要它的重量。因此,权重将作为事件参数转发,如图3 所示:
图3 序列图中的事件参数
验证序列图 - 一切正确吗?完成的顺序图可以通过以下清单进行验证:
清单在交互视图中验证序列图
-
受序列图中列出的突变事件影响的所有类别?
-
突变事件是否沿着类图中的关联转发?
如果这两个问题的答案是肯定的,那么最大的错误来源就被消除了。