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

UML之序列图的执行规范

执行规范(Execution Specification)是一个覆盖在生命线上的垂直的、不透明的矩形,这个矩形表示其覆盖的生命线正忙于执行某些行为。

在序列图中执行规范不是必需的,但复杂的序列图中可能需要查看执行栈或者对某些行为的结束点感兴趣,此时使用执行规范是有帮助的。如果在序列图中的任意一条生命线上使用了执行规范,那么就应当在该图中的所有生命线上都使用执行规范。使用了执行规范的序列图样例如图 1所示,而未使用执行规范的序列图样例如图 2所示。

图 1 在生命线上的执行规范

图 2 生命线上未使用执行规范

执行规范还可以有名称,但一般只在执行的行为名称与对应消息名称不一致时才需要使用执行规范名称。在实际建模工作中,大多数建模者从不为执行规范指定名称。

在图 1中,右侧生命线:Lifeline2在开始处存在执行规范,故它处于忙碌状态;然后它向左侧生命线:Lifeline1发送同步消息,左侧生命线:Lifeline1在接收到消息后开始忙碌执行(故在生命线上描画一个执行规范)。与此同时,右侧生命线:Lifeline2暂停执行,直到左侧生命线:Lifeline1执行完毕并返回结果给右侧生命线:Lifeline2之后,右侧生命线:Lifeline2恢复其之前的执行。

在图 1中,右侧生命线:Lifeline2暂停执行时,执行规范不再覆盖生命线。但由于当前消息是同步消息,右侧生命线:Lifeline2或其包含的部分或线程会等待同步消息的返回,所以依然可以将其视作“执行/忙碌”状态,因而通常情况下,建模者或者工具会使用一个持续到消息返回的执行规范(如图 3所示),而不是一个中间被切断的执行规范。

图 3 连续的执行规范

基于图 1的风格,一个序列图的两条生命线之间的交互时,生命线上的执行规范根据交互过程交替出现,而基于图 3的风格,则两条生命线上可并行出现执行规范。两条生命线由于同步消息而同时处于忙碌状态时,如果存在回调,则执行规范将产生重叠。在图 4中,左侧生命线:Lifeline3向右侧生命线:Lifeline4发送同步消息operate(),并且在消息中指定了一个回调操作。右侧生命线:Lifeline4在收到同步消息operate()后开启一个执行规范,但在该执行规范中,需要对左侧生命线:Lifeline3执行一个回调callback(),因而需要在序列图中描画一个由右侧生命线:Lifeline4发送至左侧生命线:Lifeline3消息callback(),这个消息在左侧生命线:Lifeline3上已经存在的执行规范上叠加一个新的执行规范。叠加的执行规范通常以相较于被叠加执行规范较小的矩形表示,并与被叠加执行规范稍微错开,正如在图 4中所描画的那样。

图 4 重叠的运行规范

一些建模者将执行规范理解为当前生命线的激活状态,一些UML工具也按照激活提供执行规范的建模支持,因而很容易引起概念混淆。事实上,激活状态只是执行规范的表现形式之一,并不等同于执行规范本身。执行规范作为UML模型中的一个元素,用于表示生命线在某段时间内正在执行的具体操作或行为,而激活只是帮助我们可视化这一执行过程的手段。如果将两者混为一谈,可能会导致对模型行为的误解。

在实际建模时,为更准确地表达行为语义,我们可以注意以下几点。

首先,要正确使用执行规范元素来体现对象的执行过程,而不应仅依赖工具自动绘制的激活条。确保每个执行规范的开始和结束都与相应消息的发送和返回相对应,这样可以清晰地标明对象何时开始执行操作以及何时结束。

其次,充分利用UML工具提供的功能来增强模型的语义表达,例如为执行规范注明所执行的操作名称或添加注释,使图中的激活更直观地反映实际行为。

最后,虽然不同UML工具对执行规范的呈现方式可能有所不同,但无论工具如何表现激活,都应牢记其背后代表的是执行规范这一概念。

通过这些实践,我们就能有效避免上述误解,在使用UML工具绘制序列图时更精准地传达系统的动态行为语义。

UML – 光头颜说IThttps://gtyan.com/archives/category/uml

本UML专栏https://blog.csdn.net/mboy2008/category_12860871.html

相关文章:

  • 【Typecho】给Joe主题后台添加custom自定义功能!
  • 详解 `from datasets import load_dataset`:数据格式、公开数据集与自定义数据集实战指南
  • 《Python Web部署应知应会》Flask网站隐藏或改变浏览器URL:从Nginx反向代理到URL重写技术
  • ES6 Map/WeakMap/Set/WeakSet 全解指南
  • java.lang.reflect.InaccessibleObjectException
  • 理解计算机系统_网络编程(3)
  • PCL点云处理之基于SAC-IA和ICP的点云配准完整流程(二百四十七)
  • 商用车与农用车电气/电子架构 --- 赋能智能车队管理与远程信息处理
  • wpf操作主流数据
  • 《ATPL地面培训教材13:飞行原理》——第13章:高速飞行
  • 毕业项目-Web入侵检测系统
  • 智能赋能与精准评估:大语言模型在自动作文评分中的效度验证及改进路径
  • 深入浅出理解并应用自然语言处理(NLP)中的 Transformer 模型
  • 支持Win和Mac的批量图片压缩方法
  • 跨端时代的全栈新范式:React Server Components深度集成指南
  • 神经网络笔记 - 感知机
  • Vmare安装好后报0xc00007b错误解决方法
  • dijkstra
  • 美团Java后端二面面经!
  • 基于亚马逊云科技构建音频转文本无服务器应用程序
  • 新干式二尖瓣瓣膜国内上市,专家:重视瓣膜病全生命周期管理
  • 伊朗港口爆炸致18死800余伤,三分之二伤者已出院
  • 知名计算机专家、浙江大学教授张森逝世
  • 敲定!今年将制定金融法、金融稳定法
  • 本周看啥|在电影院里听民谣,听摇滚,燥起来吧
  • 韩国首尔江南区一大型商场起火,消防部门正在灭火中