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

怎样把书上的事件图改编成活动图-《分析模式》漫谈43

DDD领域驱动设计批评文集

做强化自测题获得“软件方法建模师”称号

《软件方法》各章合集


《分析模式》中模型图的UML改编,之前也有人做过,Martin Fowler网站上给出了部分改编成果。

这些改编成果只覆盖了部分章节,而且只是把类型图(Type Diagram)改编成类图。书中的动态模型图,包括交互图(Interaction Diagram)、事件图(Event Diagram)和状态图(State Diagram)没有改编。

网络上其他地方也未搜到把书中的动态模型图改编成UML模型图的尝试。

之前的改编只是把类型图(Type Diagram)改编成类图,原因可能是这个相对来说比较容易,而动态模型图的改编更难一些。

动态模型图中,交互图和UML序列图的对应,状态图和UML状态机图的对应还是比较直接的,事件图又更复杂一些。

2024中译本(可能要到2025年初出版)将用UML改编全部模型图,覆盖全部章节,包括静态模型图和动态模型图。

**********

下面,我们来展示如何把事件图转成UML的活动图。

全书第一张事件图是图3.15: 

图片

图1 《分析模式》图3.15

Fowler在书中说,他是遵循James Odell的用法,并给出了参考书:James Martin和James Odell的Object-Oriented Methods: A Foundation(1995)。

UML1中的活动图来源是比较复杂的。以下文字摘自Martin Fowler的UML Distilled第2版(1999):

the activity diagram combines ideas from several techniques: the event diagrams of Jim Odell, SDL state modeling techniques, workflow modeling, and Petri nets.

可以看到,UML1的活动图参考了Odell的事件图、SDL状态建模、工作流建模和Petri网。

UML2的活动图做了大变革,改为基于Petri网的语义,解除了和其他表示法的绑定。

**********

我们先给出改编后的结果: 

图片

图2 原书图3.15的UML改编

并把图3.15的活动参数类型和图3.14的类图上的类对应: 

图片

图3 图3.15的活动图和图3.14类图的对应

改编后的图3.15看起来比原图复杂,但更严谨一些。

几个值得一提的地方:

(1)事件改为数据

下图是《分析模式》中给出的事件图规范: 

图片

图4 《分析模式》中给出的事件图规范

Odell的事件图上,结点是操作,是动词,输出是事件类型(event type,区分于事件发生event occurrence),还是动词。名词(对象、数据)呢?这个定义是有问题的。

Fowler可能也觉察到了这一点。图1给出的原图3.15中,Fowler在输出的地方写的是associated observation concepts(关联观察概念),这怎么看也不像是“事件类型”的命名,更像是输出的数据。 

图片

图5 associated observation concepts怎么看也不像“事件类型”

(2)把evaluate proposal(评估提案)合并到“提议观察”中

根据图4的事件图规范,菱形处应该是一个布尔表达式,这是合理的。但《分析模式》原图3.15中,菱形处所标的evaluate proposal看起来像是行为,不是一个条件表达式,这应该是Fowler的问题。 

图片

图6 《分析模式》原图3.15的菱形处看起来不像条件表达式

在UML活动图改编中,我们把evaluate proposal变成更合适的条件表达式。即使Fowler可能有这样的原意,想在evaluate proposal中包含一些行为,也应该把这些行为合并到Propose Observation中。

(3)添加了一个datastore(数据存储)结点

“做观察”活动应该有两个输出,一个是关联的观察概念(一个“观察概念”的对象集合),另外还应该产生观察的结果(一个“观察”的对象集合)。

前者Fowler原图有表达,并作为“提议观察”的输入;后者Fowler原图没有表达,所以添加一个datastore(数据存储)结点接收“做观察”产生的观察结果数据及令牌。

(4)钉耙符号

改编的图3.15中,结点图标右下角有一个钉耙形状的符号,说明这是一个Action(动作),是对Activity(活动)的调用,而不是Activity本身。 

图片

图7 图上是Action,不是Activity

Activity(活动)是定义。Activity Diagram(活动图)描述活动的实现,活动图上并没有“活动”,只有活动的调用(Action),调用的活动可以是其他活动,也可以是自己(递归)。

所以,平时我们见到的“流程图”或“活动图”,很多是不严谨的,把定义和使用混在了一起。

**********

一些参考:

(1)2002年4月,James J. Odell在UMLChina做的交流

交流实录在:umlchina.com/Chat/odell.htm

图片

翻译整理发表在《非程序员》2002年第5期,所有各期《非程序员》杂志的pdf下载:umlchina.com/xprogrammer/index1.html

图片

图片

(2)“水蒸馏器”案例

如果想深入学习活动图,可以参考此案例,里面大量而且深入地使用了活动图。

umlchina.com/url/video.html,里面的SYS-001番号。

图片

http://www.lryc.cn/news/472508.html

相关文章:

  • CodeFormer——基于代码本查找变换器的鲁棒盲人脸修复翻译
  • 监控场景下,视频SDK的应用策略
  • 前端面试必备!HTML 超实用考点全解析
  • 自动驾驶系统研发系列—避免事故的利器:AEB自动紧急制动系统详解
  • zabbix 6.0 监控clickhouse(单机)
  • Redis的RDB执行原理
  • 速度背!24下软考网工“经典100道母题来了”!
  • three.js 纹理(Texture)、深度纹理(DepthTexture)、视频纹理(VideoTexture)
  • 广东自闭症全托机构:提供高质量的康复服务
  • Nodejs安装配置及创建vue项目
  • 浅析正交投影矩阵和透视投影矩阵的推导
  • python四舍五入保留两位小数不足补0
  • Mybatis-15.动态SQL-if
  • gb28181-sip注册流程
  • WEBRTC教程:局域网怎么调试,http://172.19.18.101:8080 ,无法访问摄像头和麦克风,请检查权限
  • Apache POI—读写Office格式文件
  • 3162. 优质数对的总数 I
  • (五)Web前端开发进阶2——AJAX
  • 数据结构(java)——数组的构建和插入
  • AI-CNN-验证码识别
  • React 前端框架全面教程:从入门到进阶
  • 重拾CSS,前端样式精读-布局(弹性盒)
  • Python 使用 LSTM 进行情感分析:处理文本序列数据的指南
  • MySQL:INSERT IGNORE 语句的用法
  • java模拟进程调度
  • 大模型AI在教育领域有哪些创业机会?
  • 网页上视频没有提供下载权限怎么办?
  • 【去哪里找开源商城项目】
  • ei会议检索:第二届网络、通信与智能计算国际会议(NCIC 2024)
  • vue添加省市区