[答疑]人翻书,翻书的操作是在人上还是书上

2019 年 6 月 10 日 UMLChina

立轩 2019-4-8 16:50

我有个问题,有个类书,一个类人,现在人想翻书,那么翻这个方法是放在书的类上,还是人的类上

UMLChina潘加宇

一、区分业务建模和分析工作流中的类

首先,我们要区分业务建模和分析工作流中的类。

如果是业务建模工作流,建模的内容是组织流程中各个系统之间的协作,摄像机会拍到一个人肉系统做出翻书的行为,用业务序列图表达如图1。这个图只能如实描述所拍到的现实,无法"设计"。



图1 摄像机拍到的人翻书的序列图(注意,书不作为一个智能系统出现,只是作为人的"翻书"操作的参数。)

这里假设谈论的"书"指的是实体书,而不是电子阅读器系统(平时说的"我买了个电纸书",实际上买的是阅读器系统)。人用电子阅读器系统看书的业务序列图,留个读者自己画。

如果是分析工作流,建模的内容是软件系统内部的结构和行为。如果软件开发人员的大脑容量、运算速度以及身体健壮程度是现在的一万倍,像图2那样做也是可以的,毕竟最早的时候,编程序就是用纸带穿孔嘛。



图2 关于"高手"的传说

只不过现在的软件系统里需要封装的东西太多太复杂了,人脑直接二进制编码无法短时间搞定(也不是搞不定,就是时间长而已),所以,用面向对象的思维帮助人脑应对这种复杂性,是一种开发软件的方法。

如果决定用面向对象的思维来思考软件系统内部的机制,我们就假设软件系统由一些类来定义,这些类模拟了现实中的一些事物和概念,然后把软件系统需要承担的各种责任分解并分配到这些类中。

和图1所示场景相关的软件系统,如果用面向对象的思维,里面有什么类呢?

(1)如果这个软件系统不需要记住书和人的信息,系统里面的类没有"人"和"书"。例如图书馆装了一个视频监控系统。

(2)如果这个软件系统需要记住书的信息,不需要记住人的信息,那么系统里面的类有"书"但没有"人"。

(3)如果这个软件系统需要记住人的信息,不需要记住书的信息,那么系统里面的类有"人"但没有"书"。

(4)如果这个软件系统需要记住书的信息,也需要记住人的信息,那么系统里面的类有"书"也有"人"。

(5)如果这个软件系统需要记住书的信息,也需要记住人的信息,而且还需要记住"翻书"这个行为给人或书带来的影响,这应该就是问题所要问的。

注意:软件系统里面的"人"不等于外面真实的人肉系统。外面这个人肉系统是父母用DNA编码,老师升级了十几年得到的,目前宇宙间已知的最发达智能系统,里面那个"人"只是为了方便人脑把握问题复杂性而构思的一个模拟。到底模拟0.00001%还是99.99%,看软件系统需要封装的信息的复杂度了。

之所以啰嗦这么多才说到正题,是想要说明,轻飘飘的一句话背后并没有那么简单。

二、"翻书"是谁的责任

针对上一节的第(5)种情况,如果把"翻书是谁的操作"这个问题抛出后,只给3秒钟时间思考——

有的人会直接对应现实,现实中人翻书,翻书当然是人的责任;

有的人可能会迅速判断书的状态最值得关注,翻书是书的责任。如果这两个选一个招人,肯定选后者了。

不过,更严谨的思考应该是这样:

(1)如果"翻书"会引起"人"的状态变化,"人"有"翻书"的操作;

可能有人会想,"翻书"怎么会引起"人"的状态变化呢?这种先入为主的思想不可取。想想秦始皇焚书坑儒就知道了,也可以用状态机表示如图3。



图3 人的状态机

"看书相当于吸毒"的时代离我们并不遥远,如图4。

图4 几十年前的报纸(来自孔夫子旧书网)

(2)如果"翻书"会引起"书"的状态变化,"书"有"(被人)翻"的操作;



图5 书的状态机

(3)如果"翻书"会引起"人"和"书"的状态变化,"人"有"翻书"的操作,"书"也有"(被人)翻"的操作;

(4)如果"翻书"不会引起"人"的状态变化,也不会引起"书"的状态变化,比如说,系统只要求像录像机一样记住某日某时某某人翻了某某书,没有其他逻辑。用来"记住某日某时某某人翻了某某书"的"翻书"操作放在哪里都无所谓。






登录查看更多
0

相关内容

【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
56+阅读 · 2020年6月26日
【干货书】数值计算C编程,319页pdf,Numerical C
专知会员服务
67+阅读 · 2020年4月7日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
224+阅读 · 2020年3月22日
Python数据分析:过去、现在和未来,52页ppt
专知会员服务
99+阅读 · 2020年3月9日
【强化学习】深度强化学习初学者指南
专知会员服务
179+阅读 · 2019年12月14日
元素周期表都见过,但这顿操作也太硬核了吧!
材料科学与工程
3+阅读 · 2019年5月19日
Python数据分析案例实战
炼数成金订阅号
5+阅读 · 2019年5月9日
逆向 | C++ 加壳程序的编写思路
计算机与网络安全
9+阅读 · 2019年1月1日
做机器学习和AI必备的42个数学知识点
AI前线
9+阅读 · 2018年12月6日
为什么大家都不戳破深度学习的本质?
36大数据
4+阅读 · 2017年12月7日
Natural 自然语言处理(NLP)「全解析」
人工智能学家
14+阅读 · 2017年9月23日
谈谈用户画像
caoz的梦呓
10+阅读 · 2017年8月17日
可怕,40 行代码的人脸识别实践
51CTO博客
3+阅读 · 2017年7月22日
谈谈王者荣耀
小道消息
4+阅读 · 2017年7月6日
Arxiv
6+阅读 · 2019年7月11日
Factor Graph Attention
Arxiv
6+阅读 · 2019年4月11日
Arxiv
6+阅读 · 2018年11月1日
Arxiv
10+阅读 · 2018年2月9日
VIP会员
相关VIP内容
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
56+阅读 · 2020年6月26日
【干货书】数值计算C编程,319页pdf,Numerical C
专知会员服务
67+阅读 · 2020年4月7日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
224+阅读 · 2020年3月22日
Python数据分析:过去、现在和未来,52页ppt
专知会员服务
99+阅读 · 2020年3月9日
【强化学习】深度强化学习初学者指南
专知会员服务
179+阅读 · 2019年12月14日
相关资讯
元素周期表都见过,但这顿操作也太硬核了吧!
材料科学与工程
3+阅读 · 2019年5月19日
Python数据分析案例实战
炼数成金订阅号
5+阅读 · 2019年5月9日
逆向 | C++ 加壳程序的编写思路
计算机与网络安全
9+阅读 · 2019年1月1日
做机器学习和AI必备的42个数学知识点
AI前线
9+阅读 · 2018年12月6日
为什么大家都不戳破深度学习的本质?
36大数据
4+阅读 · 2017年12月7日
Natural 自然语言处理(NLP)「全解析」
人工智能学家
14+阅读 · 2017年9月23日
谈谈用户画像
caoz的梦呓
10+阅读 · 2017年8月17日
可怕,40 行代码的人脸识别实践
51CTO博客
3+阅读 · 2017年7月22日
谈谈王者荣耀
小道消息
4+阅读 · 2017年7月6日
Top
微信扫码咨询专知VIP会员